Nachfolgend meine Initialisierung in Basic für C-Controll.
Vor dem Versuch, das ganze in Bascom umzumodeln sollte man noch einmal testen, ob nicht in den Bibliotheken bereits die Lösungen stecken.
Ich habe gelesen, dass es bei der Initalisierung den Parameter 20 * 4a gibt, das wäre wohl schon der Ansatz, die Zeilen richtig anzusprechen.
Da ich gerade die C-Control einstampfe und mit Bascom starte, kenne ich mich hier noch nicht aus.
' KS0073_init.bas --------------------------------
' PS. Der Smilie, den ich im Code gesehen habe, der gehört da nicht hin - vielleicht ist er aber auch schon wieder weg - wer weiss ..Code:DEFINE DB0 as Port[9] DEFINE DB1 as PORT[10] DEFINE DB2 as PORT[11] DEFINE DB3 as PORT[12] DEFINE RW as PORT[13] DEFINE RS as PORT[14] DEFINE EN as PORT[15] define bit_RW as bit[1] ' Zwischenspeicher für RW-Status define bit_RS as bit[2] ' Zwischenspeicher für RS-Status define bit_Cursor as bit[3] ' gibt an, ob Cursor sichtbar = on define bit_Blink as bit[4] ' gibt an, ob Cursor blinken soll = on define bit_5 as bit[5] define bit_6 as bit[6] define bit_7 as bit[7] define Zeile as byte ' globale Variable, die von LCD_POS() ausgewertet wird define Spalte as byte ' globale Variable, die von LCD_POS() ausgewertet wird define DATA as byte define i as byte define j as byte ' --------------------------------------------- FUNCTION LCD_POS(Zeile as byte, Spalte as byte) ' Positioniert den Cursor, dannach kann ins LCD geschrieben werden. ' benutzt die Globalen Variablen bit_RW und bit_RS bit_RW = RW ' den Status der Ports sichern bit_RS = RS RW = off ' Auf Befehlsmodus umschalten RS = off ' Auf Schreibmodus umschalten ' nicht plausible Zeilenangaben abfangen ' IF (Zeile = 0 or Zeile > 4) THEN Zeile = 1 ' nicht plausible Spaltenangaben abfangen ' IF (Spalte < 1 or Spalte > 20) THEN Spalte = 1 ' Die Position ist nach Datenblatt KS0073: ' Zeile1 = 00h, Zeile 2 = 20h, Zeile 3 = 40h, Zeile 4 = 60h ' Die Variablen Zeile und Spalte werden missbraucht Zeile = (Zeile -1) * 32 + (Spalte - 1) ' hier steht die LCD-Position ' siehe SET DDRAM Adress im Datenblatt (Seite 36) ' Daten schreiben, zuerst upper nibble, command bit 7 setzen Spalte = ((Zeile shr 4) or 1000b) ' Bit 4 setzen, Bit 3 - 0 sind Teil der Position ' nibble auf Ports übertragen BITSET(Spalte) PULSE EN ' und senden ' lower nibble ' überflüssig, wird in BITSET behandelt: Spalte = (Zeile and 15) ' 1111 BITSET(Zeile) PULSE EN RS = bit_RS ' zurück in den ursprünglichen Zustand RW = bit_RW ' END FUNCTION ' --------------------------------------------- ' setzt die Ports für die LCD-Ausgabe FUNCTION BITSET(Muster as byte) DB0 = MUSTER and 1 DB1 = MUSTER and 2 DB2 = Muster and 4 DB3 = Muster and 8 PAUSE 1 end function ' ---------------------------------------------- ' schaltet einen blinkenden Cursor ein FUNCTION DISPLAY_CURSOR() ' bit_RS = RS ' Status sichern bit_RW = RW RS = off RW = off BITSET(0) ' upper nibble PULSE EN ' CMD = 1/ ' Display aus = 0, ein = 1 ' Cursor aus = 0, ein = 1 ' Blink aus = 0, ein = 1 BITSET(ABS (bit_Cursor * 2 + bit_Blink - 12 )) PULSE EN RS = bit_RS ' RS restaurieren RW = bit_RW ' RW restaurieren end FUNCTION ' ------------------------------------------------- ' --------------------------------------------------- FUNCTION KS0073_INIT() ' Initialisierung des LCDs 4x20 mit Controller KS0073 LCD.INIT ' Standardinitialisierung LCD.OFF ' sollte eigentlich gar nicht erforderlich sein ' RW = off ' immer off im Befehlsmodus ' RS = off ' immer off im Befehlsmodus ' 3x den 8-Bit-Modus mit Pause dazwischen aufrufen ------------------ BITSET(3) ' 0011 PULSE EN pause 1 Pulse EN pause 1 PULSE EN ' CMD: 4-Bit-Modus aufrufen ---------------------- BITSET(2) ' 00000010 PULSE EN ' von nun an sind upper und lower nibble getrennt zu senden ' CMD: Function Set - upper nibble BITSET(2) ' 0010 PULSE EN ' lower nibble ' 2 Zeilen-Modus, RE-bit BITSET(12) ' 1100 PULSE EN ' CMD: extended Function Set + RE --------------------- ' upper nibble BITSET(0) PULSE EN ' lower nibble ' Cmd, 5-dot-Font, normaler Cursor, 4-line-display BITSET(9) '1001 PULSE EN ' ---------------------------------------------- ' CMD: Function Set - upper nibble BITSET(2) ' 0010 PULSE EN ' lower nibble ' 2 Zeilen-Modus, RE-bit-aus BITSET(8) ' 1000 PULSE EN ' CMD: clear display ----------------------------------------- BITSET(0) PULSE EN BITSET(1) ' 0001 PULSE EN ' CMD: cursor display shift ------------------------------------------ ' upper nibble BITSET(1) ' 0001 PULSE EN ' lower nibble ' Cursor shift, R/L shift BITSET(0) PULSE EN ' CDM: display on/off control ------------------------------------------ ' upper nibble BITSET(0) PULSE EN ' Cmd, Display ein, Cursor off, Blink off BITSET(12) ' 1100 PULSE EN END FUNCTION ' --------------------------------------------------------------------- KS0073_init() #start Pause 100 LCD.INIT switchonly for i = 1 to 4 for j = 1 to 20 'pause 1 LCD_POS(i, j) LCD.PRINT "*" next j next i LCD.CLEAR goto start
Edit: Bitte Code-Tags verwenden, dein Moddy







Zitieren

Lesezeichen