PCFLCD.C2 V2.2 - Hilfe


Beschreibung

Einfügen als Gemeinsames Modul

Konstanten

Hinweise zu Multithreading / zum Betrieb mehrerer PCF-LCDs

Funktionen:

setpcf()
setLight()
init()
WriteCmd()
ReadRam()
defineChar()
clear()
home()
delline()
line()
goto()
cursorleft()
cursorright()

setcursor()
put()
print2()
print()
printlength()

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 pcflcd.c2 ist ein LCD-Treiber für ein Standard-LCD
am Portbaustein PCF8574(A).
Es können mehrer LCDs am I²C-Bus betrieben werden (max. 16)
Passende Interface-Platinen, aber auch anschlußfertige LCD-Bundles
von 1x16 bis 4x20, sind bei http://cctools.hs-control.de erhältlich.
In Version 1.2 sind die Ausgaben gegenüber Version 1.1 nochmals
stark beschleunigt worden. Die Ausgaben auf das LCD erfolgen jetzt
fast so schnell wie auf das an 7 I/Os angeschlossene LCD am Application Board.

Einfügen als Gemeinsames Modul   Nach oben

Die Datei pcflcd.c2 in das Verzeichnis .\CControl2\UserLib der IDE
kopieren und in der Datei modules.txt die Zeile pcflcd.c2 einfügen.


Konstanten   Nach oben

Mit den Konstanten Line[] und Charsperline wird der LCD-Typ ausgewählt:

const Line[]= 0x80,0x80,0xC0,0x94,0xD4; // für 4x20 LCD
const CharsperLine=20; // für 4x20 & 2x20 LCD
//const Line[]= 0x80,0x80,0xC0,0x90,0xD0; // für 4x16 LCD
//const CharsperLine=16; // für 4x16 & 2x16 LCD


Funktionen:

setpcf()   Nach oben

    function setpcf(byte pcfnr)

Die Funktion setpcf legt den aktuellen Portbaustein fest, an dem 
das anzusprechende LCD angeschlossen ist.

pcfnr Adresse des Bausteins 
(0-7 = PCF8574; 8-15 = PCF8574A(mit Adr. 0-7))


setLight()   Nach oben

    function setLight(byte state)

Mit der Funktion setLight kann die LCD-Hintergrungbeleuchtung ein bzw.
ausgeschaltet werden.

state 0 = Beleuchtung aus
ungleich 0(z.B. 1) = Beleuchtung ein


init()
   Nach oben

    function init()

Die Funktion init() initialisiert das angeschlossenen LC-Display.

WriteCmd()   Nach oben

    function WriteCmd(byte cmd)

Mit WriteCmd() wird ein Kommandobyte an das LCD gesendet.

cmd Kommandobyte

 

ReadRam()   Nach oben

    function ReadRam() returns byte

Mit der Funktion ReadRam() wird ein Byte aus dem CG/DD-RAM des LC-Displays
gelesen von der aktuellen CG/DD-RAM-Adresse gelesen.
Vor dem Auslesen sollte deshalb die Adresse, ab der man lesen will, mit
der Funktion WriteCmd() gesetzt werden:
0x40 bis 0x7F = CG-RAM (Char-Generator-RAM)
0x80 bis 0xFF = DD-RAM (Display-Data-RAM)
Um die Adress-Pointer für den DD-RAM zusetzen, können auch
die Funktionen line() und goto() verwendet werden.
Beim auslesen eines Bytes wird der Adresszähler automatisch um eins erhöht.

z.B. Auslesen der ersten 3 Zeichen des Displays in Zeile 1:
pcflcd.line(1);
char1=pcflcd.ReadRam();
char2=pcflcd.ReadRam();
char3=pcflcd.ReadRam();

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

    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

    function print2(byte s[])
    function print(string s[])
    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



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)

 


Hinweise zu Multithreading / zum Betrieb mehrerer PCF-LCDs:

Werden mehere LC-Displays via PCF-LCD-Interface mit mehreren Threads angesteuert,
so müssen die Code-Segmente, die die einzelnen Displays ansteuern, seperat gecaptured werden.
Zusätzlich sollte, wenn die Display Threads nur wenige Programmzeilen außerhalb
des Captures besitzen, ein yield; unmittelbar nach dem Release eingefügt werden.

byte PCFLCDflag; // Flag für gemeinsames Capture
thread LCD1
{
 // Programmroutinen vor der Displayausgabe
 // ...


 //Displayausgabe
 capture PCFLCDflag;
  pcflcd.setpcf(0); // Display an Addr. 0
  // Ab hier Displayausgaben
  // ...

 release;
 yield;
// Nur falls ein Threadwechsel bis zum nächsten Capture unwahrscheinlich
 // Programmroutinen nach der Displayausgabe
 // ...

}

thread LCD2
{
 // Programmroutinen vor der Displayausgabe
 // ...


 //Displayausgabe
 capture PCFLCDflag;
  pcflcd.setpcf(1); // Display an Addr. 1
  // Ab hier Displayausgaben
  // ...

 release;
 yield; // Nur falls ein Threadwechsel bis zum nächsten Capture unwahrscheinlich
 // Programmroutinen nach der Displayausgabe
 // ...

}

thread
main
{
 // Initialisierungen
  pcflcd.setpcf(0); // Display an Addr. 0
  pcflcd.init(); // Display initialisieren
  pcflcd.setpcf(1); // Display an Addr. 1
  pcflcd.init(); // Display initialisieren
 // ...
 run LCD1;
 run LCD2;
 loop
 {
 // Main-Thread-Routinen
 // ...

 }
}


Auf diese Weise kann man auch aus mehreren Threads auf ein LC-Display zugreifen.


Autor: André Helbig   Mail: andre.h@cc2net.de    Erstellt: 5.10.2003