Hauptseite   Module   Alphabetische Liste   Datenstrukturen   Datenstruktur-Elemente   Zusätzliche Informationen  

Alphanumerisches LCD


Low-Level Zugriff / Brajer Vlado Konformität

void lcd_init (unsigned char lcd_matrix)
 (Re-)Initialisirung des LCD Moduls.

void lcd_cls (void)
 LCD Anzeige löschen.

void lcd_home (void)
 Cursor auf erste beschreibbare Position zurück.

void lcd_goto (unsigned char addr)
 Cursor auf eine beliebige Position setzen.

void lcd_ctrl (unsigned char lcd_control)
 Kontrolle der LCD Arbeitsweise.

void lcd_cleol (void)
 LCD Zeile ab Cursor löschen.

void lcd_putch (unsigned char data)
 Zeichenausgabe ab Cursor.

void lcd_print10 (unsigned long x)
 Ausgabe einer 10-stelligen Dezimalzahl.

void lcd_print2 (unsigned char x)
 Ausgabe einer 2-stelligen Dezimalzahl.

void lcd_print3 (unsigned int x)
 Ausgabe einer 3-stelligen Dezimalzahl.

void lcd_print5 (unsigned int x)
 Ausgabe einer 5-stelligen Dezimalzahl.

void lcd_printbin (unsigned char x)
 Ausgabe einer 8-stelligen Binärzahl.

void lcd_printf (const char *format,...)
 Primitiver Nachbau der Std-Lib-C printf() Funktion.

void lcd_printhex (unsigned char x)
 Ausgabe einer 2-stelligen Hexadezimalzahl.

void lcd_putstr (unsigned char *data)
 Zeichenkettenausgabe ab Cursor.

void lcd_control (unsigned char d, unsigned char c, unsigned char b)
 Vereinfachter Aufruf von lcd_ctrl().


CodeVision Konformität

void lcd_gotoxy (unsigned char x, unsigned char y)
 Cursor auf eine beliebeige X-Y-Position setzen.

void lcd_write_byte (unsigned char addr, unsigned char data)
 Datenbyte ausgeben.

void _lcd_write_data (unsigned char data)
 Kommandobyte ausgeben.

void lcd_clear (void)
 LCD Anzeige löschen.

void lcd_putchar (char c)
 Zeichenausgabe ab Cursor.

void lcd_puts (char *str)
 Zeichenkettenausgabe ab Cursor.

void _lcd_ready (void)
 LCD Bereitschaftstest.


Ausführliche Beschreibung

#include <avrhal/led.h> 

Diese Headerdatei deklariert zunächst einen Low-Level Zugang für ein alphanumerisches LCD. Es werden dabei 1 bis 4 Zeilen Displays mit bis zu 64 Zeichen je Zeile unterstützt. Diese LCD besitzen in aller Regel einen eigenen Controller, der auf dem Typ HD44780 von Hitachi basiert. Hier eine Liste von Vergleichstypen. Displays mit einem dieser Chips sollten mit dem hier bereitgestellten Code zusammenarbeiten:

Es wird immer von einer Nibble Kommunikation (4 Bit) mit dem LCD ausgegangen. Der LCD Port ist auf PORTC festgelegt. Die Steuersignale RS, RD und EN sind am selben LCD Port zum Übersetzungszeitpunkt frei definierbar. Das eine unbenutzte Bit wird zur Laufzeit auch als solches berücksichtigt. Damit ergibt sich eine konfigurierte Bitverteilung von: Vor der Benutzung der LCD Funktionen, muß dieser Teil der Bibliothek mit lcd_init() initialisiert werden. Hierbei wird der Typ des LCD Moduls verschlüsselt übergeben. Für die weitere Benutzung des LCD existieren abstrahierte aktionsbezogene Funktionen zum Positionieren des Cursors und Ausgeben von Zahlen und Zeichenketten. Nach Datenbuch des Controllers werden folgende Funktionen des LCD unterstützt (LCD instruction set): Der letzte Punkt wird nur unterstützt, wenn zum Übersetzungszeitpunkt das Polling aktiviert wurde. Bei deaktiviertem Polling wird mit einem Timeout Verfahren gearbeitet. Dieses sollte mit allen LCD Typen funktionieren. Es kann aber vorkommen, daß manche Controller den gegebenen Zeitrahmen nicht einhalten. Das Timeout Verfahren sollte dann zum Einsatz kommen, wenn man kleineren Code benötigt und weniger auf Ablaufzeit achtet.

