Arduino - LCD

In deze Arduino LCD-tutorial leert u hoe u een LCD (Liquid Crystal Display) aansluit op de Arduino. LCD's zijn zeer populair en worden veel gebruikt in elektronische projecten om informatie weer te geven. Er zijn veel verschillende soorten LCD’s. Deze tutorial gebruikt de LCD 16x2 (16 kolommen en 2 rijen) als voorbeeld. Andere LCD’s werken vergelijkbaar.

※ Notiz:

Als u de bedrading wilt vereenvoudigen, kunt u in plaats daarvan een LCD I2C gebruiken. Zie LCD I2C tutorial

Over LCD 16x2

Pinout

LCD Pinout

Een LCD heeft tot wel 16 pinnen. Bij gebruik van het LCD gebruikt men meestal niet alle pinnen.

Met ondersteuning van de LiquidCrystal-bibliotheek kunt u zelfs een LCD gebruiken ZONDER dat u alle pinfuncties hoeft te kennen. Maar bent u nieuwsgierig of wilt u dieper begrijpen, dan volgt hier een overzicht van de pinnen en hun functies:

  • GND pin: moet verbonden worden met GND (0V).
  • VCC pin: voeding voor de LCD, moet verbonden worden met VCC (5V).
  • Vo (LCD Contrast) pin: regelt het contrast en de helderheid van het scherm, kan verbonden worden met 5V (hoogste contrast en helderheid), of met een potentiometer (voor instelbaar contrast en helderheid).
  • RS (Register Select) pin: Er zijn twee soorten data die naar de LCD gestuurd worden: commando’s (om LCD te besturen) en data (om te tonen). Deze worden over dezelfde databaan gestuurd. De RS pin vertelt de LCD of het commando’s of data zijn.
    • Voor het sturen van een commando zet u RS op LOW (bijvoorbeeld om de cursor te verplaatsen of het scherm te wissen).
    • Voor het sturen van data zet u RS op HIGH.
  • R/W (Read/Write) pin: om te kiezen tussen LEZEN of SCHRIJVEN.
    • Voor lezen van LCD zet u deze pin op HIGH.
    • Voor schrijven naar LCD zet u deze op LOW. Aangezien we LCD alleen als OUTPUT gebruiken, verbinden we deze pin aan GND (LOW).
  • EN (Enable) pin: zet LCD aan of uit. HIGH om te activeren, LOW om te deactiveren.
  • D0-D7 (Data Bus) pinnen: verzenden data en commando’s tussen Arduino en LCD. Er zijn twee modi om data te sturen: 4-bit en 8-bit modus.
  • A-K (Anode & Cathode) pinnen: voor de voeding van de achtergrondverlichting. A sluit u aan op VCC, K op GND.

4-bit modus en 8-bit modus

  • 8-bit modus: 8 bits worden tegelijk tegelijk verzonden via pin D0 t/m D7.
  • 4-bit modus: 8 bits worden in twee delen van elk 4 bits verzonden via pin D4 t/m D7.

8-bit modus is sneller dan 4-bit maar gebruikt meer pinnen. De modus wordt ingesteld tijdens initialisatie door een commando naar het LCD te sturen.

Deze tutorial gebruikt 4-bit modus, wat het meest gangbaar is.

In deze modus:

  • 6 pinnen (RS, EN, D4, D5, D6, D7) zijn verbonden met Arduino.
  • 4 pinnen (D0, D1, D2, D3) zijn NIET verbonden.
  • 6 overige pinnen zijn verbonden met GND, VCC of potentiometer.

LCD pinnen tabel in 4-bit modus

LCD PINAANGESLOTEN OP
01GNDGND
02VCC5V
03Vo5V of pin van potentiometer
04RSArduino pin
05R/WGND
06ENArduino pin
07D0Niet aangesloten
08D1Niet aangesloten
09D2Niet aangesloten
10D3Niet aangesloten
11D4Arduino pin
12D5Arduino pin
13D6Arduino pin
14D7Arduino pin
15A5V
16KGND

LCD Coördinaten

De LCD 16x2 heeft 16 kolommen en 2 rijen. Kolommen en rijen zijn genummerd vanaf 0.

Arduino LCD Coordinate

Hoe Werkt Het?

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.

Het proces van het sturen van data (om te tonen) naar het LCD:

  1. Arduino zet RS pin op HIGH (selecteert data-register)
  2. Arduino schrijft data naar pinnen D4 → D7 (databus).
  3. LCD ontvangt data op de databus.
  4. LCD slaat ontvangen data op in het data-register omdat RS HIGH is. Daarna toont het de data op het scherm.

Het proces van het sturen van commando’s (om LCD te besturen, bijvoorbeeld knipperen, cursor verplaatsen, scherm wissen):

  1. Arduino zet RS pin op LOW (selecteert commando-register)
  2. Arduino schrijft commando naar pinnen D4 → D7 (databus).
  3. LCD ontvangt commando op databus.
  4. LCD slaat het commando op in het commando-register omdat RS LOW is, en voert de actie uit.

Arduino - LCD

