Das Open-Control-Projekt - Die Alternative zur C-Control-I


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 

 locate für LCD Kategorie: C-Control I V1.2/2.0 (von Henrik, Homepage - 21.11.2004 21:12)
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

Bisherige Antworten:

locate für LCD in CCBasic (von Kay - 22.11.2004 0:02)