![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Robby! Anbei dass Listing meiner LCD-Display Ansteuerung. Du musst nur die Ports vom PCF anpassen, dann kannst Du die Routine auch für Deine Zwecke verwenden. Viel Erfolg... LG Jens ' --------------------------------------------------------------------------- ' --- LCD-Display Ansteuerung über den I2C-Bus - für OCBASIC ---------------- ' --- erstellt am 11.09.2005 von Jens Gürtler ------------------------------- ' --------------------------------------------------------------------------- ' Hardware: ' I2C-Bus SCL an Port 5 ' I2C_Bus SDA an Port 6 ' 2 Zeilen LCD-Display mit I2C-Ansteuerung ' Software: ' Das Programm steuert ein 2 Zeilen LCD-Display über einen PCF8574 an. Wenn ' ein 1-Zeiliges oder 4-Zeiliges LCD-Display verwendet werden, dann muss die ' Display-Initialisierung dem Display entsprechend angepasst werden. Die ' I2C-Bus Routine arbeitet mit Assambler und ist damit sehr schnell. Es ' werden 40 Zeichen in ca. 0,1 Sekunden auf dem Display wiedergegeben. Der ' ACK vom "Slave" wird im Programm nicht ausgewertet. Wenn der PCF8574 nicht ' wie beschrieben mit dem Display verdrahtet ist, muss Bit1 bis Bit8 ' entsprechend angepasst werden. '--- PCF8574 Port Belegung an LCD-Display ----------------------------------- ' Port1 = RS LCD-Display ' Port2 = R/W LCD-Display ' Port3 = Enabel LCD-Display ' Port4 = Hintergrundbeleuchtung LCD-Display ' Port5 = D4 LCD-Display ' Port6 = D5 LCD-Display ' Port7 = D6 LCD-Display ' Port8 = D7 LCD-Display '--- ASSCII Zeichensatz - (in Dezimalzahlen) -------------------------------- ' Sonderzeichen ' =32 !=33 "=34 #=35 $=36 %=37 &=38 '=39 (=40 )=41 *=42 +=43 ,=44 ' -=45 .=46 :=58 ;=59 <=60 ==61 >=62 ?=63 @=64 [=91 ]=93 ^=94 _=95 ' ä=225 ß=226 ö=239 ü=245 ' Zahlen ' 0=48 1=49 2=50 3=51 4=52 5=53 6=54 7=55 8=56 9=57 /=47 ' Großbuchstaben ' A=65 B=66 C=67 D=68 E=69 F=70 G=71 H=72 I=73 J=74 K=75 L=76 M=77 ' N=78 O=79 P=80 Q=81 R=82 S=83 T=84 U=85 V=86 W=87 X=88 Y=89 Z=90 ' Kleinbuchstaben ' a=97 b=98 c=99 d=100 e=101 f=102 g=103 h=104 i=105 j=106 k=107 l=108 m=109 ' n=110 o=111 p=112 q=113 r=114 s=115 t=116 u=117 v=118 w=119 x=120 y=121 z=122 '--- LCD-Display Befehlssatz - (in Dezimalzahlen) --------------------------- ' Befehle ' 1 = CLS - Display löschen ' 12 = Cursor aus und blinken aus ' 13 = Cursor aus und blinken ein ' 14 = Cursor ein und blinken aus ' 15 = Cursor ein und blinken ein ' Cursor Position im Display ' 128 = Zeile 1, Position 1 >>> 147 = Zeile 1, Position 20 ' 192 = Zeile 2, Position 1 >>> 211 = Zeile 2, Position 20 ' --------------------------------------------------------------------------- ' --- Betriebssystem konfigurieren ------------------------------------------ include "om.def" ' Betriebssystem Daten der Open-Micro laden 'include "omid.def" ' Betriebssystem Daten der Open-Midi laden ' --------------------------------------------------------------------------- ' --- definition der Variablen ---------------------------------------------- define PCF_Daten byte[1] ' Datensatz der zum PCF8574 übertragen wird define LCD_RS bit[1] ' PCF8574 Port1 define LCD_R_W bit[2] ' PCF8574 Port2 define LCD_Enabel bit[3] ' PCF8574 Port3 define LCD_Licht bit[4] ' PCF8574 Port4 define LCD_D4 bit[5] ' PCF8574 Port5 define LCD_D5 bit[6] ' PCF8574 Port6 define LCD_D6 bit[7] ' PCF8574 Port7 define LCD_D7 bit[8] ' PCF8574 Port8 ' --------------------------------------------------------------------------- define Daten byte[2] ' LCD-Display Zeichensatz und Cursor Position define D_bit1 bit[9] ' Zeichensatz Bit1 define D_bit2 bit[10] ' Zeichensatz Bit2 define D_bit3 bit[11] ' Zeichensatz Bit3 define D_bit4 bit[12] ' Zeichensatz Bit4 define D_bit5 bit[13] ' Zeichensatz Bit5 define D_bit6 bit[14] ' Zeichensatz Bit6 define D_bit7 bit[15] ' Zeichensatz Bit7 define D_bit8 bit[16] ' Zeichensatz Bit8 ' --------------------------------------------------------------------------- define Adresse byte[3] ' I2C-Bus Adresse define ACK byte[4] ' I2C-Bus "ACK" vom Slave define iii byte[5] ' Index für die Tabele ' --- Voreinstellung und Initialisierung ------------------------------------ gosub i2c_init ' Initialisirung I2C-Bus Adresse = 64 ' I2C Adresse vom PCF8574 gosub Display_init ' LCD-Display Initialisieren LCD_Licht = on ' Hintergrundbeleuchtung ein Display_Befehl 12 ' Cursor aus und blinken aus ' --------------------------------------------------------------------------- ' --------------------------------------------------------------------------- ' --- Hauptprogramm --------------------------------------------------------- ' --------------------------------------------------------------------------- #programm_anfang Display_Befehl 1 ' CLS - Display löschen pause 50 ' 1 Sekunde Pause Display_Zeichen "I" ' Zeichen I auf das Display schreiben Display_Zeichen "2" ' Zeichen 2 auf das Display schreiben Display_Zeichen "C" ' Zeichen C auf das Display schreiben Display_Zeichen "-" ' Zeichen - auf das Display schreiben Display_Zeichen "B" ' Zeichen B auf das Display schreiben Display_Zeichen "u" ' Zeichen u auf das Display schreiben Display_Zeichen "s" ' Zeichen s auf das Display schreiben Display_Zeichen " " ' Zeichen auf das Display schreiben Display_Zeichen "L" ' Zeichen L auf das Display schreiben Display_Zeichen "C" ' Zeichen C auf das Display schreiben Display_Zeichen "D" ' Zeichen D auf das Display schreiben Display_Zeichen "-" ' Zeichen - auf das Display schreiben Display_Zeichen "D" ' Zeichen D auf das Display schreiben Display_Zeichen "i" ' Zeichen i auf das Display schreiben Display_Zeichen "s" ' Zeichen s auf das Display schreiben Display_Zeichen "p" ' Zeichen p auf das Display schreiben Display_Zeichen "l" ' Zeichen l auf das Display schreiben Display_Zeichen "a" ' Zeichen a auf das Display schreiben Display_Zeichen "y" ' Zeichen y auf das Display schreiben ' --------------------------------------------------------------------------- Display_Befehl 192 ' Display auf Zeile 2 Position 0 Display_Zeichen "m" ' Zeichen m auf das Display schreiben Display_Zeichen "i" ' Zeichen i auf das Display schreiben Display_Zeichen "t" ' Zeichen t auf das Display schreiben Display_Zeichen " " ' Zeichen auf das Display schreiben Display_Zeichen "d" ' Zeichen d auf das Display schreiben Display_Zeichen "e" ' Zeichen e auf das Display schreiben Display_Zeichen "r" ' Zeichen r auf das Display schreiben Display_Zeichen " " ' Zeichen auf das Display schreiben Display_Zeichen "O" ' Zeichen O auf das Display schreiben Display_Zeichen "p" ' Zeichen p auf das Display schreiben Display_Zeichen "e" ' Zeichen e auf das Display schreiben Display_Zeichen "n" ' Zeichen n auf das Display schreiben Display_Zeichen "-" ' Zeichen - auf das Display schreiben Display_Zeichen "M" ' Zeichen M auf das Display schreiben Display_Zeichen "i" ' Zeichen i auf das Display schreiben Display_Zeichen "c" ' Zeichen c auf das Display schreiben Display_Zeichen "r" ' Zeichen r auf das Display schreiben Display_Zeichen "o" ' Zeichen o auf das Display schreiben pause 200 ' 4 Sekunden Pause goto programm_anfang ' --------------------------------------------------------------------------- end ' --------------------------------------------------------------------------- ' --------------------------------------------------------------------------- ' --- LCD-Display Routine --------------------------------------------------- ' --------------------------------------------------------------------------- #Display_init ' --- Initialisierung für den 4-Bit Modus - 2 Zeilen, 5x7 Font -------------- ' --------------------------------------------------------------------------- ' Befehl | RS | R/W | DB7 | DB6 | DB5 | DB4 | Bemerkung ' --------------------------------------------------------------------------- ' Fun. Set | 0 | 0 | 0 | 0 | 1 | 0 | 4-Bit Datenlänge einschalten ' --------------------------------------------------------------------------- ' Fun. Set | 0 | 0 | 0 | 0 | 1 | 0 | 4_Bit - 2-Zeiliges Display, ' | 0 | 0 | 1 | 0 | 0 | 0 | 5x7 Font ' --------------------------------------------------------------------------- ' Display | 0 | 0 | 0 | 0 | 0 | 0 | Display ein, Cursor ein, ' on/off | 0 | 0 | 1 | 1 | 1 | 1 | Cursor blinken ' --------------------------------------------------------------------------- ' Clear | 0 | 0 | 0 | 0 | 0 | 0 | Display löschen, Cursor auf ' Display | 0 | 0 | 0 | 0 | 0 | 1 | 1.Spalte von 1.Zeile ' --------------------------------------------------------------------------- ' Entry | 0 | 0 | 0 | 0 | 0 | 0 | Cursor Auto-Increment ' Mode Set | 0 | 0 | 0 | 1 | 1 | 0 | ' --------------------------------------------------------------------------- Display_Befehl &b00000010 ' Enabel off und 4-Bit Datenlänge einschalten Display_Befehl &b00101000 ' 4-Bit 2-Zeiliges Display Display_Befehl &b00001111 ' Display ein, Cursor ein, blinken ein Display_Befehl &b00000001 ' CLS - Display löschen Display_Befehl &b00000110 ' Cursor Auto-Increment return ' --------------------------------------------------------------------------- #Display_Befehl ' Befehlsebene - Curser setzen Daten = Pop ' Datenzuweisung vom Rechenstack LCD_RS = off : LCD_R_W = off ' Register auf Befehlsebene setzen goto Display_loop ' interner Sprungpunkt ' --------------------------------------------------------------------------- #Display_Zeichen ' Zeichenebene - Daten anzeigen Daten = Pop ' Datenzuweisung vom Rechenstack LCD_RS = on : LCD_R_W = off ' Register auf Daten Anzeige setzen ' --------------------------------------------------------------------------- #Display_loop ' Aufteilung von "Daten" in den 4-Bit Modus gosub i2c_start ' I2C-Bus starten ACK = i2c_write(adresse) ' Adresse senden, ACK empfangen LCD_D4 = D_bit5 : LCD_D5 = D_bit6 : LCD_D6 = D_bit7 : LCD_D7 = D_bit8 ' Daten Zuweisung gosub Display_Pulse ' I2C Pulse und Daten übertragen LCD_D4 = D_bit1 : LCD_D5 = D_bit2 : LCD_D6 = D_bit3 : LCD_D7 = D_bit4 ' Daten Zuweisung gosub Display_Pulse ' I2C Pulse und Daten übertragen gosub i2c_stop ' I2C-Bus stoppen return ' --------------------------------------------------------------------------- #Display_Pulse ' I2C Pulse und Daten übertragen LCD_Enabel = on ' Enable = High ACK = i2c_write(PCF_Daten) ' PCF8574 Einstellung zum Display senden, ACK empfangen LCD_Enabel = off ' Enable = Low ACK = i2c_write(PCF_Daten) ' PCF8574 Eindtellung zum Display senden, ACK empfangen return ' --------------------------------------------------------------------------- ' --------------------------------------------------------------------------- ' Die I2C-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "om_i2c.pro" ' --------------------------------------------------------------------------- ' Die Firmware-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "om_fw.pro" |
Antwort schreiben |