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. |
#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:
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:PORTC
Bit 7..4: Daten Nibble (DB7..4)PORTC
Bit 3: unbenutztPORTC
Bit 2: Signal ENPORTC
Bit 1: Signal RDPORTC
Bit 0: Signal RSUm zwischen Polling und Timeout Verfahren zu entscheiden, muß man ... . Das Polling Verfahren wurde aktiviert.
Für die Erstellung dieses Codes wurden folgende Referenzen benutzt:
init1
Unterstützung eigener frei definierter Grafikzeichen.
Balken- und Punktgrafik ähnlich den LED Funktionen.
Wenn möglich mehr Hardwarebeschleunigung.
|
LCD Bereitschaftstest.
|
|
Kommandobyte ausgeben.
|
|
LCD Anzeige löschen.
|
|
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).
|
|
LCD Anzeige löschen. Mit dieser Funktion wird der aktuell dargestellte Inhalt des Datenspeichers im LCD gelöscht (mit Leerzeichen beschrieben).
|
|
Vereinfachter Aufruf von lcd_ctrl().
|
|
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
|
|
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
|
|
Cursor auf eine beliebeige X-Y-Position setzen.
|
|
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
|
|
(Re-)Initialisirung des LCD Moduls.
Mit Aufruf dieser Funktion wird das am LCD Port 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| |____||____||____||____||____||__ . . . __||____|
|
|
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!
|
|
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.
|
|
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.
|
|
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!
|
|
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.
|
|
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:
|
|
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!
|
|
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().
|
|
Zeichenausgabe ab Cursor.
|
|
Zeichenkettenausgabe ab Cursor.
|
|
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.
|
|
Datenbyte ausgeben.
|