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:
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;
}
}
Das Problem ist, dass bei Aufruf von z.B. writeLCD(0,0x01); (was ja einem clear entspricht) gar nichts passiert.
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]
Lesezeichen