Hallo, ich habe vor 2 Tagen ebenfalls ein solches Display auf meinen RP6 montiert, mein LCD-Display verwendet einen KS0073 Controller (die Änderungen hängen immer mit dem eingebauten Controller zusammen, also falls du nicht den gleichen hast, gieb das bitte auch noch an, sonst kann dir keiner helfen)
Ich habe folgendes geändert:
In void initLCD:
Damit ist das Display für den 4-Zeilenmodus eingestellt.Code:void initLCD(void) { //delayCycles(34000); No need for Power ON delay as usually the // Bootloader should have been executed before... setLCDD(0b0011); delayCycles(18000); setLCDD(0b0011); delayCycles(5500); setLCDD(0b0011); delayCycles(5500); setLCDD(0b0010); delayCycles(5500); writeLCDCommand(0b00101100); //0=0: reverse off, 1=0: scroll off, 2=1: RE=1, 3=0: Lines = 1, 4=1: Set 4-Bit Mode, delayCycles(5500); writeLCDCommand(0b00001001); //4 Lines delayCycles(5500); writeLCDCommand(0b00101000); //RE wieder auf 0 delayCycles(5500); writeLCDCommand(0b00001000); //0=0: Blink off, 1=0: cursor off, 2=0: display off delayCycles(5500); writeLCDCommand(0b00000001); //Clear display delayCycles(5500); writeLCDCommand(0b00000010); //Home Pos delayCycles(5500); writeLCDCommand(0b00001100); //Display on delayCycles(5500); }
Nun kann man sich noch Spielen und die anderen Funktionen auf 4 Zeilen einpassen, das wäre einmal setCursorPosLCD:
Nun kann man z.b mitCode:void setCursorPosLCD(uint8_t line, uint8_t pos) { pos |= 128; //Schreib 1 auf Bit 7 um in DD RAM zu schreiben if(line==1) pos += 0x00; if(line==2) pos += 0x20; //+ 00100000 if(line==3) pos += 0x40; //+ 01000000 if(line==4) pos += 0x60; //+ 01100000 writeLCDCommand(pos); }
setCursorPosLCD(2,5); in die 2te Zeile auf Position 5 mit dem Cursor springen
und dann noch _showScreenLCD_P auf 4 Zeilen erweitern:
Bei der eingeabe musst du das folgendermaßen schreiben:Code:void _showScreenLCD_P(const char *line1, const char *line2, const char *line3, const char *line4) { clearLCD(); writeNStringLCD_P(line1); setCursorPosLCD(2, 0); writeNStringLCD_P(line2); setCursorPosLCD(3, 0); writeNStringLCD_P(line3); setCursorPosLCD(4, 0); writeNStringLCD_P(line4); }
_showScreenLCD_P(PSTR("Das ist die Zeile 1"),PSTR("...Zeile2"),PSTR("... Zeile 3"),PSTR("...e' scho wissn..."));
Ok, ich glaub das war alles was ich geändert habe, wenn du jetzt den gleichen, bzw. einen kompatiblen Controller also z.b HD44780 hast, dann müsste das funktionieren.
mfg Gerko






Zitieren


Lesezeichen