This is an old revision of the document!
Notwendiges Wissen: [HW] lcd, [LIB] Alphanumeric LCD, [LIB] Delay, [PRT] Periodic interrupt
Das alphanumerische LCD ist ein Flüssigkristall-Display, zur Darstellung von Buchstaben und Ziffern. In einfachen LCD's werden flüssige Kristalle verwendet, welche zwischen transparenten Elektroden angeordnet sind und welche die Polarisation des durchstrahlenden Lichts im elektrischen Feld verändern. Die Elektroden sind mit Polarisationsfiltern bedeckt, welche sicher stellen, das nur in eine Richtung polarisiertes Licht den Bildschirm erreicht. Wenn der Flüssigkristall seine Polarisation durch das elektrische Feld ändert, erreicht das Licht nicht den Bildschirm bzw. das Segment und die Anzeige ist schwarz.
Hauptmerkmal eines alphanumerischen LCD ist die Anordnung der Segmente. Der Bildschirm ist in verschiedene Anzeigen unterteilt. Jede Anzeige hat entweder genügend Segmente um Buchstaben oder Nummern anzuzeigen oder es wird eine Matrix aus Pixeln gebildet. Zum Beispiel ist eine Matrix aus 5×7 Pixeln ausreichend, um alle Nummern und Buchstaben des lateinischen Alphabets darzustellen. Die Anzeigen haben normalerweise 1 bis 4 Zeilen und 8 bis32 Spalten. Zwischen den Anzeigen befinden sich kleine Abstände ähnlich der Buchstaben im Text.
Neben dem Bildschirm hat das alphanumerische LCD auch einen Controller, welcher die Segmente des Bildschirms gemäß den Befehlen der Kommunikationsschnittstelle steuert. je nach Befehl vom Kommunikations-Interface kontrolliert. Ein Controller hat eine vorprogrammierte Karte an Buchstaben, wo jeder Buchstabe, Nummer und Symbol ihren eigenen Index haben. Das darstellen von Text auf dem Bildschirm wird, einfach gesagt, dadurch bewerkstelligt, dass die Indizes zum Controller gesendet werden. In Wirklichkeit müssen es mehr Kontrollbefehle gesendet werden, bevor irgendetwas dargestellt werden kann. Es wichtig sich mit jedem LCD Datenblatt vertraut zu machen, weil es viele verschiedene Typen von LCDs gibt und diese alle unterschiedlich kontrolliert werden.
Alphanumerische LCDs haben normalerweise eine passive Matrix, wo die Erneuerung des elektrischen Feldes der Segmente runden-weise stattfindet. Darum sind die Bildschirme mit passiver Matrix langsamer und haben weniger Kontrast als welche mit aktiver Matrix, wo die Ladung jedes Segments durch einen eigenen Transistor erfolgt. Einige LCDs haben eine reflektierende Rückfläche, andere haben eine Backlight, manchmal sogar viele verschiedene Backlights. Aber die Segmentfarbe für alphanumerische LCDs ist nur eine, schwarz, aber es gibt auch Bildschirme mit weißer oder bunter Schrift.
Am HomeLab Digitalen I/O-Modul ist ein 2×16 Symbol alphanumerisches LCD WC 1602A angeschlossen. Um den Bildschirm zu kontrollieren gibt es einen 4-Bit Datenbus und 3 Kontroll-Pins, aber das Kommunikationsprotokoll ist viel zu umfangreich um es hier zu besprechen. Um es einfach zu halten, die HomeLab Library hat die Funktionen um das Display zu nutzen.
Bevor man das Display nutzt, ist es wichtig die Einstellungen anzupassen. Dafür gibt es die lcd_alpha_init Funktion, welche einen blinkenden Cursor auf dem Bildschirm erscheinen lässt. Auf dem Bildschirm gibt es nur eine aktive Position für den Cursor wo Text eingegeben werden kann. Also bevor man Text eingibt, muss der Cursor zur gewünschten Position bewegt werden. Um die Position des Cursors zu verändern gibt es die Funktion lcd_alpha_goto_xy und für die Darstellung die Funktion lcd_alpha_write_string. All diese Funktionen des alphanumerischen LCDs werden in der Library erklärt.
Der folgende Programm-Code zeigt wie man das alphanumerische LCD als Uhr nutzt. Die Zeit beginnt um 00:00:00 und steigt annähernd jede Sekunde. Da das zählen von Zeit mit einer Verzögerungsfunktion geschieht, ist das nicht sehr genau. Die Ungenauigkeit wird in der Aufgabe zu periodischen Unterbrechungen erklärt. Das Programm zählt die Zeit in Sekunden und konvertiert diese in Minuten und Sekunden. Um Uhrzeit darzustellen wird die Standard-Funktion in C-Sprache genutzt: sprintf.
// // The example of using the alphanumerical LCD of the HomeLab. // The clock time starting at the beginning of the program is displayed on the LCD. // #include <stdio.h> #include <homelab/module/lcd_alpha.h> #include <homelab/delay.h> // // Main program. // int main(void) { int seconds = 0; char text[16]; // Set-up of the LCD. lcd_alpha_init(LCD_ALPHA_DISP_ON); // Cleaning of the LCD. lcd_alpha_clear(); // Name of the program. lcd_alpha_write_string("The Time Counter"); // Endless loop while (true) { // Converting the seconds to the clock form: // hh:mm:ss sprintf(text, "%02d:%02d:%02d", (seconds / 3600) % 24, (seconds / 60) % 60, seconds % 60); // Displaying the clock text in the beginning of the second row of the LCD. lcd_alpha_goto_xy(0, 1); lcd_alpha_write_string(text); // Growing seconds by 1. seconds++; // Hardware delay 1000 ms. hw_delay_ms(1000); } }