-
Basic++ und I²C Display
Hallo!
Hab vorn paar tage mein display an den pcf gehängt und ein bisschen rumprobiert, hat auch das meiste geklappt \:D/
Nun wollte ich die lib funktionen und die ganze datenübertragung zum lcd ein bisschen besser verstehen. ich hoff ihr könnt mir da was beibringen!
erstmal die write funktion:
Code:
FUNCTION LCD_WRITE(BUF as byte,LCDDATA as byte)
define EXTPORT byteport[18]
define OUTBYTE as byte
'--------- ------WRITE HI NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA shr 4)
EXTPORT=OUTBYTE or 01000000b
EXTPORT=OUTBYTE and 10111111b
'--------------- WRITE LO NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA and 0Fh)
EXTPORT=OUTBYTE or 01000000b
EXTPORT=OUTBYTE and 10111111b
END FUNCTION
1)das mit Hi nibble und lo nibble glaub ich zu verstehn(weil ich im 4-bit mod. fahre, zuerst werden die oberen 4-bit gesendet und dann die unteren 4 bit)
dass ich die ersten vier bits erhalte wird LCDDATA shr 4
also wenn ich jetz lcddata 11111111 is dann wird mit shr 4 11110000 daraus oder??
2) was bewirkt die or funktion?? wenn ich beim windows-rechner die or funktion hernehme, zält er mir die 2 zahlen nur zusammen!
die aus der Digitaltechnik bekannte ODER funktion kann ich das nicht vergleichen oder???
2) Wenn ich zb. ein A schreiben will, dann: LCD_WRITE(20h,41h)
20h steht laut code tabelle des displays(oder auch ASCII tab.??) für ein @
41h steht für ein großes A
Warum jetzt 20h?????
freue mich auf jede Antwort
gruß martin
-
Hallo,
kurz zur Oder Funktion (die ist genau die, die Du meinst):
i = 3 or 2 ' daraus folgt: i = 3
Code:
-> gehen wir mal von 8 Bit = 1 Byte aus
hi lo
Dezimal 67 0100 0011
Deziaml 2 0000 0010
__OR_________________
Dezimal 67 0100 0011 ' = i
Im Prinzip ist es eine Addition jeder Bitstelle ohne Überbetrag.
Übrigens: 20h ist 20 Hexadezimal, also 32 dezimal, das ist ASCII <Leerzeichen>. 41h entspricht 65 dezimal, also dem ASCII A.
Die ASCII Tabelle für HEX und DEZ findest Du hier: http://www.torsten-horn.de/techdocs/ascii.htm
Beste Grüße,
Stefan
-
Hi Tappi
danke für die rasche antwort!
Das mit dem oder versteh ich jetz
bei 20h hab ich von der codetabelle falsch abgelesen
grundsätzlich wird also ein blank auf das display geschrieben und dann das jeweilige zeichen ahaaa....
hab ich das richtig verstanden mit dem shr 4, werden da die unteren vier bits 0 oder??
gruß martin
-
ne 20h ist doch der Befehl zum schreiben auf das LCD.
-
achso
mich würde jetz noch interessieren was der befehl shr macht
outbyte=01000001 shr 4
was für binärzahl is jetzt outbyte???
gruß martin
-
ok ich glaub ich hab jetz shr auch kapiert
outbyte=01000001 shr 4
outbyte is jetzt 0000 0100
stimmt doch so oder??
nächste Frage:
die oberen vier bits werden so übergeben:
OUTBYTE=BUF or (LCDDATA shr 4) 'buf ist 20h, lcddata ist 41h(großes A)
'outbyte is jetzt: 00100100
EXTPORT=OUTBYTE or 01000000b
'extport is jetzt: 01100100
EXTPORT=OUTBYTE and 10111111b
'extport is jetzt: 00100100 ==>das 7. Bit is 0 d.h. enable is auch 0, wenn der enable 0 is tut doch der lcd-controller auch nix, dann wäre diser befehl doch für die Katz, oder lieg ich da falsch???
gruß martin
-
wenn man ein bisschen datenblatt studiert dann weiß man, das die daten erst bei fallender Flanke von Enable vom display übernommen werden!
darum zuerst enable 1 + daten und dann enable= 0 +daten dass die daten vom display übernommen werden!!! ahaaaa...