| Next revision | Previous revision |
| de:examples:display:lcd_graphic [2010/11/24 09:40] – angelegt Wember | de:examples:display:lcd_graphic [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| ====== graphisches LCD ====== | ====== Graphisches LCD ====== |
| |
| //Necessary knowledge: [HW] [[en:hardware:homelab:lcd]], [LIB] [[en:software:homelab:library:module:lcd_graphic]], [LIB] [[en:software:homelab:library:delay]], [PRT] [[en:examples:display:lcd_alphanumeric]]// | //Notwendiges Wissen: [HW] [[en:hardware:homelab:lcd]], [LIB] [[en:software:homelab:library:module:lcd_graphic]], [LIB] [[en:software:homelab:library:delay]], [PRT] [[en:examples:display:lcd_alphanumeric]]// |
| |
| ===== Theorie ===== | ===== Theorie ===== |
| |
| Das graphische LCD //liquid crystal display// ist ein Display welches das darstellen von Bildern und Text erlaubt. Der Aufbau ist dem alphanumerischen LCD ähnlich, mit dem Unterschied, dass am graphischen Display alle Pixel in einer großen Matrix sind. Wenn wir monochrome LCD haben, dann ist ein Pixel ein Kästchensegment, bei Farbdisplays besteht ein Pixel aus 3 Unterpixel. Jedes der Unterpixel lässt nur einfarbiges Licht durch (rot, grün, blau). Da die Unterpixel sehr nah aneinander sind, scheint es als wäre es ein Pixel. | Das graphische LCD //liquid crystal display// ist ein Display zur Darstellung von Bildern und Text. Es ist ähnlich aufgebaut wie das alphanumerische LCD, mit dem Unterschied, dass sich auf dem graphischen LCD alle Pixel in einer großen Matrix befinden. Bei monochromen LCDs entspricht ein Pixel einem quadratischen Segment, bei Farbdisplays besteht ein Pixel aus drei Unterpixeln. Jedes der Unterpixel lässt nur eine Lichtfarbe durch (rot, grün oder blau). Da die Unterpixel sehr nah beieinander liegen, werden sie als ein Pixel wahrgenommen. |
| |
| [{{ :examples:display:lcd_graphic:lcd_graphic_abc.png?200|The text formed of pixels of a graphic LCD.}}] | [{{ :examples:display:lcd_graphic:lcd_graphic_abc.png?200|Der durch Pixel eines graphischen LCDs dargestellte Text.}}] |
| |
| Monochrome graphische Displays haben normalerweise eine passive Matrix, große Farbdisplays inkl. Computer-Bildschirme haben eine aktive Matrix. Jede Information über Farbe des Hintergrunds und Pixel des graphischen LCDs sind ähnlich zu dem des alphanumerischen LCDs. | Monochrome graphische Displays haben normalerweise eine passive Matrix, große Farbdisplays (auch Computer-Bildschirme) eine aktive. Im Hinblick auf die Farbe des Hintergrunds und der Pixel entspricht das graphische LCD dem alphanumerischen. Auch das graphische Display verfügt über einen separaten Controller, welcher die Information über die Kommunikationsschnittstelle empfängt und das elektrische Feld für die Segmente generiert. Im Gegensatz zum alphanumerischen LCD, welches Text anzeigt, indem die Indizes der darzustellenden Zeichen gesendet werden, kann das graphische LCD keine Buchstaben eigenständig generieren - sämtliche Bilder und Texte müssen Pixel für Pixel vom Nutzer generiert werden. |
| Ähnlich zum alphanumerischen Displays, hat das graphische Display auch ein separaten Controller, welcher sich um die eingehenden Informationen durch das Kommunikations-Interface kümmert und das elektrische Feld für die Segmente generiert. Da es für das alphanumerische LCD genug ist die Indizes und die Reihenfolge des Textes zu senden, kann das graphische LCD keine Buchstaben selber generieren - alle Bilder und Buchstaben müssen von Nutzer Pixel für Pixel erstellt werden. | |
| | |
| |
| ===== Übung ===== | ===== Übung ===== |
| |
| Im HomeLab Set ist ein 84x48 Pixel monochromes graphisches LCD. Es ist das Gleiche wie im Mobiltelefon Nokia 3310. Ein Philips PCD8544 Controller ist am Display angebracht, mit welchem durch einen SPI-ähnlichen seriellen Interface kommuniziert werden kann. Die Hintergrundbeleuchtung des Displays wird separat kontrolliert. Mit dem Display zu kommunizieren ist nicht sehr schwer., aber auf Grund der vielen Funktionen wird das hier nicht beschrieben. Die HomeLab Library hat Funktionen dafür. | Das HomeLab Kit enthält ein 84x48 Pixel großes, monochromes, graphisches LCD. Es ist das gleiche, welches auch im Mobiltelefon Nokia 3310 verwendet wird. Ein Philips PCD8544 Controller ist am Display angebracht, mit welchem über eine SPI-ähnliche serielle Schnittstelle kommuniziert werden kann. Die Hintergrundbeleuchtung des Displays wird separat gesteuert.Die Kommunikation mit dem Display ist nicht sehr schwer, aufgrund der vielen Funktionen wird sie hier jedoch nicht erläutert. Die HomeLab Library enthält die dafür notwendigen Funktionen. |
| |
| Die Funktionen für das graphische LCD sind ähnlich zu denen des alphanumerischen LCD. Zuerst muss der Bildschirm mit der Funktion // lcd_gfx_init//gestartet werden. Nach dem Start sollte man die Screen, bzw den Speicher des Controllers mit der //lcd_gfx_clear// Funktion leeren. | Die Funktionen für das graphische LCD sind ähnlich zu denen des alphanumerischen LCD. Zuerst muss der Bildschirm mit der Funktion //lcd_gfx_init//gestartet werden. Nach dem Start sollte man den Bildschrim, bzw. den Speicher des Controllers mit der //lcd_gfx_clear// Funktion leeren. Die Library enthält eine Abbildung des vollständigen lateinischen Alphabets, der Zahlen sowie der am häufigsten verwendeten Zeichen. Die Buchstaben ist 7 Pixel hoch und 5 Pixel breit. Der Abstand zwischen den Buchstaben beträgt horizontal 6 und vertikal 8 Pixel. Es können also Buchstaben in 6 Reihen mit 14 Spalten auf dem Display dargestellt werden. Zur Darstellung von Buchstaben oder Text, muss zunächst mit der Funktion //lcd_gfx_goto_char_xy// die Position festgelegt werden. Mit der Funktion //cd_gfx_write_char// wird ein Buchstabe angezeigt, die Funktion //lcd_gfx_write_string// ermöglicht die Darstellung eines Textes. |
| Es gibt eine Buchstaben Abbildung in der Library mit dem vollen Lateinischen Alphabet, Nummern und den am meisten genutzten Zeichen. Die Höhe der Buchstaben ist 7 und die Weite 5 Pixel. Der Abstand zwischen den Buchstaben ist 6 Horizontal und 8 Vertikal, also hat das Display 6 Reihen mit 14 Spalten an Buchstaben zur Verfügung. Um Buchstaben oder Text darzustellen, muss zuerst die Position bestimmt werden mit der Funktion // lcd_gfx_goto_char_xy//. Um einen Buchstaben anzuzeigen wird die Funktion // lcd_gfx_write_char// genutzt und um Text anzuzegen die Funktion// lcd_gfx_write_string//. | |
| |
| Das folgende ist ein Beispiel des Zeitzählers. Das Programm zählt Sekunden (annährend), Minuten und Stunden.Um Zeit in Text zu konvertieren wird die //sprintf// Funktion genutzt. | Nachfolgend ist ein Beispiel des Zeitzählers dargestellt. Das Programm zählt Sekunden (annähernd), Minuten und Stunden. Zum Konvertieren von Zeit in Text wird die Funktion //sprintf// genutzt. |
| |
| <code c> | <code c> |
| // | // |
| // Example of using the graphic LCD of the HomeLab. | // Beispiel für die Nutzung des graphischen LCD des HomeLab. |
| // Time of day is displayed on LCD since the beginning of the program. | // Die Tageszeit wird ab Beginn des Programms auf dem LCD angezeigt. |
| // | // |
| #include <stdio.h> | #include <stdio.h> |
| |
| // | // |
| // Main program. | // Hauptprogramm. |
| // | // |
| int main(void) | int main(void) |
| { | { |
| int seconds = 0; | int seconds = 0; |
| char text[16]; | char text[16]; |
| |
| // Set-up of the LCD. | // Einrichten des LCD. |
| lcd_gfx_init(); | lcd_gfx_init(); |
| |
| // Cleaning the screen. | // Löschen des Displays. |
| lcd_gfx_clear(); | lcd_gfx_clear(); |
| |
| // Switching on the background light. | // Einschalten der Hintergrundbeleuchtung. |
| lcd_gfx_backlight(true); | lcd_gfx_backlight(true); |
| |
| // Displaying the name of the program. | // Anzeige des Programmnamens. |
| lcd_gfx_goto_char_xy(1, 1); | lcd_gfx_goto_char_xy(1, 1); |
| lcd_gfx_write_string("Aja loendur"); | lcd_gfx_write_string("Aja loendur"); |
| |
| // Endless loop. | // Endlosschleife. |
| while (true) | while (true) |
| { | { |
| // Converting the seconds to the form of clock. | // Sekunden in die Form der Uhrzeit konvertieren. |
| // hh:mm:ss | // hh:mm:ss |
| sprintf(text, "%02d:%02d:%02d", | sprintf(text, "%02d:%02d:%02d", |
| (seconds / 3600) % 24, | (seconds / 3600) % 24, |
| (seconds / 60) % 60, | (seconds / 60) % 60, |
| seconds % 60); | seconds % 60); |
| |
| // Displaying the clock text. | // Anzeige des Zeittextes. |
| lcd_gfx_goto_char_xy(3, 3); | lcd_gfx_goto_char_xy(3, 3); |
| lcd_gfx_write_string(text); | lcd_gfx_write_string(text); |
| | |
| // Adding one second. | // Eine Sekunde hinzufügen. |
| seconds++; | seconds++; |
| | |
| // Hardware delay for 1000 ms. | // Hardwareverzögerung von 1000 ms. |
| hw_delay_ms(1000); | hw_delay_ms(1000); |
| } | } |
| } | } |
| </code> | </code> |
| | |