Forum: Mikrocontroller und Digitale Elektronik "Gradzeichen" und "C" auf LCD Display ausgeben 16*2


von Heinz (Gast)


Lesenswert?

Hallo,

Ich schaffe es nicht ein Gradzeichen auszugeben.

Hier ist mein Code:

lcd_gotoxy(0,0);
itoa(temp,buffer,10);
lcd_puts("Temperatur:");
lcd_puts(buffer);

lcd_gotoxy(0,1);
itoa(f,buffer,10);
lcd_puts("Fahrenheit:");
lcd_puts(buffer);

Ich habe im Datenblatt nachgeguckt und dort im Zeichencode für das 
Gradzeichen rausgefunden, dass es der Hexawert 0xA0 ist.

Habe es mit lcd_puts(0x0A); versucht.

Leider funktioniert das nicht.

Wie schaffe ich es dazu dann das C hinter der Temperatur auszugeben?

von Timmo H. (masterfx)


Lesenswert?

Da lcd_puts für einen nullterminierten String gedacht ist, solltest du 
sowas wie lcd_putc für ein einzelnes Zeichen verwenden (schau dir mal 
die Quelle von lcd_puts an, da wirst du sehen dass dort jedes Zeichen 
einzeln via lcd_putc o.Ä. ausgegeben wird)

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Heinz schrieb:
> Habe es mit lcd_puts(0x0A); versucht.

0x0A ist kein String, sondern ein Byte. Und damit kann dein lcd_puts() 
höchstwahrscheinlich nichts anfangen.

von chris (Gast)


Lesenswert?

in asm muss man .db "ßC" schreiben wie es in der hochsprache aussieht 
keine ahnung oder aber du schaust ins DB des LCD's unter CHARAKTERS und 
sendest als command FC= 1111 1101

von CC (Gast)


Lesenswert?

1
char buf[2] = {0xa0, '\0};
2
lcd_puts(buf);

von chris (Gast)


Lesenswert?

ähm vergesst meinen text is bullshit was dort steht

dachte geht um das °zeichen

asche auf mein haupt

von holger (Gast)


Lesenswert?

>Ich habe im Datenblatt nachgeguckt und dort im Zeichencode für das
>Gradzeichen rausgefunden, dass es der Hexawert 0xA0 ist.

Bei meinen Displays war das bisher immer 0xDF.
Aber gut möglich das es bei dir 0xA0 ist.

>Habe es mit lcd_puts(0x0A); versucht.

Also gleich doppelt falsch. Wenn schon dann auch lcd_puts(0xA0);
Dann hast du nur noch einen Fehler. lcd_putc(0xA0); und der
zweite Fehler ist weg.

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe im Datenblatt nachgeguckt und dort im Zeichencode für das
>Gradzeichen rausgefunden, dass es der Hexawert 0xA0 ist.

Bei HD44780-Kompatiblen Displays ist es 0xBF.

>Habe es mit lcd_puts(0x0A); versucht.

0x0A ist auch nicht 0xA0.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Bei HD44780-Kompatiblen Displays ist es 0xBF.

Holger hat Recht. Es ist natürlich 0xDF.

MfG Spess

von Heinz (Gast)


Lesenswert?

Ok das mit dem Gradzeichen hat funktioniert!

Wie kriege ich es noch hin das "C" bzw "F" vor dem Gradzeichen nach dem 
Temperaturwert erscheint?

Wenn ich es beim ersten lcd_puts dahinter das C einsetze erscheint es 
vor den Temperaturwert.

von chris (Gast)


Lesenswert?

wäre das eine möglichkeit??

lcd_puts("Temperatur:-----°C")

--- als leerzeichen ersetzen

von holger (Gast)


Lesenswert?

>wäre das eine möglichkeit??
>
>lcd_puts("Temperatur:-----°C")

Oh man ey.

lcd_puts("Temperatur:-----");
lcd_putc(0xA0); // oder 0xDF
lcd_putc('C');

oder

lcd_puts("Temperatur:-----\xa0C");

oder

lcd_puts("Temperatur:-----\xdfC");

Du brauchst dringend ein C Buch.

von spess53 (Gast)


Lesenswert?

Hi

>wäre das eine möglichkeit??

>lcd_puts("Temperatur:-----°C")

>--- als leerzeichen ersetzen

Nein. Das '°' in deinem String hat den ASCII-Wert 0xB0.

Aber evtl. funktioniert das

lcd_puts("Temperatur:-----",0xDF,"C");

MfG Spess

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.