Hallo, ich habe ein problem mit meinem lc-display ich möchte von meinem mikrocontroller ATmega 8535, eine 4 stellige Zahl ausgeben und habe dazu folgendes in der initialisierung des displays stehen: void lcd_zeichen(char Zeichen) { sbi(PORTD,rs); // rs = 1 Datenmodus lcd_write(Zeichen); _delay_ms(1); } ________________________________________________________ void lcd_zahl(unsigned char Zahl) { lcd_zeichen(0x30+Zahl / 1000) ;Zahl %= 1000; lcd_zeichen(0x30+Zahl / 100) ;Zahl %= 100; //30 von ASCII Code //lcd_zeichen('.'); lcd_zeichen(0x30+Zahl / 10) ;Zahl %= 10; lcd_zeichen(0x30+Zahl); } im main programm rufe ich das ganze wie folgt auf: long Schalldruckverhaeltnis = 8324 lcd_text(1,"Lautstaerke: "); lcd_zahl(Schalldruckverhaeltnis); lcd_text(1," dB"); es zeigt mir allerding immer nur die letzten 3 stellen an und rundet ab ca 217 auf 4 stellig zeigt aber trotzdem 0217 an hoffentlich könnt ihr mir helfen
Hi Du uebergibt einen unsigned char an die Funktion. Das sind 8 Bit und damit ist der Wertbereich des Parameters auf 0 .. 255 beschraenkt. Verwende statt dessen einen 16 Bit Typ. Z.B. uint16_t. Wie gross ist der Wertbereich fuer 'Schalldruckverhaeltnis'? Hier hast Du einen long verwendet. Gruesse
Noch ein Tip Anstelle der 0x30 in
1 | lcd_zeichen(0x30+Zahl / 1000); |
schreibs lieber so
1 | lcd_zeichen( '0' + Zahl/1000 ); |
dann versteh man auch, was da passiert. Und das der ASCII Code von '0' gleich 0x30 ist ... das muss wirklich niemand auswendig wissen. Das kann man getrost dem Compiler überlassen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.