
Edit v5.001 from 2006-02-25 to 2021-11-17 by H. Schärfer
Das LCD
LCD steht als Abkürzung für "Liquid Crystal Display." Zu Deutsch eine Anzeige bestehend aus Flüssigkristallen die den Lichtdurchfluss steuern könne. Es hat sich bei diesen Anzeigen ein Industriestandard herausgebildet. D.h. jedes, welches sich an diesen hält, ist mit den gleichen Befehlen ansteuerbar, der Anschluss ist gleich, nur die Qualität der Anzeige und deren Darstellung variiert. Damit ist diese Art der Anzeige zurzeit eine der günstigen (Zeit für das Einarbeiten, Kosten für die Beschaffung, etc.) Varianten.
Software
Programm-Ablauf
Im Folgenden wird gezeigt in welcher Reihenfolge, wahllos oder geordnet, die Signal angelegt werden müssen. Dabei gibt es kein reines Lesen oder Schreiben, sondern beide, der MC und der LCD-Controller, teilen dem Andere etwas mit. Der Aktivere kennt das Protokoll und steuert damit die Kommunikation. Lesen und Schreiben wird hier als Datenfluß-Richtung der zu betrachtenden Daten verstanden.
Bsp.: Einlesen der aktuellen Cursor-Position im LCD!- Auslesen des Statutses des LCD, um zu erfahren ob dieses Bereit ist! Wenn JA dann weiter, wenn NEIN dann eine Zeit warten und wenn dann immer noch nicht, die Ausgabe abbrechen und z.Bsp. eine Fehlermeldung ausgeben.
- E=Enabel wird auf Low gelegt, damit das LCD nicht auf die sich verändernden Signale reagiert.
-
Als nächstes werden die Signale,
z.B. für das Lesen der aktuellen Cursor-Position,
in beliebiger Reihenfolge angelegt.
- R/W = Read/Write = Low für Schreiben des Befehles laut Protokoll;
- RS = Register Steer = High für Anmeldung eines Befehles;
- Datenbits 0 bis 7 die dem Befehlskode "Cursor-Position" entsprechen, anlegen;
- E=Enabel auf High, damit das LCD die anliegenden stabilen Signale übernimmt;
- Einen Taktzyklus des LCD's warten, dies ist i.d.R 10µs, da das LCD i.d.R einen Taktgenerator mit einer Frequenz von. ca. 100kHz hat;
- Als Letztes wird E=Enabel wieder auf Low gelegt, damit das LCD nicht auf die sich verändernden Signale reagiert.
- - - - - - - - - - - - - - - - - - - - - - - -
-
Als nächstes werden die Signale für das Lesen der durch den
LCD-Controller bereitgestellten Daten,
welche die aktuelle Cursor-Position enthalten,
in beliebiger Reihenfolge angelegt.
- R/W = Read/Write = High für Lesen;
- RS = Register Steer = Low für Anmeldung eines Nicht-Befehles;
- Datenbits 0 bis 7 hochohmig, da der LCD-Controller die Daten noch nicht gibt und der MC ließt;
- E=Enabel auf High, damit das LCD die anliegenden stabilen Signale übernimmt;
- Einen Taktzyklus des LCD's warten, dies ist i.d.R 10µs, da das LCD i.d.R einen Taktgenerator mit einer Frequenz von. ca. 100kHz hat;
- Die Daten durch den MC übernehmen;
- Als Letztes wird E=Enabel wieder auf Low gelegt, damit das LCD nicht auf die sich verändernden Signale reagiert.
Standard-Befehle
(/2???/ S. 436: Die 11 Befehle …)
Jedes LCD nach Industriestandard hat einen gemeinsamen Vorrat an Befehlen, die bei allen gleich lauten und funktionieren. 9 wirken auf die Befehls-SFR und 2 auf die Daten-SFR. Dazu kommen natürlich auch solche, welche speziell für das LCD entwickelt worden sind. Ist bei eine Bit-Position ein x als Wert angegeben, bedeutet dies, das der Wert nicht ausgewertet wird.
Befehl | Adressbus | Datenbus |
Bearbeitungs- zyklen a 40µs |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
R/W | RS | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | |||
Display Clear | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 40 | |
Cursor Home | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | x | 40 | |
Entry Mode Set | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 1 | |
Display ON/OFF Control | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | 1 | |
Cursor/Display Shift | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | x | x | 1 | |
Function Set | 0 | 0 | 0 | 0 | 1 | DL | N | F | x | x | 1 | |
CG RAM Address Set | 0 | 0 | 0 | 1 | CG RAM Adresse | 1 | ||||||
DD RAM Address Set | 0 | 0 | 1 | DD RAM Adresse | 1 | |||||||
BF/Address Read | 1 | 0 | BF | Adresszähler | 0 | |||||||
Data Write to CG or DD RAM | 0 | 1 | Datenbyte D7 - D0 | 1 | ||||||||
Data Read to CG or DD RAM | 1 | 1 | Datenbyte D7 - D0 | 1 |
Erläuterungen zu den verwendeten Begriffen:
- BF/Address Read
- Auslesen des BF (BUSY-Flags) um festzustellen ob der Controller des Displays bereit ist und der eingestellten RAM-Adresse, entweder des Display-Speichers (DD RAM) oder des Character-Speichers (CG RAM). Die Auswahl ist Teil des Befehls.
- CG RAM Address Set (CG = Character)
- Setzen der Adresse im Zeichenspeicher (8 Byte), in dem ein selbstdefiniertes Zeichen geschrieben bzw. ausgelesen werden soll.
- Cursor Home
- Cursor auf die Home-Position, Adresse 00H entspricht (Spalte 0, Zeile 0), setzen. Siehe dazu die Adress-Aufteilung des Displays.
- Cursor/Display Shift
- Bewegt sich der Cursors (S/C=0) oder wird das Display (S/C=1) geshiftet?
- Ist nun noch die Frage, nach rechts (R/L=1 oder linke (R/L=0), zu klären.
- Data Read from CG RAM or DD RAM
- Auslesen von Daten aus dem Character- oder aus dem Display-RAM.
- Data Write from CG RAM or DD RAM
- Einschreiben von Daten in das Character- oder in dem Display-RAM.
- DD RAM Address Set
- Einstellen der Adresse innerhalb des Display-Speichers, in dem ein darzustellendes Zeichen geschrieben oder aus dem ein vorhandenes ausgelesen werden soll. Im Anschluss folgt der eigentliche Lese- bzw. Schreib-Befehl.
- Display Clear
- Löschen des Displays durch
- Einschreiben von 020H (Leerzeichen) in den gesamten Display-Speicher und
- Setzen des Cursors auf die Home-Position (00H).
- Display ON/OFF Control
-
- Ein-/Ausschalten des Displays (D=1/0) um Energie zu sparen. Der Inhalt geht dabei nicht verloren!
- Cursor (C=1/0) ein-/ausschalten.
- Cursor-Blinken (B=1/0) ein-/ausschalten.
- Entry Mode Set
- Festlegung der Bewegungsart
- Cursor mit jedem Schreiben oder Lesen eines Zeichen nach rechts (I/D=1 d.h. Increment) oder nach links ((I/D=0 d.h. Decrement) bewegen;
-
Art und Weise des Shift im Display. Wenn S=0 wird nicht geshihftet.
Ist S=1 ist die Shiftrichtung nach links, wenn I/D=0, und nach rechts,
wenn I/D=1.
Beim PC gibt es etwas Ähnliches. Dort nennt man das nicht Shift sondern Rollen, wenn man die Taste <Rollen> betätigt.
- Function Set
- Einstellen der allgemeinen Betriebsart des Displays mit
- Datenbusbreite 4 (DL=0) oder 8 Bit (DL=1);
- Taktverhältnis (N=?) 1 Zeile ??? und
- Zeichengröße (F=?) 5*7 Dot's???.
Hardware
Das umfasst den Teil, der fest Verdrahtet und damit berührbar ist.
Anschluss-Belegung

am LCD in einer Reihe

am LCD in einer Reihe

der 14 Anschlusskontakte am LCD
PIN-Nr. | -2 | -1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bezeichnung | V+H | V-H | GND | VCC | VK | RS | R/W | E | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |

Flachbandkabel mit aufgelöteter
Steckerleiste verbunden

14poligen Wannensteckers
in der Draufsicht

14poligen IDC-Anschluss aufgepresst
Bezeichnung | Pin-Nr. | Bezeichnung | |
---|---|---|---|
VSS bzw. GND | 1 | 2 | VDD bzw. VCC |
VKontrast | 3 | 4 | RS |
R/W | 5 | 6 | E |
D0 | 7 | 8 | D1 |
D2 | 9 | 10 | D3 |
D4 | 11 | 12 | D5 |
D6 | 13 | 14 | D7 |
- D0 .… D7 = Datenbits 0 bis 7
- Pin's der Datenleitungen, in dem Fall ein Byte.
- E = Enabel
- Bei High nimmt das LCD am Datentransfer teil, bei Low reagiert es nicht.
- RS = Register Select um Speicher für die Steuerung auszuwählen
- RS=0, es werden Steuerzeichen gesendet. Diese werden in das Befehlsregister geladen. Macht aber nur Sinn, wenn in das LCD geschrieben (R/W = Low) wird!
- Bei RS=1 können Anzeigedaten ins LCD geschrieben bzw. aus dem LCD gelesen werden. Zum Beispiel die Position des Cursors.
- R/W = Read/Write
- High zum Lesen vom LCD und Low zum Schreiben in das LCD.
- V±Hintergrund bzw. V±H
- Die Spannungsdifferenz zum Betrieb der Hintergrund-Beleuchtung.
- VCC
- Betriebsspannung gegen Masse (GND) oder als Differenz zwischen VDD-VSS, i.d.R. +5V.
- VKontrast bzw. VK
-
Spannung zwischen Null und Betriebsspannung,
meist über ein Potentiometer mit 10kOhm bereitgestellt.
- Bei Null hat Schrift und Hintergrund auf dem LCD eine einheitliche Farbe und
- bei Betriebsspannung sind Schrift und Hintergrund in Komplementärfarben dargestellt.
Speicher-Aufteilung
(/2???/ S. 434: Kommen wir zur praktischen Ansteuerung ...)R/W | |||
---|---|---|---|
High | Low | ||
Daten lesen aus RAM | Data schreiben in RAM | High | RS |
Busy-Signal + aktuelle Adresse auslesen | Steuerzeichen zum LCD senden | Low |
- Read/Write und
- Register Select
Zeichen-Speicher
Adresse | 00H | 01H | 02H | 03H | 04H | 05H | 06H | 07H | - | 08H | 09H | 0AH | 0BH | 0CH | 0DH | 0EH | 0FH |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00H | ??? | ??? | ??? | - | |||||||||||||
10H | CG[1] | CG[2] | CG[3] | CG[4] | CG[5] | CG[6] | CG[7] | CG[8] | - | CG[1] | CG[2] | CG[3] | CG[4] | CG[5] | CG[6] | CG[7] | CG[8] |
20H | ! | " | # | $ | % | & | ' | - | ( | ) | * | + | , | - | . | / | |
30H | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | - | 8 | 9 | : | ; | < | = | > | ? |
40H | @ | A | … O | ||||||||||||||
... | ... | ... | |||||||||||||||
7FH | p | q | … |
Display-Speicher
Spalte/Zeile | S00 | … | S19 |
---|---|---|---|
Z1 | 00H | … | 13H |
Z2 | 40H | … | 53H |
Z3 | 14H | … | 27H |
Z4 | 54H | … | 67H |