Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: I2C_LCD - bitte um Hilfe Kategorie: Programmierung Basic (von Jens - 10.01.2009 11:03)
 Als Antwort auf Re: I2C_LCD - bitte um Hilfe von Robby - 10.01.2009 1:14
Jens nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, sonstige
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

Bisherige Antworten:

Re: I2C_LCD - bitte um Hilfe (von Milan - 13.01.2009 15:28)
Re: I2C_LCD - bitte um Hilfe (von Robby - 10.01.2009 17:29)
    Re: I2C_LCD - bitte um Hilfe (von Robby - 10.01.2009 19:58)