- Práce s 16x2 LCD displejem
- Schéma zapojení do rozhraní LCD s mikrokontrolérem STM8
- Knihovna LCD STM8 - hlavičkový soubor pro STM8S103F3P6
- Program LCD pro mikrokontrolér STM8S
- STM8 s LCD - pracuje
16x2 alfanumerický LCD displej je nejběžněji používaným displejem mezi fandy a nadšenci. Displej je velmi užitečný, když chcete uživateli zobrazit základní informace, a může také pomoci při testování nebo ladění našeho kódu. Tento konkrétní 16x2 LCD modul je snadno dostupný a je dlouho oblíbený. Další informace o základech modulu LCD 16x2 se dozvíte v propojeném článku.
Abychom pokračovali v naší sérii výukových programů mikrokontroléru STM8, v tomto výukovém programu se naučíme, jak propojit LCD s mikrokontrolérem STM8. Již dříve jsme propojili LCD 16x2 s mnoha dalšími mikrokontroléry, výukové programy jsou uvedeny níže a v případě zájmu je můžete zkontrolovat.
Pokud jste v STM8 nováčkem, podívejte se na článek Začínáme s mikrokontrolérem STM8, abyste porozuměli základům desky řadiče a programovacího prostředí. V tomto kurzu se nebudeme věnovat základům.
Práce s 16x2 LCD displejem
Jak název napovídá, 16x2 LCD bude mít 16 sloupců a 2 řádky. Celkově tedy na tomto displeji budeme moci zobrazit 32 znaků a těmito znaky mohou být abecedy nebo čísla nebo dokonce symboly. Níže je uveden jednoduchý pinout LCD 16x2, který používáme v tomto kurzu -
Jak vidíte, displej má 16 pinů a můžeme jej rozdělit do pěti kategorií, Power Pins, kontrastní pin, Control Pins, Data piny a Backlight piny, jak je znázorněno v tabulce níže. Dostaneme se do podrobností každého kolíku, když budeme diskutovat schéma zapojení tohoto tutoriálu.
Kategorie | Pin NO. | Název PIN | Funkce |
Napájecí piny | 1 | VSS | Uzemňovací kolík, připojený k uzemnění |
2 | VDD nebo Vcc | Napěťový kolík + 5V | |
Kontrast Pin | 3 | V0 nebo VEE | Nastavení kontrastu, připojené k Vcc přes proměnný rezistor. |
Kontrolní kolíky | 4 | RS | Registrovat Vyberte Pin, RS = 0 příkazový režim, RS = 1 datový režim |
5 | RW | Pin pro čtení / zápis, RW = 0 režim zápisu, RW = 1 režim čtení | |
6 | E | Povolit, je třeba povolit vysoký až nízký pulz LCD | |
Datové piny | 7-14 | D0-D7 | Datové kolíky, Ukládá data, která se mají zobrazit na LCD nebo pokyny k příkazu |
Kolíky podsvícení | 15 | LED + nebo A | Pro napájení podsvícení + 5V |
16 | LED nebo K. | Podsvícení země |
Na zadní straně LCD, jak je znázorněno na obrázku níže, najdete dvě černé tečky, uvnitř kterých je ovladač IC HD44780 (integrovaný červeně). Náš mikrokontrolér by měl komunikovat s tímto IC, který zase bude řídit to, co se zobrazuje na LCD. Pokud jste zvědaví, jak přesně to všechno funguje, měli byste se podívat na fungování 16x2 LCD displeje, kde jsme již diskutovali o tom, jak LCD funguje podrobně.
V tomto tutoriálu probereme schéma zapojení a kód pro zobrazení alfamerických znaků (abecedy a čísla) na 16x2 LCD displeji pomocí jednoduchých příkazů LCD_print _char a LCD_print_string . Tyto příkazy lze přímo použít v programu po zahrnutí našeho souboru záhlaví. Soubor záhlaví zpracovává většinu věcí za vás, takže není nutné vědět, jak funguje displej nebo ovladač IC HD44780.
Schéma zapojení do rozhraní LCD s mikrokontrolérem STM8
Kompletní obvod LCD STM8 najdete na následujícím obrázku. Jak je vidět, připojení ovladače STM8S103F3P6 s LCD je velmi jednoduché, máme LCD displej přímo připojený k naší desce a ST-link je také připojen k programování desky.
Napájecí piny Vss a Vcc jsou připojeny ke kolíku 5V na desce STM8S, mějte na paměti, že provozní napětí LCD je 5V a je připojeno k provozu na 3,3V. Takže i když mikrokontrolér STM8S103F3P6 pracuje na 3,3 V, je povinné mít 5V napájení pro LCD, tomu se můžete vyhnout použitím IC regulátoru nabíjení, ale v tomto tutoriálu o tom nebudeme diskutovat.
Dále máme kontrastní kolík, který se používá k nastavení kontrastu LCD, připojili jsme ho k potenciometru, abychom mohli kontrolovat kontrast. Použili jsme 10k hrnec, ale můžete také použít jiné blízké hodnoty, hrnec funguje jako dělič potenciálu, který poskytuje 0-5 V kontrastnímu kolíku, obvykle můžete také použít rezistor přímo, abyste zajistili rozumný kontrast kolem 2,2 V hodnota. Pak máme piny reset (RS), čtení / zápis (RW) a povolení (E). Pin pro čtení a zápis je uzemněn, protože nebudeme číst nic z LCD, budeme provádět pouze operace zápisu. Další dva kontrolní piny R a E jsou připojeny k pinu PA1 a PA2.
Pak máme datové piny DB0 až DB7. 16x2 LCD může pracovat ve dvou režimech, jeden je 8bitový provozní režim, kde musíme použít všech 8 datových pinů (DB0-DB7) na LCD a druhý je 4bitový provozní režim, kde potřebujeme pouze 4 datové piny (DB4-DB7). 4bitový režim se běžně používá, protože vyžaduje méně pinů GPIO od řadiče, proto jsme v tomto tutoriálu použili také 4bitový režim a k pinům PD1, PD2, PD3 jsme připojili pouze piny DB4, DB5, DB6 a DB7 a PD4.
Poslední dva piny BLA a BLK slouží k napájení vnitřní LED podsvícení, jako odpor omezující proud jsme použili odpor 560 ohmů. Programátor ST-Link je připojen jako vždy jako v našem předchozím tutoriálu. Vytvořil jsem úplné připojení na prkénku a moje nastavení vypadá takto na obrázku níže.
Knihovna LCD STM8 - hlavičkový soubor pro STM8S103F3P6
Než budeme pokračovat v schématu zapojení, pojďme získat soubor záhlaví LCD STM8 z GitHubu pomocí následujícího odkazu -
Hlavičkový soubor STM8S 16x2 LCD
Můžete si buď stáhnout kompletní repo a získat soubor stm8s103_LCD_16x2.h, nebo jednoduše kód z výše uvedeného odkazu. Při nastavování projektu nezapomeňte zahrnout všechny požadované soubory záhlaví do adresáře inc spolu s tímto souborem záhlaví.
Pokud si nejste jisti, jak přidat soubory záhlaví a zkompilovat program, postupujte podle videa v dolní části této stránky. A pokud jste zvědaví, jak funguje kód uvnitř souboru záhlaví, můžete se podívat na PIC s výukovým programem LCD. Soubor záhlaví použitý v tomto projektu je velmi podobný tomu, který je zde vysvětlen, takže se nebudeme podrobněji zabývat.
Program LCD pro mikrokontrolér STM8S
Pro demonstraci naprogramujeme náš řadič STM8S tak, aby zobrazoval jednoduchý řetězec, jako je „Circuit Digest“, a poté ve druhém řádku zvýšíme hodnotu „Test“ pro každou sekundu. Kompletní program naleznete ve spodní části této stránky. Vysvětlení je následující.
Náš program začneme definováním pinů a přidáním požadovaných souborů záhlaví jako vždy. V našem výše diskutovaném schématu zapojení jsme připojili LCD_RS k PA1, takže jsme jej definovali jako LCD_RS GPIOA, GPIO_PIN_1. Podobně jsme udělali totéž pro další piny. Pokud sledují jiný obvod, nezapomeňte odpovídajícím způsobem změnit tyto 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_Pi8_in8, GP3
Dále v našem hlavním programu jsme deklarovali proměnné požadované pro tento ukázkový kód. Máme testovací proměnnou nazvanou test_var, která je inicializována na nulu, proměnnou zvýšíme a zobrazíme na LCD. Znaky d1 až d4 představují 4 číslice testovací proměnné, protože náš LCD nedokáže přímo zobrazit hodnotu int, musíme je převést na znaky.
// Deklarace proměnných int test_var = 0; char d4, d3, d2, dl;
Funkce LCD_Begin () se používá k inicializaci LCD. Tato funkce inicializuje všechny požadované piny GPIO a také nastaví LCD na 16x2 LCD režim. Pak máme funkci LCD_Clear (), která se používá k vymazání všech hodnot na LCD, tím se vymaže vše na LCD, takže je čisté psát nové hodnoty. Pak máme funkci LCD_Set_Cursor (x, y), kde xay jsou pozice, na které musíme psát náš nový znak. Například (1,1) znamená první řádek a první Colum, podobně (2,12) znamená druhý řádek 12 sloupec, podobně. Všimněte si, že zde máme 2 řádky a 16 sloupců, jak jsme diskutovali dříve.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Nyní je LCD nastaven, vymazán a kurzor je na místě. Další věcí je něco vytisknout na obrazovku. Můžeme použít LCD_Print_String („Sample String“) k tisku řetězce na LCD a LCD_Print_Char (a) k tisku hodnoty znaku na LCD. V našem programu jsme zde vytiskli „STM8S103F3P3 LCD“ a pomocí níže uvedeného kódu vytvořili zpoždění 5 sekund.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Po 5sekundovém zpoždění znovu vypneme LCD a v první řadě zobrazíme „Circuit Digest“ a ve druhé řadě „Test:“ I.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Uvnitř smyčky while rozdělíme hodnotu na celočíselnou proměnnou test_var na jednotlivé znaky, aby ji bylo možné zobrazit na LCD pomocí jednoduchých operátorů dělení a modulu. Přidali jsme také „0“ pro převod 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';
Poté jsme nastavili kurzor na (2,6), protože do druhého řádku, který má 6 znaků, jsme již napsali „Test:“. Pokud přepíšeme, stávající znak bude na LCD nahrazen novým znakem. Také jsme přidali zpoždění 1 sekundu a zvýšili proměnnou.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 s LCD - pracuje
Chcete-li otestovat náš program, jednoduše nahrajte kód do našeho řadiče a zapněte jej pomocí portu micro-USB. Všimněte si, že pro práci na LCD je zapotřebí 5V, takže je nutné napájet desku z USB portu. Dříve jsme jej napájeli přímo z ST-link, protože jsme nepotřebovali napájení 5V.
Jak vidíte, LCD pracuje podle očekávání, přičemž hodnota testovací proměnné se zvyšuje přibližně každou sekundu. Všimněte si také, že jsme nepoužili časovače a k vytvoření tohoto zpoždění jsme použili pouze funkci zpoždění, takže neočekávejte, že doba zpoždění bude přesná, pro tento účel použijeme časovače později v jiném kurzu.
Kompletní fungování projektu najdete ve videu, na které odkazujete níže. Doufám, že se vám výukový program líbil a naučili jste se něco užitečného. Máte-li jakékoli dotazy, nechte je v sekci komentářů nebo použijte naše fóra pro další technické dotazy.