INFO - FAQ - CC2-Forum - CCPro-Forum |
Hallo, da ich für einige Anwendungen einen LCD_locate Befehl schmerzlich vermisst habe, bedurfte es einer Routine, die das ändert. Geschrieben in Basic++. Wer noch nicht mit Stefans Compiler arbeitet, sollte das nachholen. http://www.fdos.de/ccbpp/index.php Die Routine kann immer anstelle des lcd.pos Befehls verwendet werden und macht das Leben dann deutlich leichter, wenn man mit verschiedenenen LCD-Typen experimentiert: Grüße Henrik '+************ Locate Funktion für LCD mit BASIC++ ***************** '+***************** Henrik Reimers, November 2004 ******************* ' 'Die LCD.pos Anweisung kann leider nicht mit Variablen umgehen. 'Ein Befehl wie LCD.pos x,y funktioniert also nicht. Das mach das 'Entwickeln von Programmen, die häufig auf das LCD und relative, 'durch Variable gekennzeichnete Koordinaten haben, höchst 'umständlich. 'Ebenso wird die Positionsanweisung unlogisch/inkonsistent- also '1,17 für die 3.Zeile 1.Spalte bei 16*4 Displays (grauenvoll :-). 'Diese Funktion schafft Abhile. ' 'Die eigentliche Locate Funktiom verwendet weniger als 100 Byte 'Speicher. Der Platz wird vorwiegenden für den Pfusch verwendet, 'den der Entwickler der C-Control1 V2.0 zu verantworten hat. Da man 'aber ein LCD_Writecmd sowieso braucht, hält sich der Schaden in 'Grenzen :-) 'Besitzt man bereits eine Version, die den Byteport Bug nicht mehr 'hat, kann die LCD_Writecmd Routine einfacher ausfallen (siehe C-Control Support Seiten). Die hier 'gezeigte Funktion arbeit mit allen Versionen. '******************************************************************** 'Hardware Deklarationen define port1 byteport[1] define LCDPORT byteport[2] define LCDP0 port [9] define LCDP1 port [10] define LCDP2 port [11] define LCDP3 port [12] define LCDP4 port [13] define LCDP5 port [14] define LCDP6 port [15] 'Deklaration der nötigen Variablen define line as byte[3] define row as byte[4] define base as byte[5] define lcddata as byte[6] define data as byte[7] define outport as byte[16] define OP0 as bit [121] define OP1 as bit [122] define OP2 as bit [123] define OP3 as bit [124] define OP4 as bit [125] define OP5 as bit [126] define OP6 as bit [127] define outbyte as byte[42] 'Deklarationen der Konstanten für das verwendete Display. 'Hier für ein Displaytech 4*20 mit der ungewöhnlichen Basis- 'adresse 00 const line1 = 128 'Diese Konstanten const line2 = 192 'richten sich nach der Art const line3 = 148 'des verwendeten Displays! const line4 = 212 'siehe Datenblatt! '-------- Deklaration der Funktionen ------------------------------- declare function lcd_locate(line as byte, row as byte) declare function lcd_writecmd() declare function set_byteport() '------------------------------------------------------------------- '----------------- Testprogramm --------------------------- '------- absolut sinnlos und nur zur Demonstration ----------------- lcd.init lcd.clear line = 1 for row = 1 to 10 lcd_locate(line,row) lcd.print "*" next line = line + 1 for row = 4 to 12 step 2 lcd_locate(line,row) lcd.print "*" next lcd_locate(3,1) lcd.print "3.Zeile" lcd_locate(4,1) lcd.print "4.Zeile" end '----------------------- Funktionen -------------------------------- function lcd_locate(line as byte, row as byte) if line = 1 then base = line1 'Die Werte sind als Konstanten if line = 2 then base = line2 'im Kopf definiert und können if line = 3 then base = line3 'dort dem verwendeten Display if line = 4 then base = line4 'angepasst werden. 'Das Datenblatt gibt Auskunft über 'die Display Data-Ram Belegung lcddata = base + row-1 lcd_writecmd() end function '--------------------------------------------------------- '---------- Hilfsroutine für CMD-Ausgabe an LCD ---------- '--------------------------------------------------------- function LCD_WRITECMD() '-------- high significant nibble senden ------------------ OUTBYTE = (LCDDATA shr 4) OUTPORT = OUTBYTE or 01000000b set_byteport() OUTPORT = OUTBYTE and 10111111b set_byteport() '--------- low significant nibble senden ------------------ OUTBYTE = (LCDDATA and 0Fh) OUTPORT = OUTBYTE or 01000000b set_byteport() OUTPORT = OUTBYTE and 10111111b set_byteport() end function '---------------------------------------------------------- '------- Bug Umgehungspfusch für C-Control(V 2.01)-------- '---------------------------------------------------------- function set_byteport() LCDP0 = OP0 LCDP1 = OP1 LCDP2 = OP2 LCDP3 = OP3 LCDP4 = OP4 LCDP5 = OP5 LCDP6 = OP6 end function '---------------------------------------------------------- Meine Homepage: http://www.henrik-reimers.de/control/ |
Antwort schreiben |