Um zwischen Polling und Timeout Verfahren zu entscheiden, muß man ... . Das Polling Verfahren wurde aktiviert.

Für die Erstellung dieses Codes wurden folgende Referenzen benutzt:

Noch zu erledigen:
Überführung von Teilen der Initialisierung nach Sektion .init1

Unterstützung eigener frei definierter Grafikzeichen.

Balken- und Punktgrafik ähnlich den LED Funktionen.

Wenn möglich mehr Hardwarebeschleunigung.


Dokumentation der Funktionen

void _lcd_ready void    [inline, static]
 

LCD Bereitschaftstest.

CodeVision API
Wartet, bis das LCD zur Kommunikation bereit ist. Diese Funktion muß immer vor dem Schreiben von Daten an das LCD mit _lcd_write_data() aufgerufen werden.
Rückgabe:
Die Funktion _lcd_ready() besitzt keinen Rückgabewert.

void _lcd_write_data unsigned char    data [inline, static]
 

Kommandobyte ausgeben.

CodeVision API
Schreibt das Byte data in das LCD Anweisungsregister (instruction register). Diese Funktion kann zum Modifizieren der LCD Konfiguration benutzt werden.
Beispiel:
/* enables the displaying of the cursor */
_lcd_ready();
_lcd_write_data(0xe);
Parameter:
data  ist das auszugebende Zeichen.
Rückgabe:
Die Funktion _lcd_write_data() besitzt keinen Rückgabewert.

void lcd_clear void    [inline, static]
 

LCD Anzeige löschen.

CodeVision API
Aliasfunktion für lcd_cls(). Löscht die Anzeige des LCD und setzt den Cursor auf die linke obere Ecke.
Rückgabe:
Die Funktion lcd_clear() besitzt keinen Rückgabewert.

void lcd_cleol void   
 

LCD Zeile ab Cursor löschen.

Mit dieser Funktion wird der Inhalt der aktuellen Zeile ab aktueller Cursorposition bis zum Ende gelöscht (mit Leerzeichen beschrieben).

Rückgabe:
Die Funktion lcd_cleol() besitzt keinen Rückgabewert.

void lcd_cls void   
 

LCD Anzeige löschen.

Mit dieser Funktion wird der aktuell dargestellte Inhalt des Datenspeichers im LCD gelöscht (mit Leerzeichen beschrieben).

LCD instruction set:
Es kommt die LCD Funktion Clear Display zur Anwendung:
     RS   RD   DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
    [ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 1 ]
    
Rückgabe:
Die Funktion lcd_cls() besitzt keinen Rückgabewert.

void lcd_control unsigned char    d,
unsigned char    c,
unsigned char    b
[inline, static]
 

Vereinfachter Aufruf von lcd_ctrl().

Warnung:
Diese Funktion existiert aus Gründen der Abwärtskompatibilität und wird in einer der nächsten Veröffentlichungen der Bibliothek stillschweigend entfallen.
Parameter:
d  gibt mit Eins(1) an, ob das Display aktiv ist.
c  gibt mit Eins(1) an, ob der Cursor aktiv ist.
b  gibt mit Eins(1) an, ob der Cursor blinkt.
Rückgabe:
Die Funktion lcd_control() besitzt keinen Rückgabewert.

void lcd_ctrl unsigned char    lcd_control
 

Kontrolle der LCD Arbeitsweise.

Mit dieser Funktion wird die Arbeitsweise des LCD verändert. Hierzu wird das übergebene Kontrollbyte lcd_control wie folgt interpretiert.

     ___ ___ ___ ___ ___ ___ ___ ___
    |   |   |   |   |   |   |   |   |
    | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - lcd_control
    |___|___|___|___|___|___|___|___|
      |_______________|   |   |   |____ cursor blink (CB):
              |           |   |           0 : off
              |           |   |           1 : on
              |           |   |
              |           |   |________ cursor on/off (COO):
              |           |               0 : off
              |           |               1 : on
              |           |
              |           |____________ display on/off (DOO):
              |                           0 : off
              |                           1 : on
              |
              |________________________ unused
    
