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:
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);
}
Damit ist das Display für den 4-Zeilenmodus eingestellt.
Nun kann man sich noch Spielen und die anderen Funktionen auf 4 Zeilen einpassen, das wäre einmal setCursorPosLCD:
Code:
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);
}
Nun kann man z.b mit
setCursorPosLCD(2,5); in die 2te Zeile auf Position 5 mit dem Cursor springen
und dann noch _showScreenLCD_P auf 4 Zeilen erweitern:
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);
}
Bei der eingeabe musst du das folgendermaßen schreiben:
_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
Lesezeichen