Forum: Mikrocontroller und Digitale Elektronik lcd initialisierung


von Lars W. (Gast)


Lesenswert?

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

von Thomas S. (tosa)


Lesenswert?

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

von Lars W. (Gast)


Lesenswert?

super vielen dank das hat geholfen

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.