LCD
1 Infos LCD
LCD

Ein LCD (engl. liquid crystal display) ist eine Flüssigkeitskristallanzeige. Die einzelnen Segmente ändern durch eine angelegte Spannung ihre Lichtdurchlässigkeit und so können einzelne Zeichen dargestellt werden. LCDs gibt es mit und ohne Hintergrundbeleuchtung. Das hier gezeigte Display besitzt keine Hintergrundbeleuchtung und arbeitet mit einer Spannung von 5 V. Hierzu wird die Versorgungsspannung von 3,3 V mit einer Ladungspumpe verdoppelt und anschließend mit einem Festspannungsregler auf 5 V geregelt.

Zur Verwendung des Displays wird eine Bibliothek zur Verfügung gestellt. Binden Sie deshalb die Datei LCDconfig.h und LCDconfig.c in das Projekt ein.

2 Pinbelegung
Pinbelegung LCD

Während LIME 2 das LCD-Modul C0802-04 mit 2mal 8 Zeichen verwendet, arbeitet LIME 1 mit dem LCD-Modul 162COG-BA-BC von Displaytech mit 2mal 16 Zeichen. Beide Displays arbeiten mit einem HD47780 industriestandard-kompatiblem Controller mit folgender Pinbelegung:

VSS Ground (Masse)
V0 für Kontrast
VDD Versorgungs­spannung 5 V
RS 1 Daten 0 Steuerbefehle
RW 1 Read mode 0 Write mode
E 1 LCD aktiv 0 LCD inaktiv
DB0 ... DB7 Datenbits
3 Funktionen für das LCD
Funktion Aufgabe Aufruf
void LCDinit (void) Display initialisieren LCDinit( );
void LCDline1( void ) Pos. 1 in Zeile 1 LCDline1( );
void LCDline2( void ) Pos. 1 in Zeile 2 LCDline2( );
void LCDout( char data ) Zeichenausgabe LCDout( );
void LCDclr( void ) Display löschen LCDclr( );

Wird auf den Datenbits bspw. die Werte DB7...0 = 0b 0110 1011 = 107 geschrieben, übersetzt der LCD-Controller dieses in den entsprechenden ASCII-Wert, hier: 'k'. Auf der anderen Seite übersetzt der C-Compiler von MPLAB das Zeichen 'k' automatisch in die Zahl 107. Somit führen beide Aufrufe, LCDout('k'); und LCDout(107);, zu der identischen Anzeige.

Werte von Variablen müssen allerdings in Zeichen umgewandelt werden. Da in der ASCII-Tabelle die Ziffern an der Stelle 48 beginnen, addiert man zu der Variablen den Wert 48:
LCDline1( );
 int i = 2;
 LCDout(i+48);

4 Arrays : Zeichenketten

Definition eines Arrays:

unsigned char T1[8]={"TO LIME2"};

Index 0 1 2 3 4 5 6 7
Zeichen T O L I M E 2

Arrays (deutsch Felder) werden beim Programmieren zum Darstellen von Tabellen verwendet. Dies ermöglicht es große Datenmengen einfach zu verwalten. Arrays mit Zeichen nennt man Zeichenketten.

Die definierte Tabelle hat eine Zeile mit 8 Zellen (auch Elemente). Dabei erhält die erste Zelle den Index 0, die letzte Zelle den Index 8 (Anzahl der Zellen - 1). Zur Info: Eine Tabelle mit zwei Zeilen sieht folgendermaßen aus: unsigned char T1[8][2];

In der Praxis wird aber häufig nur mit einzeiligen Arrays gearbeitet. Benötigt man eine zweite Zeile definiert man einfach ein weiteres Array: unsigned char T2[8];.

5 Zugriff auf Arrays

Zugriff auf die 1. Zelle des Arrays:

LCDout( T1[0] );


Zugriff auf alle Zellen des Arrays:

for( i=0; i<8; i++){
      LCDout( T1[i] );
 }

Der Zugriff auf einzelne Zellen des Arrays erfolgt nun durch den Aufruf des Arrays mit Indexangabe. Man beachte das das letzte Zeichen immer den Index: Anzahl der Zeichen - 1 hat.

