
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> 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 |