1602 LCD kijelző (2 sor 16 karakter)

A kereskedelemben igen sokféle LCD kijelző kapható. Egy kezdőnek a legegyszerűbb és legolcsóbb a 2 soros soronként 16 karakteres kijelző használata. A kijelző ára 500Ft környékén mozog, így nem nagy beruházás. Gyengén látóknak (mint jómagam) szükség lehet nagyobb karakterméretű de teljesen azonos működésű típusra. A Chipcad-nél találtam 3000Ft környékén ilyen kijelzőt, ennek mérete óriási, messziről olvasható!
A kijelzőnek igen sok kivezetése van, így az Arduino Uno R3 sok kivezetését elhasználja. Szerencsére kapható hozzá egy kiegészítő áramkör kb. 300Ft értékben, ami I2C buszra illeszti a kijelzőt, így összesen csak 2 kivezetést kell elhasználnunk. Az I2C busz már “gyárilag beépítésre került az Az Arduino Uno R3-ba (illetve az ATmega chipekbe), így azt szinte azonnal használatba vehetjük.

Így nézhet ki az Arduino és az I2C illesztővel egybeépített LCD kijelző hardveres összekötése:

Az LCD-re az I2C illesztő egységet simán csak rá kell dugni a gyárilag előre kialakított furatokra, és beforrasztani. Ehhez persze kell egy kis forrasztási tapasztalat, de nem nagy ördöngösség. Valahogy így néz ki a két panel összeforrasztva a szemben álló lukakat és tüskéket:

Ha nem szeretnél forrasztani, akkor olyan LCD kijelzőt keress, amit már eleve összeépítetek és beforrasztotották az I2C illesztő áramkört az LCD kijelző modullra.
Akár készen megvettük, akár megforrasztottuk, így már készen állunk arra, hogy programot írjunk a kipróbálásra.

Az interneten számtalan program könyvtár található annak érdekében, hogy ne kelljen sokat programoznunk, és kényelmesen használhassuk a kijelzőnket. A legegyszerűbb módszer egy ilyen programcsomag beszerzésére, ha elindítjuk az Arduino IDE programot és a könyvtár kezelés menüpontban keresünk egyet:

Ha ezzel megvagyunk, lehet az LCD kijelzőt használni a programunkból. A kapott programok használatához segítséget kapunk. Találunk számos mintapéldát, amiből megfejthető a működés:

Lehet nézegetni, de néhány alapvető infót megadnék.

A programban meg kell adnunk az I2C buszon az eszköz címét. Ez alapértelmezetten 0x27. Ha azonban több kijelzőt is szeretnénk egyszerre csatlakoztatni, szükséges az egyes kijelzők (illetve a kijelzőket illesztő I2C panel) címeinek megkülönböztetésére. Ehhez az illesztő áramkör címeit három db rövidzár beforrasztásával, vagy éppen a forrasztás leszedésével tudjuk változtatni. A képen láthatók a panelen kialakított rövidzárak, mellette pedig a táblázat, hogy mely címekhez mely rövidzárat kell használni a háromból:

A0A1A2HEX Address
1110x27
0110x26
1010x25
0010x24
1100x23
0100x22
1000x21
0000x20

A megjelenő karakterek ASCII kódjaihoz itt egy jól használható táblázat:

Ha az adott karakter ASCII kódjára vagy kíváncsi, az oszlop legfelső karakterének kódja az oszlop feletti szám, ettől kezdve számolj lefelé a neked szükséges karakterig soronként!
Íme egy felkommentezett mintaprogram. Az utasítások a kommentekkel együtt remélhetőleg érthetők lesznek. Két előre megírt program gyűjteményt kell a fordítónak megadnunk, amit majd a fordító programunkhoz fog adni. Ezek a függvény könyvtárak az #include <> utasítással kerülnek beillesztésre.