LCD instruction set:
Es kommt die LCD Funktion Display ON/OFF Control zur Anwendung:
     RS   RD   DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
    [ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 1 ][ D ][ C ][ B ]

        D equ. DOO
        C equ. COO
        B equ. CB
    
Parameter:
lcd_control  ist das Kontrollbyte mit der neuen LCD Arbeitsweise.
Rückgabe:
Die Funktion lcd_ctrl() besitzt keinen Rückgabewert.
Noch zu erledigen:
Es fehlen noch die Kontrolle über die Bewegungsrichtung des Cursors und das Verschieben des Datenspeichers im LCD. Dabei soll die LCD Funktion Entry Mode Set verwendet werden.

void lcd_goto unsigned char    addr
 

Cursor auf eine beliebige Position setzen.

Mit dieser Funktion wird der Cursor von der aktuellen Position auf eine mit addr übergebene neue gesetzt. Diese Position entspricht exakt einer Adresse im Datenspeicher des LCD und sollte den Wert 0x7f nicht überschreiten. Alle weieren Zeichenausgaben am LCD erfolgen ab dieser neuen Position.

LCD instruction set:
Es kommt die LCD Funktion Set DDRAM Address zur Anwendung:
     RS   RD   DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
    [ 0 ][ 0 ][ 1 ][AC6][AC5][AC4][AC3][AC2][AC1][AC0]

        AC[6..0] equ. (addr & 0x7f)
    
Parameter:
addr  gibt die neue Adresse im Datenspeicher des LCD an.
Rückgabe:
Die Funktion lcd_goto() besitzt keinen Rückgabewert.

void lcd_gotoxy unsigned char    x,
unsigned char    y
 

Cursor auf eine beliebeige X-Y-Position setzen.

CodeVision API
Mit dieser Funktion wird der Cursor von der aktuellen Position auf eine mit x und y neu definierte gesetzt. Diese Position setzt sich aus einer X-Koordinate und einer Y-Koordinate zusammen, wobei X das Zeichen in einer Zeile und Y die Zeile selbst ist. Die Zählweise beginnt bei beiden Koordinaten mit 0 ab der linken oberen Ecke. Es gilg also immer: lcd_gotoxy(0,0); entspricht lcd_goto(0); entspricht lcd_home();
Diese Funktion rechnet den kartesischen Koordinatenwert in Abhängigkeit des mit lcd_init() konfigurierten LCD Types in eine absolute Adresse im Datenspeicher des LCD um und benutzt dann die Funktion lcd_goto(), um den Cursor neu zu positionieren. Bei dieser Berechnung erfolgt kein Test auf gültigen Wertebereich!
Parameter:
x  gibt die neue X-Koordinate im Anzeigebereich des LCD an.
y  gibt die neue Y-Koordinate im Anzeigebereich des LCD an.
Rückgabe:
Die Funktion lcd_gotoxy() besitzt keinen Rückgabewert.

void lcd_home void   
 

Cursor auf erste beschreibbare Position zurück.

Mit dieser Funktion wird der Cursor von der aktuellen Position auf die aller erste beschreibbare zurückgesetzt. Diese Position befindet sich in der linken oberen Ecke im Anzeigebereich des LCD und entspricht der Adresse 0x00 im Datenspeicher des LCD. Alle weieren Zeichenausgaben am LCD erfolgen ab dieser neuen Position.

LCD instruction set:
Es kommt die LCD Funktion Return Home zur Anwendung:
     RS   RD   DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0
    [ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 0 ][ 1 ][ 0 ]
    
Rückgabe:
Die Funktion lcd_home() besitzt keinen Rückgabewert.

void lcd_init unsigned char    lcd_matrix
 

(Re-)Initialisirung des LCD Moduls.

Mit Aufruf dieser Funktion wird das am LCD Port PORTC angeschlossene LCD Modul neu (re-)initialisiert. Dabei wird die 4 Bit Datenübertrag zum Modul fest eingestellt. Der Cursor wird inkremental eingestellt.