LCD-besturing is relatief complex. Gelukkig vereenvoudigt de LiquidCrystal bibliotheek dit proces zodat u niet de lage-niveau instructies hoeft te kennen. U hoeft enkel Arduino met de LCD te verbinden en de functies van de library te gebruiken. Het gebruik van het LCD is daardoor een fluitje van een cent.

Bedradingsschema

Arduino LCD Bedradingsschema

This image is created using Fritzing. Click to enlarge image

Hoe Programmeer Ik Het LCD?

  • Voeg de library toe:
#include <LiquidCrystal.h>
  • Definieer welke Arduino pin is verbonden met de zes LCD-pinnen: RS, EN, D4, D5, D6, D7
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;

Een voordeel van de library is dat u zelf kunt bepalen welke Arduino-pinnen aan het LCD gekoppeld zijn. Dit maakt het flexibel om Arduino aan LCD en andere sensoren/actuatoren te koppelen.

  • Maak een LiquidCrystal-object aan:
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
  • Stel het aantal kolommen en rijen in van het LCD:
lcd.begin(16, 2);
  • Zet de cursor op de gewenste positie (kolom_index, rij_index)
lcd.setCursor(column_index, row_index);
  • Print een bericht op het LCD:
lcd.print("Hello World!");

Er is nog veel meer mogelijk met het LCD (zie onderdeel Meer doen met LCD).

※ Notiz:

U kunt gerust andere zes Arduino-pinnen gebruiken om aan het LCD te koppelen, zolang u deze maar opgeeft in de Arduino-code.

Arduino Code

#include <LiquidCrystal.h> // LCD pinnen <--> Arduino pinnen const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); void setup() { lcd.begin(16, 2); // stel aantal kolommen en rijen in lcd.setCursor(0, 0); // zet cursor op (0, 0) lcd.print("Arduino"); // print bericht op (0, 0) lcd.setCursor(2, 1); // zet cursor op (2, 1) lcd.print("GetStarted.com"); // print bericht op (2, 1) } void loop() { }

Snelle stappen

  • Kopieer bovenstaande code en open het in de Arduino IDE
  • Klik op de Upload knop in Arduino IDE om de code naar Arduino te verzenden
  • Bekijk het resultaat op het LCD
Arduino toont tekst op LCD
  • Probeer de tekst en positie aan te passen

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Aangepast Karakter

De lcd.print() functie ondersteunt alleen ASCII-tekens. Wilt u een speciaal teken of symbool tonen (bijvoorbeeld een hartje of een Angry Bird), dan kunt u de onderstaande teken-generator gebruiken.

De LCD 16x2 kan 32 tekens tegelijk tonen (2 rijen en 16 kolommen). Elk teken bestaat uit 40 pixels (8 rijen en 5 kolommen).

Arduino LCD 16x2 Pixel

De teken-generator geeft een karakter weer (40 pixels). Volg hiervoor de volgende stappen:

Klik op elk pixel om aan of uit te zetten


Kopieer onderstaande code voor het aangepaste karakter
Vervang de customChar[8] in onderstaande code
#include <LiquidCrystal.h> // LCD pinnen <--> Arduino pinnen const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.begin(16, 2); // stel aantal kolommen en rijen in lcd.createChar(0, customChar); // maak nieuw aangepast karakter lcd.setCursor(2, 0); // cursor naar (2, 0) lcd.write((byte)0); // print aangepast karakter op (2, 0) } void loop() { }

Resultaat op LCD:

LCD aangepast karakter

Meerdere aangepaste karakters

We kunnen maximaal 8 aangepaste karakters maken (index 0 tot 7). Hieronder een voorbeeld met drie karakters.

#include <LiquidCrystal.h> // LCD pinnen <--> Arduino pinnen const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.begin(16, 2); // stel aantal kolommen en rijen in lcd.createChar(0, customChar0); // nieuw aangepast karakter (index 0) lcd.createChar(1, customChar1); // nieuw aangepast karakter (index 1) lcd.createChar(2, customChar2); // nieuw aangepast karakter (index 2) lcd.setCursor(2, 0); // cursor naar (2, 0) lcd.write((byte)0); // toon custom char 0 op (2, 0) lcd.setCursor(4, 0); // cursor naar (4, 0) lcd.write((byte)1); // toon custom char 1 op (4, 0) lcd.setCursor(6, 0); // cursor naar (6, 0) lcd.write((byte)2); // toon custom char 2 op (6, 0) } void loop() { }

Resultaat op LCD:

LCD meerdere aangepaste karakters

Samenvatting: hoe gebruik ik aangepaste karakters op LCD

  • Gebruik bovenstaande teken-generator om binaire code voor uw aangepaste karakter te maken.
  • Definieer de binaire code voor het aangepaste karakter (kopieer van de vorige stap)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Maak het aangepaste karakter aan en wijs een indexwaarde toe (0 tot 7) binnen de setup() functie
lcd.createChar(index, customChar);
  • Print het aangepaste karakter op het LCD waar u maar wilt (in setup() of loop() functie)
lcd.setCursor(column, row); // zet cursor op gewenste positie lcd.write((byte)index); // toon het aangepaste karakter op die positie

Daag uzelf uit

Gebruik het LCD om een van de volgende projecten te maken:

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!