#include <Wire.h>                              //I2C library
#include <LiquidCrystal_I2C.h>        //I2C LCD kezelő könyvtár
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //LCD paraméterek megadása
void setup() 
{
  lcd.begin(16,2);                     //LCD inicializálása
  lcd.backlight();                       //háttérvilágítás bekapcsolása
  lcd.setCursor(0,0);                 //LCD kurzor a 1. sor 1. karakter pozícióba
  lcd.print("Hello!");                 //Hello felirat a kurzortól kezdve
  lcd.setCursor(5,1);                 //LCD kurzor a 2. sor 6. karakter pozicióba
  lcd.print("Szia!");                  //Szia felirat a kurzortól kezdve
  delay(3000);                          //3 másodperc várakozás
  lcd.clear();                             //kijelző törlése
   for (byte i=0; i<16; i++) {
    lcd.setCursor(i,1);                //LCD kurzor a 2. sor i. pozicióba
    lcd.print("#");                    //a kurzor pozicióba egy "#"-jel beírása
    delay(100);
  }
  for (byte i=0; i<16; i++) {
    lcd.setCursor(i,1);                //LCD kurzor a 2. sor i. pozicióba
    lcd.print(" ");                       //a kurzor pozició karakterének letörlése egy szóközzel.
    delay(100);
  }
  //egyéb kijelző kezelő függvények bemutatása 
  //háttérvilágítás ki és bekapcsolása
  lcd.clear();lcd.println("Hatter vilagitas");lcd.setCursor(0,1);lcd.print("kikapcsolas");
  delay(3000);lcd.noBacklight();delay(3000);lcd.backlight();delay(3000);
  //Cursor pozició villogtatása sötét hátérrel.
  lcd.clear();lcd.print("Blink funkcio"); lcd.blink(); delay(3000);lcd.noBlink();
  //Bekapcsoljuk a blink funkciót és a szöveg kiírását követően balra mozdítjuk a kurzort
  lcd.clear();lcd.blink();lcd.print("Cursor balra");delay(3000);lcd.moveCursorLeft();delay(3000);lcd.noBlink();
  //Bekapcsoljuk a blink funkciót és a szöveg kiírását követően jobbra mozdítjuk a kurzort
  lcd.clear();lcd.blink();lcd.print("Cursor jobbra");delay(3000);lcd.moveCursorRight();delay(3000);lcd.noBlink();
  //szöveg kiírást követően bekapcsoljuk a kurzort, majd kis idő mulva kikapcsoljuk
  lcd.clear();lcd.print("Cursor on");delay(3000);lcd.cursor();delay(3000);
  lcd.clear();lcd.print("Cursor off");delay(3000);lcd.noCursor();delay(3000);
  //kikapcsoljuk a display-t. A vikágítás marad, de szövegek nem láthatóak, azonban a tartalom nem törlődik, bekapcsoláskor ujra láthatóvá válik
  lcd.clear();lcd.print("Disp. ki es be!");lcd.setCursor(0,1);lcd.print("Vilagitas marad!");delay(3000);
  lcd.noDisplay();delay(3000);lcd.display();delay(3000);
  //kikapcsoljuk a display-t. Teljes kikapcsiolás, a világítás is lekapcsolódik. A tartalmat azonban nem felejti el, visszakapcsoláskor ujra láthatóvá válik az előzőleg kiírt szöveg
  lcd.clear();delay(3000);lcd.print("Disp. teljes ki");lcd.setCursor(0,1);lcd.print("es bakapcsolasa");delay(3000);
  lcd.off();delay(3000);lcd.on();delay(3000);
  //A kiírt szöveget balra mozdítjuk egy pozicióval
  lcd.clear();lcd.print(" Scroll balra");delay(3000);lcd.scrollDisplayLeft();delay(3000);
  //A kiírt szöveget jobbra mozditjuk egy pozicióval
  lcd.clear();lcd.print("Scroll jobbra");delay(3000);lcd.scrollDisplayRight();delay(3000);
  //kiírjuk az "Autoscroll:" szöveget és bekapcsoljuk az autoscroll funkciót. Kiírunk 10 számot,
  //és az eredetileg kiírt szöveg balra tolódik egy egy pozicióval a számok kiírásakor
  lcd.clear();  lcd.print("Autoscroll:");delay(3000);
  lcd.autoscroll();for (int i=0; i<10; i++) {lcd.print(i);delay(200);}lcd.noAutoscroll();
  //bekapcsoljuk a jobbra írás funkciót, és a write függvénnyel kiírunk egy szöveget
  lcd.clear();lcd.leftToRight(); lcd.write("Jobbra irt szov.");delay(3000);
  //balra írás mód
  lcd.clear();lcd.setCursor(15,0);lcd.rightToLeft();lcd.write("Balra irt szoveg");delay(3000);lcd.leftToRight();
  //Magyar éklezetes kisbetűk használata
  //ékezetes betűk karakterképének definiciója tömbökben. Csak nyolc saját karakterünk lehet, ebből 7-et kell felhasználnunk
  byte aI_t[8] = {B10,B100,B1110,B1,B1111,B10001,B1111};             //á betű karakterképe
  byte eI_t[8] = {B10,B100,B1110,B10001,B11111,B10000,B1110};   //é betű karakterképe
  byte iI_t[8] = {B10,B100,B0,B1110,B100,B100,B1110};                     //í betű karekterképe
  byte oI_t[8] = {B10,B100,B0,B1110,B10001,B10001,B1110};            //ó betű karakterképe
  byte uI_t[8] = {B10,B100,B10001,B10001,B10001,B10011,B1101}; //ú betű karakterképe
  byte oII_t[8] = {B00101,B01010,B0,B1110,B10001,B10001,B1110};    //ő betű karakterképe
  byte uII_t[8] = {B00101,B01010,B0,B10001,B10001,B10011,B1101};  //ű betű karakterképe
  //Az ö 239, az ü 245 ascii kódon megtalálható akarakterek között, azt nem kell definiálni
  //saját kerakterek betöltése a kijelző memóriájába
  lcd.createChar(0, aI_t);lcd.createChar(1, eI_t);lcd.createChar(2, iI_t);lcd.createChar(3, oI_t);
  lcd.createChar(4, uI_t);lcd.createChar(5, oII_t);lcd.createChar(6, uII_t);
  //Csak azért, hogy könnyebb legyen az ékezetes karaktereket kiírni, beszédesebb nevű változókba
  //töltöm azt a kódot, amit a kijelzőnek kell küldeni a karakter megjelenítéséhez
  byte aI=0;byte eI=1;byte iI=2;byte oI=3;byte uI=4;byte ooo=239;byte uoo=245;byte oII=5;byte uII=6;
  lcd.clear();
  //ékezetes karakterek kiírása a kijelzőre
  lcd.write(eI);lcd.print("kezetes bet");lcd.write(uII);lcd.print("k:");
  lcd.setCursor(7,1);
  lcd.write(aI);lcd.write(eI);lcd.write(iI);lcd.write(oI);lcd.write(uI);lcd.write(239);
  lcd.write(245);lcd.write(oII);lcd.write(uII);
}
void loop()
{
}