Neben den Einstellungen des Ports selbst und der Konfiguration des LCD Moduls werden wichtige interne Parameter gesetzt, um die Koordination der Datenandressen in Abhängigkeit des angeschlossenen LCD Moduls zu realisieren. Hierzu wird der übergebene Typenschlüssel des LCD Moduls lcd_matrix benutzt. Die Bedeutung der Bits im Typenschlüssel zeigt die folgende Abbildung.

     ___ ___ ___ ___ ___ ___ ___ ___
    |   |   |   |   |   |   |   |   |
    | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - lcd_matrix
    |___|___|___|___|___|___|___|___|
      |___|   |___________________|
        |               |______________ chars per line (CPL):
        |                                 0x00 : n/d [1]
        |                                    . . .
        |                                 0x10 : 16 characters
        |                                    . . .
        |                                 0x14 : 20 characters
        |                                    . . .
        |                                 0x3f : 63 characters [1]
        |
        |______________________________ number of lines (L):
                                            00 : like 11 [2]
                                            01 : 1 line
    [1] see ToDo list                       10 : 2 lines
    [2] compatibility to CodeVision         11 : 4 lines
    

Der Typenschlüssel wird intern dazu benutzt, die Basisadresse (Anfang) einer jeden Zeile im Daten RAM des LCD zu berechnen. Somit kann eine X/Y Positionierung in die reale Adresse umgerechnet werden. Auch andere positionsabhängige Operationen sind erst damit möglich. Die folgende Abbildung zeigt den Vergleich von drei verschiedenen 16 Zeichen LCD mit 1, 2 und 4 Zeilen.

    line __      __ base address in display data ram (DDRAM)
           |    |
           |   _|__  ____  ____  ____  ____  __ . . . __  ____
           V  | V  ||    ||    ||    ||    ||           ||    | - L=01
              |    ||    ||    ||    ||    ||           ||    |
           1  |0x00||0x01||0x02||0x03||0x04||           ||0x0F|
              |____||____||____||____||____||__ . . . __||____|
               ____  ____  ____  ____  ____  __ . . . __  ____
              |    ||    ||    ||    ||    ||           ||    | - L=10
              |    ||    ||    ||    ||    ||           ||    |
           1  |0x00||0x01||0x02||0x03||0x04||           ||0x0F|
              |____||____||____||____||____||__ . . . __||____|
              |    ||    ||    ||    ||    ||           ||    |
              |    ||    ||    ||    ||    ||           ||    |
           2  |0x40||0x41||0x42||0x43||0x44||           ||0x4F|
              |____||____||____||____||____||__ . . . __||____|
               ____  ____  ____  ____  ____  __ . . . __  ____
              |    ||    ||    ||    ||    ||           ||    | - L=11
              |    ||    ||    ||    ||    ||           ||    |
           1  |0x00||0x01||0x02||0x03||0x04||           ||0x0F|
              |____||____||____||____||____||__ . . . __||____|
              |    ||    ||    ||    ||    ||           ||    |
              |    ||    ||    ||    ||    ||           ||    |
           2  |0x40||0x41||0x42||0x43||0x44||           ||0x4F|
              |____||____||____||____||____||__ . . . __||____|
              |    ||    ||    ||    ||    ||           ||    |
              |    ||    ||    ||    ||    ||           ||    |
           3  |0x10||0x11||0x12||0x13||0x14||           ||0x1F|
              |____||____||____||____||____||__ . . . __||____|
              |    ||    ||    ||    ||    ||           ||    |
              |    ||    ||    ||    ||    ||           ||    |
           4  |0x50||0x51||0x52||0x53||0x54||           ||0x5F|
              |____||____||____||____||____||__ . . . __||____|
    
CodeVision API
Da bei CodeVision zwei Headerdateien für verschiedene LCD Typen existieren, ist die hier deklarierte API nicht voll kompatibel. Bei einer Codeüberführung von CodeVision zu dieser Bibliothek muß lcd_init() gegebenenfalls angepaßt werden. Vorrangig wird immer ein 4 Zeilen LCD angenommen.
Parameter:
lcd_matrix  definiert den Typ des LCD Moduls. Siehe oben.
Rückgabe:
Die Funktion lcd_init() besitzt keinen Rückgabewert.
Noch zu erledigen:
Beseitigung der unklaren Nummerierung für die Anzahl Zeichen je Zeile in lcd_matrix, oder anders: Was ist bei Anzahl gleich Null(0) ?

