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: Display 4x20 (KS0073 ) Kategorie: C-Control I V1.2/2.0 (von Kay - 5.11.2005 1:25)
 Als Antwort auf Re: Display 4x20 (KS0073 ) von Henrik - 4.11.2005 14:59
Kay nutzt:  CC1-Unit V1.1, CC1-Station V1.1
> vorweg, das hat nix, aber auch garnix mit irgendwelchen Timingproblemen zu tun.
> Das Betriebssystem der C-Control erwartet einfach LCDs mit 16 Zeichen Zeilenbreite,
> das läßt sich aber durch die LCD.POS Anweisung austricksen.

insofern dies die print-at-funktion oder halt locate und wie mans sonst noch nennen will
betrifft, sei das mal richtig.

> Das interne Ram des LCD ist so organisiert, daß Zeile 1 und 3, sowie 2 und 4 zusammenhängen.

das auch.
ich hatte mir absichtlich verkniffen, 'nen CCbasic-treiber noch mal zu posten,
obwohl ich den einst für mein 4x20er zusammengeschrieben habe
und der hier auch schon im  forum existiert
das originale zeugs auf der conrad-diskette hatte mir nich gepasst,
letztlich siehts aber nicht viel anders aus und is auch nicht anders als
für nen 2x16-display - nur dass die RAM-adressen  für den erweiterten
bereich natürlich nicht angesprochen werden dürfen.
ansonsten müssen beide displays für 2-zeilen-betrieb initialisiert werden.
naja.. nun hab ichs eh rausgebuddelt und poste es dennoch:


' LCD-Treiber in CCBASIC mit LOCATE, CLS und Sonderzeichen
' letztes Update 11.01.2005 (fuer NAN-YA 4x20)

' *** BYTE-VARIABLEN FUER LCD-TREIBER ***
define lcd_buf  byte 'Puffer fuer Datentranfer zum Display
define lcd_dat  byte 'zu sendenden Daten-Bytes
                     'lcd_dat auch für LOCATE-Funktion im Format xxy
                     '(10er+100er für spalte und 1er fuer Zeile
                     'beginnend bei 0)

define i        byte 'Laufvariablen
define j        byte
 
' *** Port-Variablen LCD-Treiber ***
define lcd_port      byteport[2] 'LCD-Interface-Port - gesamt
define lcd_rs        port[14]    'Befehls-Leitung - fuer Cmd's auf 1
define lcd_e         port[15]    'Execute-Leitung - H-L-Pulse
 
' ***   DISPLAY - POWER_ON_INITIALISIERUNG   ***
lcd_port = &B01000000                  'EXE-Leitung HI setzen
lcd_dat  = &B00110000 : gosub SEND_COM 'FUNC-Set (noch 8-Bit)
lcd_port = &B01000010 : pulse lcd_e    'FUNC-Set: ab jetzt 4-Bit
lcd_dat  = &B00101000 : gosub SEND_COM 'N=1 (2zeilg. Disp.) F=0 (5x7 Font)
lcd_dat  = &B00001100 : gosub SEND_COM 'Disp an, Cursor aus, Blinken aus
lcd_dat  = &B00000110 : gosub SEND_COM 'Adresspointer increm., Kein Shift
'Sonderzeichen in den CG-RAM exportieren
for i = 0 to 56 step 8
   lcd_dat = 64 + i : gosub SEND_COM
   for j = i to i + 7
      looktab CG_CODES,j,lcd_dat
      gosub SEND_CHAR
   next
next
 
gosub CLS

 
'--------- anwenderprogramm (hier: testausgabe-schleife)
for i = 0 to 3
   lcd_dat = i * 10 + i
   gosub LOCATE
   for lcd_dat = 0 to 7
      gosub SEND_CHAR
   next lcd_dat
next i
end
'--------------------------------------------------------

#CLS        ' Einsprung "Display loeschen"
   lcd_dat = 2 : gosub SEND_COM
   lcd_dat = 1 : goto  SEND_COM
#LOCATE     ' Einsprung "Cursor auf Display platzieren"
   looktab DDRAM_ADD,lcd_dat mod 10,lcd_buf
   lcd_dat = lcd_buf + lcd_dat / 10
#SEND_COM   ' Einsprung "Befehl an Display senden"
   lcd_buf = &B01000000
   goto SEND_OUT
#SEND_CHAR  ' Einsprung "Zeichen senden"
   lcd_buf = &B01100000
   #SEND_OUT
   lcd_port = lcd_buf or (lcd_dat shr 4)    ' obere 4 Bits senden
   pulse lcd_e
   lcd_port = lcd_buf or (lcd_dat and &H0F) ' untere 4 Bits senden
   pulse lcd_e
return

' *** Zeichengenerator-Daten ***
table CG_CODES
      31 17 17 17 17 17 31 00 'Code 00, leerer Rahmen
      31 31 31 31 31 31 31 00 'Code 01, voller Klotz
      10 00 17 17 17 17 14 00 'Code 02, grosses Ue
      00 16 08 04 02 01 00 00 'Code 03, Zeichen \
      00 00 00 00 00 00 00 00 'Code 04, nicht belegt
      00 00 04 14 04 00 00 00 'Code 05, Zeichen CTRL+G
      04 00 04 08 16 17 14 00 'Code 06, verkehrtes Fragezeichen
      15 16 14 17 14 01 30 00 'Code 07, Paragraph
     '17 14 17 17 31 17 17 00 'Code __, grosses Ae
     '17 14 17 17 17 17 14 00 'Code __, grosses Oe
tabend
' *** DD-RAM-Adressen (hier fuer 4x20-Zeichen-Display)
table DDRAM_ADD
      128 192 148 212
tabend


zum ideen holen solltes reichen,  auch wenns die "falsche" sprache ist
zu beachten ist nur die handhabung der wertübergabe für locate,
bei der ich im speichersparwahn noch eine variable eingespart habe
und deshalb spalten- und zeilennummer mit der selben variable
verschachtelt mitgebe, die eigentlich die anzeigedaten transportiert.
gewohnheitssache  ;)

 Antwort schreiben

Bisherige Antworten: