- Deluje 16x2 LCD zaslon
- Shema vezja na vmesnik LCD z mikrokrmilnikom STM8
- Knjižnica LCD STM8 - Datoteka z glavo za STM8S103F3P6
- LCD program za mikrokrmilnik STM8S
- STM8 z LCD - deluje
Alfanumerični LCD zaslon 16x2 je najpogosteje uporabljen zaslon med ljubitelji ljubiteljev in navdušenci. Zaslon je zelo uporaben, če želite uporabniku prikazati osnovne informacije, in lahko pomaga tudi pri testiranju ali odpravljanju napak naše kode. Ta poseben modul LCD 16x2 je enostavno dostopen in je že dolgo priljubljen. Več o osnovah modula LCD 16x2 lahko izveste v povezanem članku.
Če želite nadaljevati z našo serijo vadnic za mikrokrmilnik STM8, se bomo v tej vadnici naučili, kako povezati LCD z mikrokrmilnikom STM8. Pred tem smo 16x2 LCD povezali tudi s številnimi drugimi mikrokrmilniki, vadnice so navedene spodaj in jih lahko preverite, če vas zanima.
Če ste nov v STM8, si oglejte uvod v članek o mikrokrmilniku STM8, če želite razumeti osnove krmilne plošče in programskega okolja. V tej vadnici ne bomo pokrivali osnov.
Deluje 16x2 LCD zaslon
Kot že ime pove, bo LCD 16x2 imel 16 stolpcev in 2 vrstici. Tako bomo na tem zaslonu lahko skupaj prikazali 32 znakov in ti znaki so lahko abecede ali številke ali celo simboli. Preprost izrez LCD 16x2, ki ga uporabljamo v tej vadnici, je prikazan spodaj -
Kot lahko vidite, ima zaslon 16 nožic in ga lahko razdelimo v pet kategorij, napajalne nožke, kontrastni nožice, kontrolne nožice, nožice za podatke in nožice za osvetlitev ozadja, kot je prikazano v spodnji tabeli. Podrobnosti o vsakem zatiču bomo preučili, ko bomo razpravljali o shemi vezja te vadnice.
Kategorija | Pin NO. | Pripnite ime | Funkcija |
Napajalni zatiči | 1. | VSS | Ground Pin, povezan z Ground |
2. | VDD ali Vcc | Napetostni pin + 5V | |
Kontrastni pin | 3. | V0 ali VEE | Nastavitev kontrasta, priključena na Vcc preko spremenljivega upora. |
Kontrolni zatiči | 4. | RS | Register Izberite Pin, RS = 0 ukazni način, RS = 1 podatkovni način |
5. | RW | Zatiči za branje / pisanje, RW = 0 Način pisanja, RW = 1 Način branja | |
6. | E | Omogoči, LCD mora biti omogočen z visokim do nizkim impulzom | |
Podatkovni zatiči | 7-14 | D0-D7 | Podatkovni zatiči, shrani podatke za prikaz na LCD-prikazovalniku ali navodila za ukaz |
Zatiči za osvetlitev ozadja | 15. | LED + ali A | Za napajanje osvetlitve ozadja + 5V |
16. | LED- ali K | Osvetlitev ozemljitve |
Na zadnji strani LCD-ja, kot je prikazano na spodnji sliki, najdete dve črni piki, znotraj katerih imamo HD44780 LCD gonilnik IC (obkrožen z rdečo). Naš mikrokrmilnik bi moral komunicirati s tem IC, ki bo nato nadziral prikaz na LCD-prikazovalniku. Če vas zanima, kako natančno vse to deluje, si oglejte delovanje 16x2 LCD zaslona, kjer smo že podrobno razpravljali o tem, kako LCD deluje.
V tej vadnici bomo razpravljali o shemi vezja in kodi za prikaz abecednih znakov (abecede in številke) na 16x2 LCD zaslonu z uporabo preprostih ukazov LCD_print _char in LCD_print_string . Te ukaze lahko neposredno uporabite v programu po vključitvi naše glave datoteke. Datoteka z glavo obravnava večino stvari za vas, zato ni nujno vedeti, kako deluje zaslon ali IC44 gonilnika HD44780.
Shema vezja na vmesnik LCD z mikrokrmilnikom STM8
Celotno vezje LCD STM8 najdete na spodnji sliki. Kot lahko vidite, je povezava za krmilnik STM8S103F3P6 z LCD-jem zelo preprosta, imamo LCD zaslon, ki je neposredno povezan z našo ploščo, ST-link pa je povezan tudi za programiranje plošče.
Napajalna zatiča Vss in Vcc sta priključena na 5V zatič na plošči STM8S. Upoštevajte, da je delovna napetost LCD-ja 5V in je priključena na 3,3V. Torej, čeprav mikrokrmilnik STM8S103F3P6 deluje na 3,3 V, je obvezen 5-voltni napajalnik za LCD, temu se lahko izognete z uporabo IC krmilnika polnjenja, vendar o tem v tej vadnici ne bomo razpravljali.
Nato imamo kontrastni zatič, ki se uporablja za nastavitev kontrasta LCD-ja, priključili smo ga na potenciometer, da lahko nadzorujemo kontrast. Uporabili smo 10k lonec, lahko pa uporabite tudi druge bližnje vrednosti, lonec deluje kot potencialni delilnik, ki zagotavlja 0-5 V kontrastnemu zatiču, običajno lahko uporabite tudi upor neposredno, da zagotovite približno 2,2 V za primeren kontrast vrednost. Nato imamo ponastavitve (RS), branje / pisanje (RW) in omogočanje (E) zatiči. Zatič za branje in pisanje je ozemljen, ker na LCD-ju ne bomo ničesar brali, izvajali bomo samo operacije pisanja. Druga dva krmilna zatiča Rs in E sta priključena na zatiča PA1 oziroma PA2.
Nato imamo podatkovne nožice DB0 do DB7. LCD 16x2 lahko deluje v dveh načinih, eden je 8-bitni način delovanja, kjer moramo uporabiti vseh 8 podatkovnih zatičev (DB0-DB7) na LCD-ju, drugi pa 4-bitni način delovanja, kjer potrebujemo le 4 podatkovni zatiči (DB4-DB7). 4-bitni način se pogosto uporablja, ker od krmilnika zahteva manj GPIO nožic, zato smo v tej vadnici uporabili tudi 4-bitni način in smo na nožice PD1, PD2, PD3 povezali samo nožice DB4, DB5, DB6 in DB7. in PD4.
Zadnja dva zatiča BLA in BLK se uporabljata za napajanje LED z notranjo osvetlitvijo, kot upor za omejevanje toka smo uporabili 560-ohmski upor. Programator ST-Link je povezan kot vedno kot v prejšnji vadnici. Na plošči sem vzpostavil popolno povezavo in moja postavitev je videti tako, kot je prikazano na spodnji sliki.
Knjižnica LCD STM8 - Datoteka z glavo za STM8S103F3P6
Preden nadaljujemo s shemo vezij, poiščimo datoteko glave STM8 LCD od GitHub po naslednji povezavi -
Datoteka z glavo LCD STM8S 16x2
Lahko prenesete celoten repo in dobite datoteko stm8s103_LCD_16x2.h ali preprosto kodo iz zgornje povezave. Med nastavljanjem projekta poskrbite, da boste v mapo inc vključili vse zahtevane datoteke glave skupaj s to datoteko glave.
Če niste prepričani, kako dodati datoteke z glavo in sestaviti program, sledite videoposnetku na dnu te strani. Če vas zanima, kako deluje koda znotraj glave, lahko PIC preverite z vadnico LCD. Datoteka glave, uporabljena v tem projektu, je zelo podobna tisti, ki je tam pojasnjena, zato o njej ne bomo podrobneje razpravljali.
LCD program za mikrokrmilnik STM8S
Za predstavitev bomo programirali naš krmilnik STM8S, da prikaže preprost niz, kot je »Circuit Digest«, nato pa bomo v drugi vrstici vsako sekundo povečali vrednost »Test«. Celoten program najdete na dnu te strani. Razlaga je naslednja.
Naš program začnemo z definiranjem nožic in dodajanjem zahtevanih datotek z glavo kot vedno. V našem zgoraj obravnavanem vezju smo LCD_RS povezali s PA1, zato smo ga opredelili kot LCD_RS GPIOA, GPIO_PIN_1. Podobno smo storili enako za druge zatiče. Če sledijo drugemu krogu, poskrbite, da boste te vrednosti ustrezno spremenili.
# 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 GPIOD, GPIO_PIN_4 #include "STM8S.h" #include "stm8s103_LCD_16x2.h"
Naslednji del našega glavnega programa smo razglasili spremenljivke, potrebne za to vzorčno kodo. Imamo testno spremenljivko, imenovano test_var, ki je inicializirana na nič, spremenljivko bomo povečali in jo prikazali na LCD-prikazovalniku. Znaki od d1 do d4 predstavljajo 4 števke testne spremenljivke, ker naš LCD ne more neposredno prikazati int vrednosti, pretvoriti jih moramo v znake.
// Izjave spremenljivk int test_var = 0; char d4, d3, d2, d1;
Funkcija LCD_Begin () se uporablja za inicializacijo LCD-ja. Ta funkcija bo inicializirala vse zahtevane GPIO nožice in LCD zaslon tudi nastavila v način LCD 16x2. Nato imamo funkcijo LCD_Clear (), ki se uporablja za brisanje vseh vrednosti na LCD-ju, kar bo izbrisalo vse na LCD-ju, tako da bo lahko zapisoval nove vrednosti. Nato imamo funkcijo LCD_Set_Cursor (x, y), kjer sta x in y položaji, na katerih moramo zapisati svoj novi znak. Na primer (1,1) pomeni prvo vrstico in prvi stolpec, podobno (2,12) pomeni tudi drugo vrstico 12 stolpca. Upoštevajte, da imamo tukaj 2 vrstici in 16 stolpcev, kot smo že omenili.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Zdaj je LCD nastavljen, izbrisan in kurzor je na mestu. Naslednja stvar je, da nekaj natisnete na zaslon. LCD_Print_String (»Sample String«) lahko uporabimo za tiskanje niza na LCD in LCD_Print_Char (a) za tiskanje vrednosti znaka na LCD. V našem programu smo tukaj natisnili “STM8S103F3P3 LCD” in s spodnjo kodo ustvarili 5 sekundni zamik.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Po 5-sekundni zakasnitvi LCD spet počistimo in v prvi vrstici prikažemo “Circuit Digest”, v drugi vrstici pa “Test:” I.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Znotraj while zanke, bomo razdelili vrednost na število spremenljivo test_var v posameznih likov, tako da se lahko prikaže na zaslonu z uporabo preprostih operaterjev delitev in modul. Dodali smo tudi '0' za pretvorbo vrednosti ASCII v znak.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Nato smo kurzor nastavili na (2,6), ker smo v drugo vrstico, ki vsebuje 6 znakov, že napisali »Test:«. Če prepišemo, bo obstoječi znak na LCD-ju nadomeščen z novim. Dodali smo tudi zakasnitev za 1 sekundo in spremenljivko povečali.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); zamuda_ms (1000); test_var ++;
STM8 z LCD - deluje
Če želite preizkusiti naš program, preprosto naložite kodo v naš krmilnik in jo vklopite z vrati micro-USB. Upoštevajte, da LCD za delovanje potrebuje 5 V, zato je obvezno napajanje plošče prek vrat USB. Pred tem smo ga napajali neposredno iz ST-link, ker nismo potrebovali 5V napajanja.
Kot lahko vidite, LCD deluje po pričakovanjih, pri čemer se vrednost testne spremenljivke povečuje približno za vsako sekundo. Upoštevajte tudi, da nismo uporabili časovnikov in smo samo uporabili funkcijo zakasnitve, da bi ustvarili to zamudo, zato ne pričakujte, da bo trajanje zakasnitve natančno, v ta namen bomo kasneje uporabili merilnike.
Celotno delovanje projekta najdete v spodnjem videoposnetku. Upam, da ste uživali v vadnici in se naučili kaj koristnega. Če imate kakršna koli vprašanja, jih pustite v oddelku za komentarje ali uporabite druge forume za druga tehnična vprašanja.