
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
~loooooool~ du hast recht. die frage ist berechtigt und weil ich sie nicht gleich beantworten konnte, habe ich noch mal ins datenblatt geschaut und dabei bemerkt, dass sich die schleife zum CG-RAM-export noch weiter vereinfachen lässt und ausserdem meine daten in der tabelle unten falsch sind. NUR deshalb bist du wohl stutzig geworden :-) es werden deshalb 8 byte pro chracter übertragen, weil der CG-RAM so organisiert ist, wenn auch nur die bytes 0...6 eine rolle spielen. wenn man nur 7 bytes übertragen wollte, müsste man die CG-RAM adresse jedesmal umständlich neu nachberechnen, übertragen, und könnte erst dann das nächste zeichen nachschieben. programmmäßig war mir das damals zu albern und ich fand es einfacher, die übertragung zu 8 bit in der schachtelschleife zu machen und lieber ein byte umsonst zu übertragen, weil der kontroller im display nach jedem schreibvorgang die adresse ja automatisch incrementiert und so selbständig das nächste zeichen setzt. die daten in meiner zeichentabelle waren aber wirklich falsch, das letzte byte sollte schon 00 sein :-) meine güte.. wegen dir fliegen in einem 4 jahre alten programm alle dummen fehler auf, die machbar waren :-) ich habs noch mal übergangen und weiter versimpelt. so wie jetzt hier steht, gehts und gibt brav alle 8 selbstdefinierten zeichen richtig aus: ' *** BYTE-VARIABLEN FUER LCD-TREIBER *** define lcd_buf byte 'Puffer fuer Datentranfer zum Display define lcd_dat byte 'zu sendenden Daten-Bytes define zeile byte 'Zeilennummer fuer DD-RAM-Adressierung define spalte byte 'Spaltennummer fuer DD-RAM-Adressierung  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 *** zeile = 1 : spalte = 1    'Zeilen- und Spaltenzaehler setzen 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 'Betriebsparameter einstellen 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 lcd_dat = 0 to 7 gosub SEND_CHAR next lcd_dat end '----------------------------------- ' *** LCD-Treiber *** #LOCATE ' Unterprogramm "Cursor auf Display platzieren" if zeile = 1 then lcd_dat = 127 + spalte if zeile = 2 then lcd_dat = 191 + spalte if zeile = 3 then lcd_dat = 147 + spalte if zeile = 4 then lcd_dat = 211 + spalte gosub SEND_COM return  #CLS ' Unterprogramm "Display loeschen" lcd_dat = 2 : gosub SEND_COM lcd_dat = 1 : gosub SEND_COM return  #SEND_COM ' Unterprogramm "Befehl an Display senden" lcd_buf = &B01000000 goto SEND_OUT #SEND_CHAR ' Unterprogramm "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, leer,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  |
| Antwort schreiben |