oder andersrum gesagt:
"lcd_buf = &B00100000" setzt alle bits auf 0, ausser BIT[6].
Später kommt dann für den ersten Takt
"lcd_port = lcd_buf or (lcd_param shr 4)"
Damit wird lcd_param zuerst mal um 4 bits nach rechts verschoben;
aus einem lcd_param = "abcdefgh" wird damit "0000abcd": der ehemalige high nibble steht jetzt als low nibble drin.
Dann wird noch der Inhalt von lcd_buf drauf ge-oder-t, also das "00100000", und deshalb steht jetzt "0010abcd" im lcd_param.
Dieses "0010abcd" geht im ersten Takt an lcd_port, also an den BYTEPORT[2], an dem das LCD hängt.
Und da ist diese "1" jetzt genau am pin "RS" des LCD angekommen, oder?
Das
lcd_port = lcd_buf or (lcd_param and &H0F)
im zweiten Takt ist jetzt auch einfach:
Mit dem AND wird aus lcd_param = "abcdefgh" zunächst "0000efgh": nur der ehemalige low nibble steht jetzt noch drin (immer noch als low nibble).
Dann wird wieder der Inhalt von lcd_buf drauf ge-oder-t, also das "00100000", und deshalb steht "0010efgh" im lcd_param, bevor's ans LCD geht.
Daten senden:
Du musst jedes byte einzeln senden,
wobei in lcd_param der Zeichencode stehen muss, z.b.
lcd_param = &H41 : gosub lcd_writechar ' schreibt ASCII A
lcd_param = &H42 : gosub lcd_writechar ' schreibt ASCII B
lcd_param = &H33 : gosub lcd_writechar ' schreibt ASCII 3
Kommandos senden:
geht entsprechend, aber: du musst dazu die LCD commands genau kennen. Wenn Du z. B. auf die 1. Zeile positionieren willst, könntest Du schreiben
lcd_param = &H80 : gosub lcd_writecmd
weil das CMD &H80 genau an den Anfang der 1. Zeile positioniert.
Aber normalerweise schickst du nicht selbst LCD commands durch die Gegend, sondern rufts einfach die Hilfs-Funktionen auf, wie z. b.
lcd_param = 1 : gosub lcd_gotoline ' positioniert auf die 1. Zeile
oder
gosub lcd_cls ' löscht alles
und die schicken dann für dich das LCD command raus (eins oder mehrere).
Lesezeichen