Hallo

In LCD_WriteRegister() sollte die Verzögerung nach dem Schreiben des zweiten Nipples sein (delay100us(50);), sonst scheint mir das richtig zu sein.

Kannst du nun mehr als eine Zeile erkennen (mit max. Kontrast)?

In LCD_WriteZeichen() scheint mir noch ein Fehler zu sein:
Code:
...
   x = zeichen & 0xf0;
//   LCD_RW = 0;             // LCD im Schreiben-Mode
   LCD_RS = 1;             // LCD im Befehl-Mode
   PORTLCD = x;            //höherwertiges nibbel
...
Nach &0xf0 sind die Bits 0-3 in x gelöscht, RS ist aber bit2 und wird mit PORTLCD = x; wieder gelöscht. Richtig wäre wohl entweder eine andere Reihenfolge:

PORTLCD = x; //höherwertiges nibbel
LCD_RS = 1; // LCD im Befehl-Mode

oder eine andere Formulierung:

PORTLCD = x | 4; //höherwertiges nibbel und Datenmode setzen

Ich bin aber leider auch kein LCD-Profi, wir tasten uns ran ;)

Gruß

mic