Tag 4 7 Segment-Anzeige, File Include, LC-Display 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1
Die 7-Segment-Anzeige Eigentlich 8-Segment-Anzeige Gesteuert über 8 Pins an Port B A-G entspricht 0-7 Sonst wie LED-Reihe Darstellung von Zeichen nicht einfach Jedes Zeichen muss explizit programmiert werden Einbindung von komplexer Funktionalität durch externe Dateien #include seven_seg.h F E H A G D B C 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 2
Liquid-Crystal-Display (Flüssigkristalldisplay) Eigenschaften 128x64 Pixel Gesteuert über 30 Pins per Displaycontroller Hintergrundbeleuchtung Keine Programmierung des Displays! Nur der Controller wird gesteuert! 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 3
128x64 Pixel 8 Zeilen (jeweils 8 Pixel hoch) Jede Zeile enthält 128 Bytes Jedes Byte beschreibt eine Spalte innerhalb einer Zeile 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 4
128x64 Pixel 8 Zeilen (jeweils 8 Pixel hoch) 1. Zeile Jede Zeile enthält 128 Bytes Jedes Byte beschreibt eine Spalte innerhalb einer Zeile 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 5
128x64 Pixel 8 Zeilen (jeweils 8 Pixel hoch) Jede Zeile enthält 128 Bytes Jedes Byte beschreibt eine Spalte innerhalb einer Zeile 1. Zeile, Byte 3 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 6
128x64 Pixel 8 Zeilen (jeweils 8 Pixel hoch) Jede Zeile enthält 128 Bytes Jedes Byte beschreibt eine Spalte innerhalb einer Zeile 1. Zeile, Byte 3, Bit 2 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 7
Grundlegende Funktionen zur Kommunikation mit dem Displaycontroller: Senden eines Bytes an den Controller void lcd_send(uint8_t c); Senden eines Datenbytes an den Controller (verwendet lcd_send(c)) void lcd_data(uint8_t data); Senden eines Kommando-Bytes an den Controller (verwendet lcd_send(c)) void lcd_command(uint8_t cmd); Lesen eines Bytes vom Controller uint8_t lcd_read(); 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 8
Abbildung: Datenblatt KS0713 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 9
Programmcode: void lcd_send(uint8_t c) { LCD_CTL &= ~(1 << LCD_RW); // write mode LCD_DATD = 0xff; // data direction: output LCD_DAT = c; // data LCD_CTL &= ~(1 << LCD_CS); // chip select on LCD_CTL = (1 << LCD_EN); // write enable on _delay_us(1); // >125 ns delay LCD_CTL &= ~(1 << LCD_EN); // write enable off LCD_CTL = (1 << LCD_CS); // chip select off } 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 10
Kompliziertere Funktionen: Initialisieren des Displays void lcd_init(void); An eine bestimmte Displaystelle springen void lcd_goto(uint8_t col, uint8_t row); Die untersten 3 Bit von row werden nicht berücksichtigt (weil keine Positionierung innerhalb einer Zeile möglich ist) In eine bestimmt Displayzeile springen void lcd_gotoline(uint8_t line); Gesamten Displayinhalt löschen void lcd_clear(); 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 11
Einzelne Pixel manipulieren Status eines einzelnen Pixel auslesen uint8_t lcd_read_point(uint8_t x, uint8_t y); Einzelnen Pixel schwärzen void lcd_draw_point(uint8_t x, uint8_t y); Einzelnen Pixel löschen void lcd_erase_point(uint8_t x, uint8_t y); Einzelnen Pixel umschalten void lcd_toggle_point(uint8_t x, uint8_t y); 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 12
Textausgabe Benötigt pixelweise definierten Font (#include font1.h ) Ausgeben eines einzelnen Zeichens void lcd_char(uint8_t c); Ausgeben eines kompletten Strings void lcd_text(uint8_t *s); 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 13
Aufgaben Zeichensatz für die 7-Segment-Anzeige erweitern Mehrzeiligen Text auf dem LC-Display ausgeben Zeichensatz für das LC-Display verändern Funktion zum Zeichnen einer Verbindungslinie zwischen zwei Punkten auf dem Display Bewegen eines Objekts mit dem Joystick über das Display Ausgeben einer Melodie auf dem Lautsprecher (Timer im CTC Modus) 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 14