- Fungovanie 16x2 LCD displeja
- Schéma zapojenia do rozhrania LCD s mikrokontrolérom STM8
- Knižnica LCD STM8 - hlavičkový súbor pre STM8S103F3P6
- LCD program pre mikrokontrolér STM8S
- STM8 s LCD - funkčné
Alfanumerický displej LCD 16x2 je najbežnejšie používaným displejom medzi fandmi a nadšencami. Displej je veľmi užitočný, ak chcete používateľovi zobraziť základné informácie, a môže tiež pomôcť pri testovaní alebo ladení nášho kódu. Tento konkrétny 16x2 LCD modul je ľahko dostupný a je dlho obľúbený. Viac informácií o základoch modulu LCD 16x2 sa dozviete v prepojenom článku.
Aby sme pokračovali v našej sérii tutoriálov mikrokontrolérov STM8, v tomto tutoriále sa naučíme, ako prepojiť LCD s mikrokontrolérom STM8. Predtým sme prepojili 16x2 LCD aj s mnohými ďalšími mikrokontrolérmi, výukové programy sú uvedené nižšie a v prípade záujmu si ich môžete skontrolovať.
Ak ste v STM8 nováčikom, prečítajte si článok Začíname s mikrokontrolérom STM8, aby ste pochopili základné informácie o doske radiča a programovacom prostredí. V tejto príručke sa nebudeme venovať základom.
Fungovanie 16x2 LCD displeja
Ako už názov napovedá, 16x2 LCD bude mať 16 stĺpcov a 2 riadky. Celkovo teda na tomto displeji budeme môcť zobraziť 32 znakov a týmito znakmi môžu byť abecedy alebo čísla alebo dokonca symboly. Jednoduchý vývod LCD 16x2, ktorý používame v tomto výučbe, je uvedený nižšie -
Ako vidíte, displej má 16 pinov a môžeme ho rozdeliť do piatich kategórií, napájacie piny, kontrastné piny, ovládacie piny, dátové piny a piny pre podsvietenie, ako je uvedené v nasledujúcej tabuľke. Dostaneme sa do podrobností každého kolíka, keď diskutujeme o schéme zapojenia tohto tutoriálu.
Kategória | Pin č. | Názov špendlíka | Funkcia |
Napájacie piny | 1 | VSS | Uzemňovací kolík, pripojený k zemi |
2 | VDD alebo Vcc | Napäťový kolík + 5V | |
Kontrastný kolík | 3 | V0 alebo VEE | Nastavenie kontrastu, pripojené k Vcc cez variabilný rezistor. |
Kontrolné piny | 4 | RS | Registrovať Vyberte Pin, RS = 0 príkazový režim, RS = 1 dátový režim |
5 | RW | Pin na čítanie a zápis, RW = 0 režim zápisu, RW = 1 režim čítania | |
6 | E | Povoliť, musí sa povoliť vysoký až nízky impulz LCD | |
Dátové kolíky | 7-14 | D0-D7 | Dátové kolíky, Ukladá údaje, ktoré sa majú zobraziť na LCD displeji alebo podľa pokynov k príkazu |
Kolíky podsvietenia | 15 | LED + alebo A | Na napájanie podsvietenia + 5V |
16 | LED- alebo K | Podsvietenie zeme |
Na zadnej strane LCD, ako je znázornené na obrázku nižšie, nájdete dve čierne bodky, vnútri ktorých je ovládač IC HD44780 (integrovaný do červenej farby). Náš mikrokontrolér by mal komunikovať s týmto IC, ktorý bude zase riadiť to, čo sa zobrazuje na LCD. Ak ste zvedaví, ako presne to všetko funguje, mali by ste sa pozrieť na fungovanie 16x2 LCD displeja, kde sme už podrobne hovorili o tom, ako funguje LCD.
V tomto tutoriáli sa budeme zaoberať schémou zapojenia a kódom na zobrazovanie alfamerických znakov (abecedy a čísla) na 16x2 LCD displeji pomocou jednoduchých príkazov LCD_print _char a LCD_print_string . Tieto príkazy je možné priamo použiť v programe po zahrnutí nášho hlavičkového súboru. Hlavičkový súbor obsahuje všetko, čo je za vás, takže nie je povinné vedieť, ako funguje displej alebo ovládač HD44780.
Schéma zapojenia do rozhrania LCD s mikrokontrolérom STM8
Kompletný obvod LCD STM8 nájdete na obrázku nižšie. Ako vidíte, pripojenie pre radič STM8S103F3P6 s LCD je veľmi jednoduché, máme LCD displej priamo pripojený k našej doske a ST-link je tiež pripojený k programovaniu dosky.
Napájacie piny Vss a Vcc sú pripojené k pinu 5V na doske STM8S. Všimnite si, že prevádzkové napätie LCD je 5V a je pripojené k prevádzke na 3,3V. Takže aj keď mikrokontrolér STM8S103F3P6 pracuje na napätí 3,3 V, pre napájanie LCD je povinné napájanie 5V, tomu sa môžete vyhnúť použitím IC radiča nabíjania, ale o tom sa v tomto tutoriálu nebudeme baviť.
Ďalej tu máme kontrastný kolík, ktorý slúži na nastavenie kontrastu LCD, pripojili sme ho k potenciometru, aby sme mohli kontrolovať kontrast. Použili sme 10k hrnec, ale môžete použiť aj iné blízke hodnoty, hrnec slúži ako rozdeľovač potenciálu na zabezpečenie 0-5 V pre kontrastný kolík, zvyčajne môžete tiež použiť odpor priamo na zaistenie približne 2,2 V pre primeraný kontrast hodnotu. Potom tu máme piny reset (RS), Read / Write (RW) a Enable (E). Pin na čítanie a zápis je uzemnený, pretože z LCD nebudeme nič čítať, budeme vykonávať iba operácie zápisu. Ďalšie dva riadiace piny Rs a E sú spojené s piny PA1 a PA2.
Potom máme dátové piny DB0 až DB7. 16x2 LCD môže pracovať v dvoch režimoch, jeden je 8-bitový prevádzkový režim, kde musíme použiť všetkých 8 dátových pinov (DB0-DB7) na LCD a druhý je 4-bitový prevádzkový režim, kde potrebujeme iba 4 dátové kolíky (DB4-DB7). 4-bitový režim sa bežne používa, pretože vyžaduje menej pinov GPIO od radiča, preto sme v tomto tutoriále použili aj 4-bitový režim a k pinom PD1, PD2, PD3 sme pripojili iba piny DB4, DB5, DB6 a DB7. a PD4.
Posledné dva piny BLA a BLK slúžia na napájanie vnútornej LED diódy podsvietenia, ako odpor obmedzujúci prúd sme použili rezistor 560 ohmov. Programátor ST-Link je pripojený ako vždy ako v našom predchádzajúcom návode. Dokončil som úplné pripojenie na doske a moje nastavenie vyzerá takto, ako je to znázornené na obrázku nižšie.
Knižnica LCD STM8 - hlavičkový súbor pre STM8S103F3P6
Predtým, ako budeme pokračovať v schéme zapojenia, získajme súbor hlavičky STM8 LCD z GitHubu pomocou nasledujúceho odkazu -
Hlavičkový súbor LCD STM8S 16x2
Môžete si buď stiahnuť kompletné repo a získať súbor stm8s103_LCD_16x2.h, alebo jednoduchý kód z vyššie uvedeného odkazu. Pri nastavovaní projektu nezabudnite zahrnúť všetky požadované hlavičkové súbory do adresára inc spolu s týmto hlavičkovým súborom.
Ak si nie ste istí, ako pridať hlavičkové súbory a zostaviť program, postupujte podľa videa v dolnej časti tejto stránky. A ak ste zvedaví, ako funguje kód v hlavičkovom súbore, môžete si pozrieť PIC pomocou výukového programu LCD. Hlavičkový súbor použitý v tomto projekte je veľmi podobný tomu, ktorý je v ňom vysvetlený, takže sa ním nebudeme podrobne zaoberať.
LCD program pre mikrokontrolér STM8S
Na ukážku naprogramujeme náš ovládač STM8S tak, aby zobrazoval jednoduchý reťazec ako „Circuit Digest“ a potom v druhom riadku zvýšime hodnotu „Test“ pre každú sekundu. Celý program nájdete v dolnej časti tejto stránky. Vysvetlenie je nasledovné.
Náš program začíname definovaním pinov a pridaním požadovaných súborov hlavičiek ako vždy. V našom vyššie diskutovanom schéme zapojenia sme pripojili LCD_RS k PA1, takže sme ho definovali ako LCD_RS GPIOA, GPIO_PIN_1. Podobne sme urobili to isté aj pre ďalšie piny. Ak sledujú iný okruh, nezabudnite zodpovedajúcim spôsobom zmeniť tieto hodnoty.
#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, GPIO_PIN_3 #define LCD_DB7_P3_in8, GP3_in8, GP3
Ďalej v našom hlavnom programe sme deklarovali premenné požadované pre tento vzorový kód. Máme testovaciu premennú nazvanú test_var, ktorá je inicializovaná na nulu, premennú zvýšime a zobrazíme na LCD. Znaky d1 až d4 predstavujú 4 číslice testovacej premennej, pretože náš LCD nedokáže priamo zobraziť hodnotu int, musíme ich previesť na znaky.
// Deklarácie premenných int test_var = 0; char d4, d3, d2, dl;
Na inicializáciu LCD sa používa funkcia LCD_Begin () . Táto funkcia inicializuje všetky požadované piny GPIO a tiež nastaví LCD na 16x2 LCD režim. Potom máme funkciu LCD_Clear (), ktorá slúži na vymazanie všetkých hodnôt na LCD displeji, čím sa vymaže všetko na LCD displeji, takže je čisté písať nové hodnoty. Potom máme funkciu LCD_Set_Cursor (x, y), kde xay sú polohy, na ktoré musíme napísať náš nový znak. Napríklad (1,1) znamená prvý rad a prvý Colum, podobne (2,12) znamená druhý stĺpec 12, podobne. Upozorňujeme, že tu máme 2 riadky a 16 stĺpcov, ako sme už spomínali.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Teraz je LCD nastavený, vymazaný a kurzor je na danom mieste. Ďalšou vecou je niečo vytlačiť na obrazovku. Môžeme použiť LCD_Print_String („Sample String“) na tlač reťazca na LCD a LCD_Print_Char (a) na vytlačenie hodnoty znaku na LCD. V našom programe sme tu vytlačili „STM8S103F3P3 LCD“ a pomocou nižšie uvedeného kódu sme vytvorili oneskorenie 5 sekúnd.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5 000);
Po 5 sekundovom oneskorení opäť vypneme LCD a v prvom riadku zobrazíme „Circuit Digest“ a v druhom riadku „Test:“.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Súhrn okruhu"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Vo vnútri while slučky rozdelíme hodnotu na celočíselnú premennú test_var na jednotlivé znaky, aby sa dala zobraziť na LCD pomocou jednoduchých operátorov delenia a modulu. Pridali sme tiež „0“ na prevod hodnoty ASCII na znak.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Potom sme nastavili kurzor na (2,6), pretože do druhého riadku, ktorý má 6 znakov, sme už napísali „Test:“. Ak prepíšeme, existujúci znak bude na LCD nahradený novým znakom. Tiež sme pridali oneskorenie 1 sekundu a zvýšili premennú.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1 000); test_var ++;
STM8 s LCD - funkčné
Ak chcete vyskúšať náš program, jednoducho nahrajte kód do nášho ovládača a zapnite ho pomocou portu micro-USB. Upozorňujeme, že na prácu s obrazovkou je potrebných 5 V, takže je povinné napájať dosku z portu USB. Predtým sme ho napájali priamo z ST-link, pretože sme nepotrebovali napájanie 5V.
Ako môžete vidieť, displej LCD pracuje podľa očakávaní a hodnota testovacej premennej sa zvyšuje približne každú sekundu. Upozorňujeme tiež, že sme nepoužili časovače a na vytvorenie tohto oneskorenia sme použili iba funkciu oneskorenia, takže neočakávajte, že doba oneskorenia bude presná, na tento účel použijeme časovače neskôr v inom návode.
Kompletné fungovanie projektu nájdete vo videu, na ktoré odkazujete nižšie. Dúfam, že sa vám výukový program páčil a dozvedeli ste sa niečo užitočné. Ak máte akékoľvek otázky, nechajte ich v sekcii komentárov alebo použite naše fóra na ďalšie technické otázky.