Differenzierung in real existierende LCD Typen und somit wegfall der Berechnung von Anfangsadressen im Datenspeicher. Die Adressen werden zum Übersetzungszeitpunkt ermittelt und fest einprogrammiert.

void lcd_print10 unsigned long    x
 

Ausgabe einer 10-stelligen Dezimalzahl.

Mit dieser Funktion wird die mit x übergebene 32 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 10 Stellen als Dezimalzahl auf dem LCD ausgegeben. Führende Nullen werden immer mit ausgegeben! Es erfolgt keine Kontrolle des Wertebereiches!

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_print10() besitzt keinen Rückgabewert.

void lcd_print2 unsigned char    x
 

Ausgabe einer 2-stelligen Dezimalzahl.

Mit dieser Funktion wird die mit x übergebene 8 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 2 Stellen als Dezimalzahl auf dem LCD ausgegeben. Führende Nullen werden immer mit ausgegeben! Es erfolgt eine Kontrolle des Wertebereiches, wobei sich x zwischen 0 und 99 bewegen darf.

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_print2() besitzt keinen Rückgabewert.

void lcd_print3 unsigned int    x
 

Ausgabe einer 3-stelligen Dezimalzahl.

Mit dieser Funktion wird die mit x übergebene 16 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 3 Stellen als Dezimalzahl auf dem LCD ausgegeben. Führende Nullen werden immer mit ausgegeben! Es erfolgt eine Kontrolle des Wertebereiches, wobei sich x zwischen 0 und 999 bewegen darf.

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_print3() besitzt keinen Rückgabewert.

void lcd_print5 unsigned int    x
 

Ausgabe einer 5-stelligen Dezimalzahl.

Mit dieser Funktion wird die mit x übergebene 16 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 5 Stellen als Dezimalzahl auf dem LCD ausgegeben. Führende Nullen werden immer mit ausgegeben! Es erfolgt keine Kontrolle des Wertebereiches!

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_print5() besitzt keinen Rückgabewert.

void lcd_printbin unsigned char    x
 

Ausgabe einer 8-stelligen Binärzahl.

Mit dieser Funktion wird die mit x übergebene 8 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 8 Stellen als Binärzahl auf dem LCD ausgegeben. Dabei wird mit dem MSB begonnen.

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_printbin() besitzt keinen Rückgabewert.

void lcd_printf const char *    format,
...   
 

Primitiver Nachbau der Std-Lib-C printf() Funktion.

Mit dieser sehr einfach gehaltenen Nachbildung der aus der Standard C Bibliothek bekannten printf() Funktion kann man ASCII Zeichenketten mit einfachen Formatanweisungen auf dem LCD ab der aktuellen Anzeigeposition am LCD ausgeben. Hierbei wird ausschließlich nur die Funktion lcd_putch() benutzt. Bekannt sind folgende Formatierer ohne Formaterweiterungen wie führende Nullen oder Stellenbegrenzer:

  • c : gibt ein ASCII Zeichen aus
  • u und d : gibt eine Zahl vom Typ int als 5-stellige Dezimalzahl mit führenden Nullen aus
  • x : gibt eine Zahl vom Typ int als 2-stellige Hexadezimalzahl mit führenden Nullen aus
Warnung:
Diese Funktion wird in späteren Versionen der Bibliothek eventuell durch den generischen printf() Mechanismus der Standard C Bibliothek für AVR Controller, avrlibc, stillschweigend ersetzt.
Parameter:
format  ist der Formatstring.
Rückgabe:
Die Funktion lcd_printf() besitzt keinen Rückgabewert.

void lcd_printhex unsigned char    x
 

Ausgabe einer 2-stelligen Hexadezimalzahl.

Mit dieser Funktion wird die mit x übergebene 8 Bit positive Ganzzahl unter Zuhilfenahme von lcd_putch() ab der aktuellen Anzeigeposition am LCD mit exakt 2 Stellen als Hexadezimalzahl auf dem LCD ausgegeben. Führende Nullen werden immer mit ausgegeben!

