
LCD ist die Abkürzung von Liquid Crystal Display.
Einfach gesagt besteht eine LCD-Anzeige meistens aus zwei Glasscheiben, dazwischen mit speziellen Flüssigkeitskristallen und dahinter leuchtet die Hintergrundbeleuchtung. Die Scheiben mit ihren Polfilter, können die schwimmenden Kristalle in der Ausrichtung so ausrichten, das das Hintergrundlicht entweder durchscheint oder abgedeckt wird.
Hier zwei Anschlussbeispiele für ein LCD-Display, das einmal direkt mit dem Arduino verbunden ist und als zweites Beispiel ein LCD-Display, das mit einer zusätzlichen I2C-Bus-Schnittstelle betrieben wird, dann aber wesentlich einfacher eingesetzt werden kann.
Erstes Beispiel
LCD direkt mit Entwicklungsboard verbinden
In diesem Fall wird eine LCD1602 mit 2 Zeilen und je 16 Zeichen verwendet. Von den 16 Anschlüssen müssen 12 Anschlüsse verdrahtet werden. Auch muss hier bei, auch noch die Hintergrundbeleuchtung mit einem Potentiometer geregelt werden.
Immer vorab das passende Datenblatt des Herstellers nach Gerätenamen, Typ, Funktion, Spannungsversorgung, Auflösung prüfen.

Hardware:
Arduino Uno
LCD1602 (2 Zeilen mit je 16 Zeichen) oder LCD2004 (4 Zeilen mit je 20 Zeichen)
Potentiometer 10 kΩ (Kilo Ohm)
Verdrahtung:
LCD Pin | Bezeichnung | Funktion | Arduino oder Poti | PIN |
---|---|---|---|---|
1 | VSS | Stromversorgung 0V | Arduino | Ground |
2 | VCC oder VDD | Stromversorgung 5V | Arduino | +5V |
3 | V0 | Stromversorgung LCD | Potentiometer | 2 |
4 | RS | Register Select: H:Dateneingang L:Befehlseingang | Arduino | 12 |
5 | R/W | H:Lesen L:Schreiben | Arduino | Ground |
6 | E | Enable Signal | Arduino | 11 |
7 | D(B)0 | Datenbus für 8 Bit Übertragung | Frei | |
8 | D(B)1 | Datenbus für 8 Bit Übertragung | Frei | |
9 | D(B)2 | Datenbus für 8 Bit Übertragung | Frei | |
10 | D(B)3 | Datenbus für 8 Bit Übertragung | Frei | |
11 | D(B)4 | Datenbus für 4 und 8 Bit Übertragung | Arduino | 5 |
12 | D(B)5 | Datenbus für 4 und 8 Bit Übertragung | Arduino | 4 |
13 | D(B)6 | Datenbus für 4 und 8 Bit Übertragung | Arduino | 3 |
14 | D(B)7 | Datenbus für 4 und 8 Bit Übertragung | Arduino | 2 |
15 | A oder LED+ | Hintergrundbeleuchtung | Arduino | +5V |
16 | K oder LED- | Hintergrundbeleuchtung | Arduino | Ground |
Poti Pin | Arduino oder LCD | |||
1 | Hintergrundbeleuchtung | Arduino | +5V | |
2 | Hintergrundbeleuchtung | LCD | V0 | |
3 | Hintergrundbeleuchtung | Arduino | Ground |

Passende Library / Bibliothek suchen und einbinden
- Gehe ins Sketch Menü.
- Drücke Bibliothek einbinden.
- Öffne Bibliotheken verwalten.
- Suche nach LiquidCrystal und installieren.
Quellcode: (Unter Beispiele / Liquid Crystal / zB. HelloWorld)

Das oben im Bild verwendete Skript:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // (20,4) Sollte bei einem LCD mit 4 Zeilen und je 20 Zeichen zum Einsatz kommen
lcd.setCursor(0, 0); //1. Wert 0 = Cursor Position 1, 2. Wert 0 = Zeile 1
lcd.print("Prilchen.de");
}
void loop() {
lcd.setCursor(0, 1); //1. Wert = Cursor Position, 2. Wert = Zeile 2
lcd.print(millis() / 1000); //Schreibe Sekunden in 2.Zeile
}
Im Sketch angeben welche LCD-Variante verwendet wird:
– lcd.begin(16, 2); = LCD mit 2 Zeilen und je 16 Zeichen
oder
– lcd.begin(20, 4); = LCD mit 4 Zeilen und je 20 Zeichen
Zweites Beispiel:
LCD mit I2C Schnittstelle
Mit einem LCD, das entweder mit einem I2C Adapter HW-061 nachgerüstet oder direkt mit der I2C Schnittstelle gekauft wurde, ist die Verdrahtung mit nur 4 Anschlüssen deutlich einfacher. Auch der Regler (blauer Poti) für die Hintergrundbeleuchtung ist mit an Board.

Nachrüsten mit einem I2C Adapter oder LCD direkt mit Adapter Platine

Verdrahtung:
Die Verdrahtung ist deutlich einfacher.
LCD VCC = 5V
LCD GND = Ground
LCD SDA = A4 oder SDA
LCD SCL = A5 oder SCL

Library:
Hier in der Bibliotheksverwaltung aber nach einer neuen Library mit dem Namen LiquidCrystal i2c suchen.

Beispiel-Script aus der Library.:
Diese benötigt noch die I2C Adresse des Display. Standard ist 0x27.
Wer Standard I2C Modul Adresse sucht, diese sind bei https://i2cdevices.org zu finden.
Hier einfach nach HW-061 suchen und im Sketch einfügen.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Adresse ist 0x27 für 16 Zeichen und 2 Zeilen display
void setup()
{
lcd.init(); // initialisiere lcd
lcd.backlight();
lcd.setCursor(2,0); //Erste Zeile und 2 Zeichen freilassen
lcd.print("Gesehen auf");
lcd.setCursor(2,1); //Zweite Zeile und 2 Zeichen freilassen
lcd.print("Prilchen.de");
}
void loop()
{
//hier steht nichts
}
Ausgabe des Text auf dem Display

Drittes Beispiel:
Laufschrift im LCD Display:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD mit I2C-Adresse 0x27
void setup() {
lcd.init(); // LCD initialisieren
lcd.backlight(); // Hintergrundbeleuchtung einschalten
}
void loop() {
const char* text = " Prilchen.de "; // Das Wort "Prilchen" beginnt mit Leerzeichen
int textLength = 16; // Länge des Displays (16 Spalten)
// Fließender Effekt: Charakterweise Scrollen von links nach rechts
for (int offset = textLength; offset > 0; offset--) {
lcd.clear();
// Zeichne den Text mit einem Offset
for (int i = 0; i < 16; i++) {
int charIndex = (i + offset) % textLength; // rennt nach rechts
lcd.setCursor(i, 1); // Setze Cursor-Spalte
lcd.print(text[charIndex]); // Drucke den entsprechenden Buchstaben
}
lcd.setCursor(2, 0); // Setze Cursor-Spalte
lcd.print("Gesehen auf "); // Drucke Text
delay(500); // Geschwindigkeit der Laufschrift anpassen
}
}
Wenn I2C-Adresse unbekannt:
Der Arduino kann aber auch alternativ nach der I2C Adresse scannen.
Kleines Sketch um die I2C Adresse zu finden:
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Scanner gibt im Seriellen Monitor dann Auskunft:
