Einfügen als Gemeinsames Modul
Funktionen:
init()
WriteCmd()
setContrast()
defineChar()
clear()
home()
delline()
line()
goto()
cursorleft()
cursorright()
setcursor()
put()
print2()
print()
printlength()
fill()
ziff()
zahl2()
zahl3p()
zahl3()
zahl4p()
zahl4()
zahl5()
zahl()
zahl4n1()
zahl4n2()
zahl5n1()
zahl5n2()
time()
date()
def_bargraph()
bargraph()
def_sanduhr()
der_arr_up()
der_arr_down()
Beschreibung Nach oben
Das Modul lcdext.c2 ist ein Treiber für ein Standard-LCD an Port P1L im 4Bit-Mode.
(z.B. Application-Board & CC2-Station)
Es werden LC-Display von 2x16 bis 4x20 unterstützt.
Mit Version V2.3 wurde die Unterstützung für den Controller ST7036 hinzugefügt, um das die EA-DOGM-Reihe und somit
das CC2-Station IO2 ansteuern zu können.
In Version 2.2 wurden alle Routinen zum Ansprechen des LCDs in Assembler
ausgelagert, womit nun die Ausgabe sehr schnell wird.
lcdext.c2 benötigt entweder das Betriebssystem OSOPT V3.0, hier sind die
nötigen ASM-Routinen bereits integriert, oder bei älteren Betriebssystemen
den Systemtreiber sys0001.hex, welcher
mit einem Download-Tool
in das Segment 3 geladen werden muß. Dieser Systemtreiber wird bei
Betriebssystem-Versionen
vor OSOPT V3.0 ebenfalls von stports.c2 benötigt.
Durch den ASM-Treiber ist lcdext.c2 nun auch der empfohlene
Alternativtreiber
für das Display der C-Control-II-Station. Es werden hier keinerlei
Captures mehr
benötigt ! Somit gibt es nunoch ein einheitliches Modul zum Ansteuern des (ext.)LCDs
bei der C-Control II Unit und der C-Control II Station.
Außerdem sind bei der C-Control-II-Station die Alternativtreiber
stport.c2 (Erweiterte Station-Ports, LEDs, Relais) und stkeyb.c2 (Station-Tastatur)
empfohlen.
Bei stports.c2 werden ebenfalls keine Captures mehr benötigt, und es ist
außerdem
ebenfalls schneller als das Original-Modul station_io.c2.
Einfügen als Gemeinsames-Modul
Nach oben
Die Datei lcdext.c2 in das Verzeichnis .\CControl2\UserLib
kopieren und ggf. in der Datei modules.txt
die Zeile lcdext.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt
bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an aktiviert wird.
Außerdem muß, wenn eine Betriebssystem-Version vor OSOPT V3.0 genutzt wird,
die Datei sys0001.hex mit den nötigen Systemroutinen mit
dem Downloadtool
in die C-Control II geladen werden.
Der Systemtreiber sys0001.hex belegt den Adressbereich 0xD540 bis 0xD779
im Segment 3 des Flash. (569 Byte)
Ab OSOPT V3.0 ist sys0001.hex im Betriebssytem implementiert.
Konstanten Nach oben
Die Konstanten Lines[], Offsets[] und Line[] dienen zum Adressieren des LCDs.
Seit V2.3 wird der Displaytyp über die Funktion init() ausgewählt.
const Lines[] = 16, 20, 16, 16, 0;
const Offsets[]= 0, 5, 10, 10, 0;
const Line[]= 0x80,0x80,0xC0,0x90,0xD0, // für 4x16 LCD
0x80,0x80,0xC0,0x94,0xD4, // für 4x20 LCD
0x80,0x80,0xC0,0x94,0xD4; // für EA DOGM 162 & 163
Einsprungadressen des ASM-Treibers:
// Einsprung-Adressen der System-Routinen:
// OSOPT V3.0:
const Segment = 0x0000;
const _PUT = 0xD4A6;
const _PRINT = 0xD4B0;
const _SEND = 0xD4CA;
const _SENDCHAR = 0xD4DE;
const _ZIFF = 0xD50C;
const _CMD = 0xD544;
const _8Bit = 0xD54E;
// sys0001.hex:
const Segment = 0x0300;
const _PUT = 0xD540;
const _PRINT = 0xD54C;
const _SEND = 0xD568;
const _SENDCHAR = 0xD57E;
const _ZIFF = 0xD5A6;
const _CMD = 0xD5AE;
const _8Bit = 0xD5BA;
Bei Benutzung von OSOPT V3.0 werden die die oberen Einsprungadressen
benötigt. sys0001.hex muß dann nichtmehr geladen werden, da die
nötigen Routinen
in OSOPT V3.0 bereits implementiert sind.
Wenn eine ältere OS-Version benutzt wird, müssen die unteren Einsprungadressen
benutzt und sys0001.hex in Segment 3 geladen werden.
Durch Auskommentieren der Konstantengruppen kann zwischen sys0001.hex und
den Routinen von OSOPT V3.0 "umgeschaltet" werden.
Funktionen:
init() Nach oben
function init (byte LCDtype)
Die Funktion init() initialisiert das angeschlossenen LC-Display.
Als Parameter wird der LCD-Typ angegeben.
LCDtype | HD44780: 0x00 = 16 Zeichen pro Zeile 0x01 = 20 Zeichen pro Zeile ST7036 (EA DOGM): 0x02 = 2-zeiliges Display (EA DOGM162) 0x03 = 3-zeiliges Display (EA DOGM163) |
WriteCmd() Nach oben
inline function WriteCmd(byte cmd)
Mit WriteCmd() wird ein Kommandobyte an das LCD gesendet.
cmd | Kommandobyte |
setContrast() Nach oben
function setContrast(byte contrast)
Mit setContrast() wird bei LC-Displays mit ST7036-Controller (EA DOGM, CC2-Station IO2) der Kontrast eingestellt.
contrast | 0-63 |
defineChar() Nach oben
function defineChar(byte addr, byte char[])
Mit der Funktion defineChar() können benutzerdefinierte Zeichen
in den RAM
des LC-Displays geschrieben werden. Es können dafür die ASCII-Codes 0 bis 7
verwendet werden. Die Zeichendaten werden mit einem 8 Byte großem Array
übergeben. In dem Byte-Array werden jeweils nur die Bits 0 bis 4 verwendet.
Bit 4 entspricht dem Pixel ganz links und Bit 0 dem Pixel ganz rechts.
Byte 0 entspricht entspricht der ersten Pixelzeile und Byte 7 der untersten(8.)
Pixelzeile,
wobei diese der Cursorzeile entspricht.
addr | ASCII-Code 0 bis 7 |
char[] | Bytearray mit den Zeichendaten (8Byte) |
clear()
Nach oben
function clear()
Mit clear() wird der Inhalt des Display gelöscht
home()
Nach oben
function home()
Die Funktion home() setzt den Cursor auf die
anfangspostion (Zeile1, Spalte0)
Hierfür sollte jedoch die Funktion line() vorgezogen werden, da dies
schneller ausgeführt wird.
delline() Nach oben
function delline(byte line)
Die Funktion delline() löscht den Inhalt der angegebenen Zeile.
line | Zeile 1 bis 4 |
line() Nach oben
function line(byte line)
Mit der Funktion line() wird der Cursor an den Anfang der angegebenen Zeile gesetzt.
line | Zeile 1 bis 4 |
goto() Nach oben
function goto(byte line, byte col)
Mit der Funktion goto() wird der Cursor an die angegebene Position gesetzt.
line | Zeile 1 bis 4 |
col | Spalte 0 bis 19 (bis 15 bei 2x16 oder 4x16 LCDs) |
cursorleft(), cursorright()
Nach oben
function cursorleft()
function cursorright()
Mit diesen beiden Funktion kann der Cursor jeweils um eine Position links bzw
rechts
geschoben werden.
setcursor() Nach oben
function setcursor(byte cursor)
Mit der Funktion setcursor() kann die Darstellung des Cursors verändert werden.
cursor | 0 = Cursor nicht sichtbar 2 = Cursor als Unterstrich 3 = Cursor als Block, blinkend |
put() Nach oben
inline function put(byte char)
Die Funktion put() gibt ein einzelnes Zeichen aus.
char | Zeichen-Code 0 - 255 ASCII Zeichen können direkt angegeben werden: z.B. lcdext.put('T'); |
Ausgabe von Zeichenketten Nach oben
inline function print2(byte
s[])
inline function print(string s[])
inline function printlength(byte s[], byte len)
Mit diesen Funktionen können Zeichenketten ausgegeben werden.
s[] | String-Variable bei print2() Zeichenkette oder Stringvariable bei print() Stringvariable oder Bytearray bei printlength() |
len | Anzahl der auszugebenen Zeichen bei printlength |
Ausgabe von gleichen Zeichen (füllen) Nach oben
inline function fill(byte
ASCII, byte len)
Mit diesen Funktionen kann ein Zeichen mehrmals ausgegeben werden.
ASCII | Auszugebendes Zeichen |
len | Anzahl, wie oft das Zeichen ausgegeben werden soll |
Zahlfuntkionen
Nach oben
function ziff(int num)
function zahl2(int num)
function zahl3p(int num)
function zahl3(int num)
function zahl4p(int num)
function zahl4(int num)
function zahl5(int num)
function zahl(int num)
function zahl4n1(int num)
function zahl4n2(int num)
function zahl5n1(int num)
function zahl5n2(int num)
Mit diesen Funktion können Zahlen direkt ausgegeben werden, ohne diese
erst in Strings zu konvertieren. Jede Funktion besitzt eine andere Ausgabeform
von Zahlen:
ziff() | Einzelziffer: 0 bis 9 |
zahl2() | Zweistellig: 0 bis 99 |
zahl3p() | Dreistellig positiv: 0 bis 999 |
zahl3() | Dreistellig: -99 bis 999 |
zahl4p() | 4-stellig positiv: 0 bis 9999 |
zahl4() | 4-stellig: -999 bis 9999 |
zahl5() | 5-stellig positiv: 0 bis 32767 |
zahl() | 6-stellig: -32768 bis 32767 |
zahl4n1() | eine Nachkommastelle: -99,9 bis 999,9 (-999 bis 9.999) |
zahl4n2() | zwei Nachkommastellen: -9,99 bis 99,99 (-999 bis 9.999) |
zahl5n1() | eine Nachkommastelle: -999,9 bis 9999,9 (-9.999 bis 99.999) |
zahl5n2() | zwei Nachkommastellen: -99,99 bis 999,99 (-9.999 bis 99.999) |
num | Zahl im Integerbereich |
Ausgabe der aktuellen Uhrzeit Nach oben
function time(byte
format)
Mit diesen Funktionen wird die aktuelle Uhrzeit ausgegeben. Es können dabei 4
verschiedene
Formate gewählt werden. Bei den Formaten ohne führende Null wird stattdessen
ein Leerzeichen
ausgegeben.
format | Ausgabeformat: 0 = h:m:s Bsp: 5: 4: 9 od. 8:15: 2 1 = hh:mm:ss Bsp: 05:04:09 od. 08:15:02 2 = h:m: Bsp: 5: 4 od. 8:15 3 = hh:mm Bsp: 05:04 od. 08:15 |
Ausgabe des aktuellen Datums Nach oben
function date(byte
format)
Mit diesen Funktionen wird die aktuelle Uhrzeit ausgegeben. Es können dabei 6
verschiedene
Formate gewählt werden. Bei den Formaten ohne führende Null wird stattdessen
ein Leerzeichen
ausgegeben.
format | Ausgabeformat: 0 = d.m.yyyy Bsp: 6. 7.2003 1 = dd.mm.yyyy Bsp: 06.07.2003 2 = d.m. Bsp: 6. 7. 3 = dd.mm. Bsp: 06.07. 4 = d.m.yy Bsp: 6. 7.03 5 = dd.mm.yy Bsp: 06.07.03 |
def_bargraph()
Nach oben
function def_bargraph()
Die Funktion defbargraph() definiert Zeichen für die
Bargraph-Funktion und legt diese
im Display-RAM als ASCII-Zeichen 0 bis 3 ab..
bargraph()
Nach oben
function bargraph(byte len, byte maxlen)
Mit der Funktion bargraph() können Balken ausgegeben werden.
Es muß vor dem ersten Verwenden dieser Funktion die Funktion def_bargraph()
aufgerufen werden.
Die Maximale Balkenlänge bei 2x16 und 4x16 LCDs beträgt 80 und bei
2x20 und 4x20 100.
len | Länge des Bargraph 0 bis maxlen wenn größer als maxlen, wird maxlen ausgegeben |
maxlen | Maximallänge |
sonderzeichen
Nach oben
function def_sanduhr(byte ascii)
function def_arr_up(byte ascii)
function def_arr_down(byte ascii)
Mit diesen Funktion können die Sonderzeichen "Sanduhr", Pfeil nach
oben und
Pfeil nach unten erstellt und im RAM des Displays abgelegt werden.
Die jeweilige Funktion muß vor dem ersten Verwenden des Zeichens aufgerufen
werden.
ascii | ASCII-Code, den das Zeichen verwenden soll (0 - 7) |
Autor: André Helbig Mail: andre.h@cc2net.de
Erstellt: 1.1.2004