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 Henrik, Homepage - 4.11.2005 15:10)
 Als Antwort auf Re: Display 4x20 (KS0073 ) von Henrik - 4.11.2005 14:59
Henrik nutzt:  CC1-M-Unit V1.2/2.0, Micro

So, dann doch gleich... :-)



'+************ 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. 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]

'-------------- Konstanten für Displayart --------------------------

'für 16*4 oder 16x2 Displays
'const line1           =   128        'Diese Konstanten
'const line2           =   192        'richten sich nach der Art
'const line3           =   144        'des verwendeten Displays!
'const line4           =   208        'siehe Datenblatt!

'für 20*4 oder 20x4 Displays
const line1            =   128
const line2            =   192
const line3            =   148
const line4            =   212


'-------- 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
'----------------------------------------------------------


Grüße
Henrik

Meine Homepage: http://www.henrik-reimers.de/control/

 Antwort schreiben

Bisherige Antworten: