A kijelző minden gép szükséges része, legyen szó háztartási gépekről vagy ipari gépekről. A kijelző nem csak a gép működtetésének vezérlési lehetőségeit mutatja, hanem az adott gép által végrehajtott feladat állapotát és kimenetét is. Az elektronikában sokféle kijelző található, például 7 szegmenses kijelző, 16x2 LCD kijelző, TFT érintőképernyős kijelző, OLED kijelző stb.
A 16x2 LCD kijelző a legalapvetőbb megjelenítő modul, és néhány apró elektronikai berendezésben, például számológépben, digitális mérőben stb. Is használják. Sok projektet hajtottunk végre a 16x2 LCD használatával, beleértve az alapvető interfészt más mikrovezérlőkkel:
- LCD interfész a 8051 mikrokontrollerrel
- Összekötő LCD és ATmega32 mikrovezérlő
- LCD interfész a PIC mikrovezérlővel
- Összekötő 16x2 LCD és Arduino
- 16x2 LCD interfész a Raspberry Pi-vel Python használatával
Ebben az oktatóanyagban megtudhatjuk, hogyan lehet összekapcsolni egy 16x2-es LCD-t az Atmega16 AVR mikrovezérlővel, és hogyan lehet megjeleníteni egy egyszerű üdvözlő üzenetet.
Szükséges alkatrészek
- Atmega16
- 16x2 LCD modul
- Ugrók
- Kenyérlemez
Kördiagramm
Atmega16 programozása 16x2 LCD kijelzőhöz
A programozáshoz nincs szükség külső könyvtárakra. Itt az Atmega16 programozható az USBASP és az Atmel Studio7.0 használatával. A teljes program és a működő videó a projekt végén található, csak töltse fel a programot az Atmega16-ba, és forgassa el a 10k POT-ot az LCD fényerejének beállításához.Kezdetben adja meg a CPU frekvenciáját, és tartalmazza az Atmel Studio Package-hez tartozó szükséges könyvtárakat, például az IO csapok és
Határozza meg az LCD RS és EN tűjét a programban. Az RS Pins segítségével kiválasztható az adat- és parancsregiszter. Az engedélyező tű reteszeli az adatokat.
#define en PA3 #define rs PA2
Adja meg azt is, hogy az Atmega16 melyik portját fogja használni az LCD interfészhez. Itt a PORTA-t használják.
#define lcdDirection DDRA #define lcdPort PORTA
A következő lépés egy olyan függvény létrehozása, amely egy paraméter átadásával fogadja el a parancsot. Sok LCD HEX parancs létezik. A Hex parancsokat az LCD funkciójának meghatározására használják. Mivel az LCD 4 bites módját használjuk, a bájt (8 bites) két csomagban kerül elküldésre. Az egyik csomag Upper Nibble (4-bites), a többi csomag pedig Lower Nibble (4-bit) lesz.
void lcdCommand (aláíratlan karakterparancsok) { lcdPort = (lcdPort & 0x0F) - (parancsok & 0xF0); lcdPort & = ~ (1 <
A következő lépés a karakterek elfogadása és rögzítése az LCD portjához. A beérkezett karaktereket ezután az LCD nibble-re küldi. A Funkció átveszi a karaktert a pass by paraméter segítségével , majd felveszi a felső és az alsó rágcsálást. Az 'rs' tű magasra van állítva az adatregiszter számára, majd növekvő impulzust küld az adatok reteszeléséhez. Hasonlóképpen, az alsó csattanás az engedélyezés értékének megváltoztatásával és az emelkedő impulzus beküldésével küldhető.
void lcdChar (aláíratlan karakterlánc) { lcdPort = (lcdPort & 0x0F) - (karakterlánc & 0xF0); lcdPort - = (1 <
Ez a függvény csak átalakítja a karaktert karakterláncokká, és később felhasználható a programban, ahol írási karakterláncra van szükség.
void lcdString (char * str) { int j; mert (j = 0; str! = 0; j ++) { lcdChar (str); } }
Most egy funkciót írnak csak a képernyő törléséhez. Csak el kell küldenie a 01 parancsot HEX-ben, majd a kurzort csak ki kell állítani kezdeti helyzetbe.
void lcdClear () { lcdCommand (0x01); _ késedelem_ms (2); lcdCommand (0x80); }
Most a fő funkcióban az LCD inicializálódik. Kezdetben állítsa be az LCD interfész PORT irányát. Itt a PORT OUTPUT értékre van állítva, így állítsa be az FF értéket.
lcdDirection = 0xFF; _delay_ms (20)
Ezután állítsa az LCD-t 4 bites üzemmódba úgy, hogy hexadecimálisan elküldi a 02-et. Küldjön 28-at hexán is, hogy beállítsa a 2 soros, 15x7-es mátrix pixeleket 4-bites módban.
lcdCommand (0x02); lcdCommand (0x28);
A 0c és 06 parancs a kurzor pozíciójának vezérlésére szolgál. És végül csak törölje a képernyőt úgy, hogy 01-et küld hexán. Ezzel befejeződik az LCD inicializálása.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Az inicializálás befejezése után tesztelje az LCD-t egy karakterlánc küldésével. Itt küldünk egy String „ Interfész LCD ” a 1 st sor.
lcdString ("Interfacing LCD");
Ezután vigye a kurzort a következő sorba a c0 parancs hexadecimális elküldésével. És végül erre a pozícióra írja be az " Atmega1 6" karakterláncot.
lcdCommand (0xC0); lcdString ("Atmega16-tal");
Ezzel befejeződött a teljes oktatóanyag a 16x2 LCD-készülék összekapcsolásáról az Atmega16-tal. Ne feledje, hogy ha nem kap képet vagy képpontot, akkor ellenőrizze a vezetékeket a kód és az áramköri ábra szerint, vagy módosítsa a POT értékét, amely az LCD V0 tűjéhez csatlakozik. Ha bármilyen kétsége van vagy javaslata van, akkor kapcsolatba léphet velünk a fórumunkba írva vagy az alábbi megjegyzéssel.