Hallo,
also ich habe mein App-Bord reaktiviert (benutze sonst eigene LP) aber leider nur ein 4x20 LCD blau/weiss mit Kontroller KS0073 gefunden.
mit dem nachstehenden Prog, ich weiss leider die Quelle nicht mehr,
mit Workbench1.18 und Basic++2006 in Kontroller geladen funktioniert die Anzeige.

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( ' 1000 ' Eigentlich kein Smilie,Lutz
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 21 step 2
'pause 1
LCD_POS(i, j)
LCD.PRINT "*/"
next j
next i
pause 50
LCD.CLEAR
goto start
'----------------------------
attributes
end attributes

PS: Siehst du nach dem Einschalten -vor Init- 2 Reihen schwarze Balken?
wenn nicht, s.o.!
Lutz