Ha esetleg valakinek egy 4 sor 20 karakteres kijelzőt sikerülne beszerezni, annak gondolnia kell arra, hogy a kijelző I2C címe 3F, így a programban ezt kell írni a harmadik sorba:
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Egyébként a 4 soros kijelző minden gond és változtatás nélkül működik, csak több infó fér el rajta. Kicsit drágább is, h jól emlékszem 1200Ft körül lehet beszerezni.


Két kijelző használata:

Nincs pillanatnyilag két kijelzőm, ezért az alábbi programot nem próbáltam ki. Azonban más moduloknál mindig jól működött.
Szerintem első lépésben külön címet kell beforrasztani a kijelzőkön, és a programban a következőket kell írni:

#include <Wire.h>                              //I2C library
#include <LiquidCrystal_I2C.h>        //I2C LCD kezelő könyvtár
LiquidCrystal_I2C lcd1(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //egyik LCD paramétereinek megadása
LiquidCrystal_I2C lcd2(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //másik LCD paramétereinek megadása



Itt talán látható, hogy más-más változó nevet adtam a két kijelzőnek. Így már külön-külön lehet rájuk hivatkozni a programban. pl.:

 lcd1.begin(16,2);                   //LCD1 inicializálása
  lcd1.backlight();                     //háttérvilágítás bekapcsolása
  lcd1.setCursor(0,0);               //LCD1 kurzor a 1. sor 1. karakter pozícióba
  lcd1.print("Hello!");               //Hello felirat a kurzortól kezdve

  lcd2.begin(16,2);                   //LCD2 inicializálása
  lcd2.backlight();                     //háttérvilágítás bekapcsolása
  lcd2.setCursor(0,0);               //LCD2 kurzor a 1. sor 1. karakter pozícióba
  lcd2.print("Hello!");               //Hello felirat a kurzortól kezdve



 Ha valaki kipróbálta, jelezzen vissza, hogy működik-e?

Mennyire volt hasznos amit olvastál?

Kattints egy csillagra az értékeléshez!

Sajnálom, hogy amit olvastál nem volt hasznos számodra!

Szeretném ha elégedett lennél!

Írd le kérlek, hogy mi nem tetszett!?