Will man auf alle Zeichen in einem Array zugreifen hilft uns die for-Schleife. Als Index verwendet man die Zählvariable i.

Die Funktion void LCDlineout(char text[16], int line) ermöglicht die zeilenweise Ausgabe von Arrays unter Angabe der Zeichenkette und Zeilennummer (1 oder 2).

Für die Ausgabe von Variablen kann man die Funktion sprintf ( ) verwenden.

6 Zustandsautomaten 1
Cappuccino

Kaffemaschinen und viele andere Automaten werden mit einem Zustandsautomat (engl. finit state machine) programmiert. Hierfür wird ein Statechart in UML-Notation eingesetzt:
Statechart Der aktuelle Zustand (state) wird auf einer Variablen int actstate == 10; gespeichert.
Die Übergänge (transition) werden mit Bedingungen geprüft: if(actstate == 10 && S0 == 0).
Der jeweilige Zustand wird abgearbeitet: if(actstate == 10 && finished == 1)   L1 = 1;.

7 Zustandsautomaten 2
Auswahlmenue

Innerhalb eines Zustands kann es wiederum Unterzustände geben (substates). Bspw. bei der Zubereitung des Kaffees: mahlen, brühen, reinigen.

Zur Steuerung verwendet man häufig ein Auswahlmenü. Hierzu ändert man durch Tastendruck eine Variable und diese steuert dann die Anzeige:
if(SD == 1){
    if(state_menue==LATTE)    state_menue=LATTE;
    if(state_menue==CAPPU)    state_menue=LATTE;
    if(state_menue==KAFFEE)   state_menue=CAPPU;
    while(SD==1);//Tastendruck nur einmal zaehlen
 }



Aufgabe 1 LCD

LIME2 mit LCD

Das LCD wird getestet.

  1. Erstelle das Projekt 07 LCD und schreibe die Datei 07-LCD-1.c, in der du einen ersten Buchstaben auf dem LCD in Zeile 1 und 2 ausgibst.
  2. Ergänze die Datei 07-LCD-1.c nun so, dass der Text aus der Abbildung auf dem Display erscheint.
Quelltext für LCD-Ausgabe

Aufgabe 2 LCD mit Arrays programmieren

Arrays

Nun sollen Arrays zum Einsatz kommen.

  1. Programmiere die Ausgabe der beiden Arrays in Zeile 1 und 2. Schreibe hierzu die Datei 07-LCD-2.c.
  2. Programmiere dass beim Betätigen der Taste S0 die LED L1 an geht.
  3. Programmiere einen Merker mit 4 Stufen mit SU / SD und realisiere die Ausgabe des Merkerwertes merker am LCD.

Aufgabe 3 für Kreative : LCD mit Auswahlmenue

LCD Kaffeeautomat

Diese Aufgabe ist für kreative Menschen wie geschaffen.

  1. Programmiere in 07-LCD-3.cein Auswahlmenü für einen Kaffeeautomaten.
    Tipp: Du kannst auch die Programmierstruktur switch-case verwenden. Wie das funktioniert erfährst du im Internet oder in einem Buch.
  2. Programmiere in 07-LCD-4.c eine Laufschrift. So kannst du längere Texte anzeigen lassen.

Entspann dich erst mal ...

Folgenden Text habe ich mal entdeckt.

Der Text soll als Beweis für die überragende Leistung unseres Gehirns stehen.

Lies nach, wenn du kannst und überzeuge dich selbst.

D1353 M17731LUNG D13N7
4L5 B3W315 D4FU3R,
W45 FU3R 3R574UNL1CH3 D1NG3
UN53R V3R574ND L31573N K4NN.

B331NDRUCK3ND.
4M 4NF4NG W4R'5 5CH0N 5CHW3R,
4B3R J37Z7 L1357 35 D31N G3H1RN
5CH0N 4U70M4715CH. N1CH7 W4HR?
FR3U D1CH DRU3B3R.


© mylime.info