Ich möchte ein 1*16 LCD-Display, mit Controller HD44780 im 4Bit-Mode ansteuern. Im Prinzip klappt es. Ich muss aber die Ausgabe nach jeweils 8 Zeichen umschalten, damit die zweite Displayhälfte beschrieben werden kann. Hier der Auszug der Testsoftware: int main(void) { lcd_init(); lcd_string("12345678"); // Ausgabe der ersten 8 Zeichen lcd_setcursor( 0, 2 ); // Umsetzen des Cursors lcd_string("abcdefg"); // Beschreiben der rechten Displayhälfte . . . } Meine Frage: Kennt jemand eine elegante Lösung, wie ich die Umsetzung nach den ersten 8 Zeichen umgehen kann und einen längeren Text (bis 16 Zeichen) an einem Stück einschreiben kann? Es wäre nett, wenn mir hier jemand weiterhelfen würde. Besten Dank im Voraus. Wowako
Wowako schrieb: > Meine Frage: Kennt jemand eine elegante Lösung, wie ich die Umsetzung > nach den ersten 8 Zeichen umgehen kann und einen längeren Text (bis 16 > Zeichen) an einem Stück einschreiben kann?
1 | int main(void) |
2 | {
|
3 | lcd_init(); |
4 | lcd_string("12345678abcdefg"); // Ausgabe der ersten x Zeichen |
5 | .....
|
Hallo Andreas, danke, genau da liegt ja der Hund begraben. Wenn ich die Zeile in "lcd_string("12345678abcdefg");" ändere wir nur "12345678" angezeigt. Die restlichen rechten 8 Stellen sind blank.
1 | int lcd_putchar(char c, FILE *unused){ |
2 | static bool nl_seen; |
3 | |
4 | if (c == '\r') //set cursor to second line { |
5 | dogm_gotoxy(0, 1); |
6 | }
|
7 | else if (nl_seen && c != '\n') { |
8 | /*
|
9 | * First character after newline, clear display and home cursor.
|
10 | */
|
11 | |
12 | dogm_clear(); |
13 | dogm_gotoxy(0,0); |
14 | |
15 | nl_seen = false; |
16 | }
|
17 | |
18 | if (c == '\n'){ |
19 | nl_seen = true; |
20 | }
|
21 | else if (c != '\r') { |
22 | dogm_putc(c); |
23 | }
|
24 | |
25 | return 0; |
26 | }
|
Ich habe das mit Steuerzeichen gelöst. Danach wurde diese Funktion auf printf() gelinkt.
1 | //linking stdout to EA DOGM162L-A Display
|
2 | static FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE); |
3 | stdout = &lcd_str; //Standardausgabe auf obigen Stream setzen |
Den String kann man dan mit printf("1. Linie\n2. Linie\r") ausgeben.
Danke, ich werde es mal ausprobieren. Aber was ist die Ursache für dieses Verhalten?
Es gibt LCDs 1*16, die intern als 2*8 verschaltet sind. Dann brauchst Du eine LCD-Lib, die die Zeichen mitzählt und einen Zeilenumbruch macht, z.B.: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296 Peter
Hallo Peter, deine Erklärung mit der internen Verschaltung ist richtig. Nur mit: " Dann brauchst Du eine LCD-Lib, die die Zeichen mitzählt und einen Zeilenumbruch macht, z.B.: http://www.avrfreaks.net/index.php?name=PNphpBB2&f..." kann ich leider nicht viel Anfangen. Wäre es möglich mir hier genauere Infos zu geben? Herzlichen Dank Wowako
Wowako schrieb: > kann ich leider nicht viel Anfangen. Wäre es möglich mir hier genauere > Infos zu geben? Unten in dem Beitrag sind 2 Links zum Downloaden, der 1. ist für verschiedene LCDs. Und dann definieren:
1 | #define LCD_2X8 // some 1x16 are wired as 2x8
|
Peter
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.