Prosim o vysvetlenie casti kodu

Ahojte,prosim moze mi niekto polopate vysvetlit cast kodu konkr.prevod na ascii znak

ADC_Value = 256;
DisplayVolt = ADC_Value ;
volt[0] = DisplayVolt/1000 + 48;
volt[1] = (DisplayVolt/100)%10 + 48;
volt[3] = (DisplayVolt/10)%10 + 48;
Lcd_Out(2,5,volt);

nejak to delenie a zvysok nemozem pochopit.Dal som si ako priklad ADC hodnotu 256 a ze si to na papier napisem ,ako sa to prevedie na display no nejak mi to nejde do hlavy.Dakujem

Zdá se to být jednoduché:

  • první dva řádky přidělí hodnotu a převedou do proměnné DisplayVolt
  • třetí řádek si vytáhne z této proměnné tisíce které tam teď nebudou
  • čtvrtý řádek stovky
  • a pátý desítky
  • pak se to vypíše na LCD - druhý řádek od pátého znaku

Z příkladu není není jasný typ proměnných, předpokládám že DisplejVolt je byte, volt je určitě string.

%10 znamená, že z výsledku dělení si bere jenom číslo na řádu jednotek
a + 48 je ofset mezi hodnotou čísla a jeho adresou v tabulce ASCII

Divné je, že 256 nemá tisíce (zde bude nula), do řetězce volt se zapisují číslice na 1,2 a 4té místo a chybí jednotky. Můžu jenom domýšlet, že na 3. místě má být desetinná tečka a celý výpočet m.j. dělí ADC_Value stovkou.

Stačí?

me to taky nejak nejde do hlavy ,nema to bejt nejak takle ?

[code]unsigned int8 volt[5],i;
unsigned int16 ADC_Value,DisplayVolt;

ADC_Value = 256;
DisplayVolt = ADC_Value ; // DisplayVolt =256
volt[0] = DisplayVolt/1000 + 48; //volt[0] = 256/1000=dec 0+48=ascii 0
volt[1] = (DisplayVolt/100)%10 + 48; //volt[1] = 256/100=2.56 %10 vycleni nejkrajnejsi cislici z prava=dec 2 +48=ascii 2
volt[2] = (DisplayVolt/10)%10 + 48; //volt[2] = 256/10=25.6 %10 vycleni nejkrajnejsi cislici z prava=dec 5 +48=ascii 5
volt[3] = (DisplayVolt/1)%10 + 48; //volt[3] = 256/1=256 %10 vycleni nejkrajnejsi cislici z prava=dec 6 +48=ascii 6

for(i=0;i<4;i++)
{
if(!(volt*==0x30))Lcd_Out(volt*);
} [/code]

PS: nevim jak funguje funkce Lcd_Out…

EDIT: aa nekdo me predbeh nez sem to sesmolil…
EDIT2:

mozna strelil cislo od boku nebo ma 10b rozliseni AD a pocita s tim,nebo se preklep

for(i=0;i<4;i++) { if(!(volt*==0x30))Lcd_Out(volt*); } tak tohle je blbost, kdyz bude 0 kdekoliv v cisle tak ti ji nevipise , takze takle nee**

Ahojte,dakujem ano 256 som len strelil pre potrebu mikroc prostredia.Ked som tam nechal iba aby tam ostala hodnota z ad prevodu tak pri krokovani v mikroc mi to ostane na ad prevode.Ostatne si anonym presne domyslel a uz tomu zacinam chapat.Este mi celkom hlave nebere to %10, chcelo by to asi konkretny priklad.Dakujem

sem ti to tam napsal
%10 ti vycleni prvni celou cistici z prava
256/10=25.6 %10=5 -> je prvni cela cislice z prava, kdyz das %100 tak to bude 2 , chapeme ?

Milo,dakujem uz tomu zrejme chapem,idem sa stym pasovat.