- 16x2 LCD kijelző működése
- Áramkör diagram az interfész LCD-hez STM8 mikrovezérlővel
- STM8 LCD könyvtár - Fejlécfájl az STM8S103F3P6 számára
- LCD program az STM8S mikrovezérlőhöz
- STM8 LCD-vel - működik
A 16x2-es alfanumerikus LCD-kijelző a leggyakrabban használt kijelző a hobbisták és a rajongók körében. A kijelző nagyon hasznos, ha az alapvető információkat meg akarja jeleníteni a felhasználó számára, és segíthet a kódunk tesztelésében vagy hibakeresésében is. Ez a bizonyos 16x2-es LCD modul könnyen elérhető, és már régóta népszerű. A linkelt cikkben többet megtudhat a 16x2 LCD modul alapjairól.
Az STM8 mikrokontroller oktatósorozatának folytatásához ebben az oktatóanyagban megtanuljuk, hogyan kell egy LCD-t összekapcsolni az STM8 mikrokontrollerrel. Korábban már összekapcsoltuk a 16x2 LCD-t sok más mikrovezérlővel is, az oktatóanyagok az alábbiakban vannak felsorolva, és ha érdekli, ellenőrizheti őket.
Ha még nem ismeri az STM8 alkalmazást, olvassa el az STM8 mikrokontroller használatának kezdő lépéseit, hogy megismerje a vezérlőpanel és a programozási környezet alapjait. Ebben az oktatóanyagban nem foglalkozunk az alapokkal.
16x2 LCD kijelző működése
Ahogy a neve is mutatja, egy 16x2-es LCD-n 16 oszlop és 2 sor lesz. Összesen tehát 32 karaktert tudunk megjeleníteni ezen a kijelzőn, és ezek a karakterek lehetnek ábécé vagy számok, vagy akár szimbólumok is. Az alábbiakban bemutatunk egy egyszerű, 16x2-es LCD tűt, amelyet ebben az oktatóanyagban használunk-
Amint láthatja, a kijelzőnek 16 érintkezője van, és öt kategóriába oszthatjuk: tápegységek, kontraszt tű, vezérlő csapok, adat csapok és háttérvilágítás csapok az alábbi táblázat szerint. Az egyes csapok részleteibe belemerülünk, amikor megvitatjuk a bemutató kapcsolási rajzát.
Kategória | PIN NO. | PIN neve | Funkció |
Power Pins | 1 | VSS | Földelőcsap, csatlakozik a Földhöz |
2 | VDD vagy Vcc | Feszültségcsap + 5V | |
Kontraszt tű | 3 | V0 vagy VEE | Kontraszt beállítása, változó ellenállással csatlakozik a Vcc-hez. |
Control Pins | 4 | RS | Regisztráció Válassza ki a PIN, RS = 0 parancs módot, RS = 1 adat módot |
5. | RW | Olvasási / írási tű, RW = 0 írási mód, RW = 1 olvasási mód | |
6. | E | Engedélyezés, nagy vagy alacsony impulzus szükséges az LCD engedélyezéséhez | |
Data Pins | 7-14 | D0-D7 | Adatcsapok, tárolja az LCD-n megjelenítendő adatokat vagy a parancs utasításait |
Háttérvilágítási csapok | 15 | LED + vagy A | A háttérvilágítás + 5V bekapcsolására |
16. | LED vagy K | Háttérvilágítás földje |
Az LCD hátoldalán, az alábbi képen látható módon, két fekete pont található, amelyeken belül van a HD44780 LCD meghajtó IC (pirossal körülvéve). Mikrovezérlőnknek kommunikálnia kell ezzel az IC-vel, amely viszont irányítani fogja, hogy mi jelenjen meg az LCD-n. Ha kíváncsi arra, hogy mindez pontosan hogyan működik, ellenőrizze a 16x2-es LCD kijelző működését, ahol már részletesen megvitattuk az LCD működését.
Ebben az oktatóanyagban megvitatjuk az áramkört és a kódot, amely alphamerikus karaktereket (ábécéket és számokat) jelenít meg egy 16x2-es LCD kijelzőn, egyszerű LCD_print _char és LCD_print_string parancsokkal. Ezeket a parancsokat közvetlenül fel lehet használni a programban, miután a fejléc fájlunkat belefoglaltuk. A fejlécfájl az Ön legtöbb dolgával foglalkozik, így nem kötelező tudni, hogy a kijelző vagy a HD44780 meghajtó IC hogyan működik.
Áramkör diagram az interfész LCD-hez STM8 mikrovezérlővel
A teljes STM8 LCD áramkör az alábbi képen található. Amint láthatja az STM8S103F3P6 vezérlő csatlakoztatását LCD-vel, nagyon egyszerű, az LCD-kijelzőt közvetlenül csatlakoztatjuk a táblánkhoz, és az ST-link is csatlakozik a kártya programozásához.
A Vss és Vcc tápkábelek az STM8S kártya 5V-os csatlakozójához vannak csatlakoztatva, vegye figyelembe, hogy az LCD működési feszültsége 5V és 3,3V-on működik. Tehát annak ellenére, hogy az STM8S103F3P6 mikrovezérlő 3,3 V-on működik, kötelező az 5 V-os tápfeszültség az LCD-hez, ezt elkerülheti egy töltésvezérlő IC használatával, de ebben az útmutatóban nem fogunk erről beszélni.
Ezután megvan a kontrasztcsap, amely az LCD kontrasztjának beállítására szolgál, és csatlakoztattuk a potenciométerhez, hogy szabályozni tudjuk a kontrasztot. 10k potot használtunk, de használhat más közeli értékeket is, az edény potenciálelosztóként működik, hogy 0-5 V-ot szolgáltasson a kontrasztcsapra, általában egy ellenállást is használhat, hogy 2,2 V körüli teljesítményt biztosítson az ésszerű kontraszt érdekében érték. Ezután megvan a reset (RS), az Read / Write (RW) és az Enable (E) csapok. Az író-író tű földelt, mert nem olvasunk semmit az LCD-ről, csak írási műveleteket fogunk végrehajtani. A másik két Rs és E vezérlőcsap a PA1 és PA2 csapokhoz van csatlakoztatva.
Ezután megkapjuk a DB0 – DB7 adatcsapokat. A 16x2 LCD kétféle módban működhet, az egyik egy 8 bites üzemmód, ahol az LCD-n mind a 8 adatcsapot (DB0-DB7) kell használnunk, a másik pedig a 4 bites üzemmód, ahol csak 4-re van szükségünk adatcsapok (DB4-DB7). A 4 bites módot általában azért használják, mert kevesebb GPIO csapot igényel a vezérlőtől, ezért ebben az oktatóanyagban 4 bites módot is használtunk, és csak a DB4, DB5, DB6 és DB7 csapokat csatlakoztattuk a PD1, PD2, PD3 csapokhoz és PD4.
Az utolsó két BLA és BLK csapot használják a belső háttérvilágítás LED-jének táplálására, áramkorlátozó ellenállóként 560 ohmos ellenállást használtunk. Az ST-Link programozó csatlakozik, mint mindig, mint az előző bemutatónkban. Hoztam létre a teljes kapcsolatot a kenyérlapon, és a beállításom így néz ki, mint az alábbi képen látható.
STM8 LCD könyvtár - Fejlécfájl az STM8S103F3P6 számára
Mielőtt folytatnánk a kapcsolási rajzot, szerezzük be az STM8 LCD fejlécfájlt a GitHub-tól a következő link használatával-
STM8S 16x2 LCD fejlécfájl
Vagy letöltheti a teljes repót, és megszerezheti az stm8s103_LCD_16x2.h fájlt, vagy egyszerűsítheti a kódot a fenti linkről. A projekt beállítása közben győződjön meg arról, hogy az összes szükséges fejlécfájlt felvette az inc könyvtárba, ezzel a fejlécfájlral együtt.
Ha nem biztos abban, hogyan kell hozzáadni a fejlécfájlokat és lefordítani a programot, kövesse az oldal alján található videót. És ha kíváncsi arra, hogyan működik a fejlécfájlban lévő kód, akkor megnézheti a PIC-t egy LCD oktatóanyaggal. A projektben használt fejlécfájl nagyon hasonlít az ott kifejtettekhez, ezért ennek részleteit nem fogjuk részletezni.
LCD program az STM8S mikrovezérlőhöz
A bemutatóhoz az STM8S vezérlőnket úgy programozzuk meg, hogy megjelenítsen egy egyszerű karakterláncot, mint például az „Circuit Digest”, majd a második sorban minden másodpercenként növeljük a „Test” értéket. A teljes program az oldal alján található. A magyarázat a következő.
A programunkat a csapok definiálásával és a szükséges fejlécfájlok hozzáadásával kezdjük, mint mindig. A fent tárgyalt kapcsolási rajzunkon az LCD_RS- t csatlakoztattuk a PA1-hez, így azt LCD_RS GPIOA, GPIO_PIN_1 néven definiáltuk. Hasonlóképpen, ugyanezt tettük más csapok esetében is. Ha más áramkört követnek, akkor mindenképpen változtassa meg ezeket az értékeket.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD "GPmi_ GP__BIN_ GP_4_P_DIN4 # GP_P_DIN4 # STB_DIN4 # STB_DIN4 # STEFIN_DIN4 # STEADD # LC7
Ezután a fő programunkon belül deklaráltuk az ehhez a mintakódhoz szükséges változókat. Van egy teszt_var nevű tesztváltozó, amelyet nullára inicializálunk, növeljük a változót és megjelenítjük az LCD-n. A d1 - d4 karakterek a tesztváltozó 4 számjegyét jelentik, mivel az LCD-nk nem tudja közvetlenül megjeleníteni az int értéket, ezeket karakterekké kell konvertálnunk.
// Változó deklarációk int test_var = 0; char d4, d3, d2, d1;
Az LCD_Begin () függvény az LCD inicializálására szolgál. Ez a funkció inicializálja az összes szükséges GPIO tűt, és az LCD-t is 16x2 LCD módba állítja. Ezután megvan az LCD_Clear () függvény, amelyet az LCD-n lévő összes érték törléséhez használunk, ez mindent töröl az LCD-ről, így tiszta lehet új értékeket írni. Ezután megvan az LCD_Set_Cursor (x, y) függvény, ahol x és y azok a pozíciók, amelyekre meg kell írnunk az új karakterünket. Például az (1,1) az első sort és az első oszlopot jelenti, hasonlóan (a 2,12) a 12. sor második oszlopát is. Vegye figyelembe, hogy itt 2 sor és 16 oszlop van, amint azt korábban tárgyaltuk.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Most az LCD be van állítva, törölve, és a kurzor a helyén van. A következő dolog kinyomtatni valamit a képernyőn. Az LCD_Print_String („Sample String”) segítségével nyomtathatunk egy karaktersorozatot az LCD-re, az LCD_Print_Char (a) pedig karakterértéket nyomtathatunk az LCD-re. Itteni programunkban kinyomtattuk az „STM8S103F3P3 LCD” -t, és az alábbi kód segítségével 5 másodperces késleltetést hoztunk létre.
Lcd_Print_String ("STM8S103F3P3 LCD"); késleltetés ms (5000);
Az 5 másodperces késleltetés után ismét kitisztítjuk az LCD-t, és az első sorban megjelenik a „Circuit Digest”, a második sorban pedig a „Test: I” üzenet.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Áramkör összefoglalása"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Teszt:");
A while cikluson belül a test_var egész változó értékét felosztjuk egyedi karakterekre, hogy az egyszerű osztás és modulus operátorok segítségével megjelenjen az LCD-n. Hozzáadtuk a „0” -t is az ASCII érték karakterré alakításához.
d4 = teszt_var% 10 + '0'; d3 = (teszt_var / 10)% 10 + '0'; d2 = (teszt_var / 100)% 10 + '0'; d1 = (teszt_var / 1000) + '0';
Ezután a kurzort (2,6) -ra állítottuk, mert a második sorba már beírtuk a „Test:” -t, amely 6 karakterből áll. Ha felülírjuk, akkor a meglévő karakter egy új karakterre cserélődik az LCD-n. Hozzáadtunk egy 1 másodperces késleltetést és növeltük a változót.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); késleltetés_ms (1000); teszt_var ++;
STM8 LCD-vel - működik
Programunk teszteléséhez egyszerűen töltse fel a kódot a vezérlőnkbe, és kapcsolja be a mikro-USB porttal. Ne feledje, hogy az LCD-nek 5 V-ra van szüksége a működéshez, ezért a kártyát az USB-portról kell táplálni. Korábban közvetlenül az ST-linkről tápláltuk, mert nem volt szükségünk az 5 V-os tápra.
Mint látható, az LCD a várt módon működik, a tesztváltozó értéke körülbelül másodpercenként növekszik. Vegye figyelembe azt is, hogy nem használtunk időzítőket, és csak a késleltetési funkciót használtuk a késés létrehozásához, ezért ne számítson a késleltetés időtartamának pontosra, később az időzítőket használjuk egy másik oktatóanyagban erre a célra.
A projekt teljes kidolgozása az alábbi linken található videóban található. Remélem, tetszett a bemutató, és valami hasznosat tanultál. Ha bármilyen kérdése van, hagyja a megjegyzés rovatban, vagy használja fórumunkat egyéb technikai kérdésekhez.