Parameter:
x  ist die auszugebende Zahl.
Rückgabe:
Die Funktion lcd_printhex() besitzt keinen Rückgabewert.

void lcd_putch unsigned char    data
 

Zeichenausgabe ab Cursor.

Mir dieser Funktion wird das mit data übergebene ASCII Zeichen auf dem LCD direkt und ohne Filterung an der aktuellen Anzeigeposition am LCD ausgegeben, also in den Daten RAM des LCD geschrieben. Dabei wird die interne Cursorsteuerung entsprechend korrigiert. Der Cursor wird um ein Zeichen nach rechts verschoben. Am Zeilenende erfolgt der automatische Umbruch. Am Displayende erfolgt der automatische Sprung zur ersten beschreibbaren Position wie unter Verwendung von lcd_home().

Parameter:
data  ist das auszugebende Zeichen.
Rückgabe:
Die Funktion lcd_putch() besitzt keinen Rückgabewert.

void lcd_putchar char    c [inline, static]
 

Zeichenausgabe ab Cursor.

CodeVision API
Aliasfunktion für lcd_putch(). Zeigt das Zeichen c an der aktuellen Anzeigeposition am LCD an.
Parameter:
c  ist das auszugebende Zeichen.
Rückgabe:
Die Funktion lcd_putchar() besitzt keinen Rückgabewert.

void lcd_puts char *    str [inline, static]
 

Zeichenkettenausgabe ab Cursor.

CodeVision API
Aliasfunktion für lcd_putstr(). Zeigt die Zeichenkette, auf die str zeigt, ab der aktuellen Anzeigeposition am LCD an.
Parameter:
str  zeigt auf die auszugebende Zeichenkette.
Rückgabe:
Die Funktion lcd_puts() besitzt keinen Rückgabewert.

void lcd_putstr unsigned char *    data
 

Zeichenkettenausgabe ab Cursor.

Mir dieser Funktion wird die über data referenzierte ASCII Zeichenkette unter Zuhilfenahme von lcd_putch() auf dem LCD direkt und ohne Filterung an der aktuellen Anzeigeposition am LCD ausgegeben.

Parameter:
data  zeigt auf die auszugebende Zeichenkette.
Rückgabe:
Die Funktion lcd_putstr() besitzt keinen Rückgabewert.

void lcd_write_byte unsigned char    addr,
unsigned char    data
 

Datenbyte ausgeben.

CodeVision API
Schreibt das Byte data an die Adresse addr im LCD Zeichengenerator oder Datenspeicher.
Beispiel:
#include <stddef.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <inttypes.h>

#include <avrhal/delay.h>
#include <avrhal/lcd.h>

#define b0000000        0x00
#define b0001111        0x0f
#define b0000011        0x03
#define b0000101        0x05
#define b0001001        0x09
#define b0010000        0x10
#define b0100000        0x20
#define b1000000        0x40

/* table for the LCD user defined character:
 * arrow that points to the top right corner */
unsigned char arrow[8] = {
        b0000000,
        b0001111,
        b0000011,
        b0000101,
        b0001001,
        b0010000,
        b0100000,
        b1000000
};

/* function used to define user characters */
void define_char(unsigned char *pc, unsigned char char_code)
{
        unsigned char i, a;

        a = ( char_code << 3 ) | 0x40;
        for (i = 0; i < 8; i++) lcd_write_byte(a++, *pc++);
}


void main(void)
{
        /* initialize the LCD for 2 lines and 16 colums */
        lcd_init(16);

        /* define first user character with arrow */
        define_char(arrow, 0);

        /* switch to writing in Display RAM */
        lcd_gotoxy(0, 0);
        lcd_puts("User char 0: ");

        /* display first user character */
        lcd_putchar(0);

        while (1); /* loop for ever */
}
Parameter:
addr  gibt die Adresse im Datenspeicher des LCD an.
data  ist das auszugebende Zeichen.
Rückgabe:
Die Funktion lcd_write_byte() besitzt keinen Rückgabewert.


Automatically generated by Doxygen 1.2.18 on 17 Jul 2003.