Hallo!
Komme bei der "komfortablen" Textausgabe auf einem 2x8 Display an einem atmega8, 4-bit Modus, nicht weiter:
Ich würde gerne eine Funktion verwenden, der ich als Parameter die Wertigkeit von RS und das zu bearbeitende Byte übergebe.
Habe da folgendes:
Das Problem ist, dass bei Aufruf von z.B. writeLCD(0,0x01); (was ja einem clear entspricht) gar nichts passiert.Code:void writeLCD(unsigned char rs,unsigned char ch) { connected_port=0x00; //upper nibble if ((ch & 0x80) == 0x80) connected_port |= 0x08; //prüfen, ob bit D7 gesetzt werden soll if ((ch & 0x40) == 0x40) connected_port |= 0x04; //prüfen, ob bit D6 gesetzt werden soll if ((ch & 0x20) == 0x20) connected_port |= 0x02; //etc. if ((ch & 0x10) == 0x10) connected_port |= 0x01; if (rs == 1) connected_port |= 0x10; //prüfen, ob Befehl (rs=0) oder Wort (rs=1) anliegt connected_port |= 0x20; //schreiben zum Display connected_port &= 0xdf; wait(100); connected_port=0x00; //lower nibble if ((ch & 0x08) == 0x08) connected_port |= 0x08; if ((ch & 0x04) == 0x04) connected_port |= 0x04; if ((ch & 0x02) == 0x02) connected_port |= 0x02; if ((ch & 0x01) == 0x01) connected_port |= 0x01; if (rs == 1) connected_port |= 0x10; connected_port |= 0x20; connected_port &= 0xdf; wait(100); } void writeStrLCD(char *ptr) { unsigned char i; for (i=1;i<41;i++) { if (*ptr == 0x00) break; writeLCD(1,*ptr); *ptr++ = 0x00; } }
Bei Aufruf von writeStrLCD("abc"); werden zwar 3 Zeichen geschrieben, aber eben nicht abc...
Bei mir im Kopf funktionierts doch aber so gut....![]()
Wäre sehr nett, wenn mir jemand einen Tipp geben könnte!
MfG, Cvecko![/code]







Zitieren

Lesezeichen