- Rad LCD zaslona od 16x2
- Kružna shema na sučelju LCD-a sa STM8 mikrokontrolerom
- STM8 LCD knjižnica - datoteka zaglavlja za STM8S103F3P6
- LCD program za mikrokontroler STM8S
- STM8 s LCD-om - radi
Alfanumerički LCD zaslon 16x2 najčešće je zaslon među hobistima i entuzijastima. Zaslon je vrlo koristan kada korisniku želite prikazati osnovne informacije, a može vam pomoći i pri testiranju ili otklanjanju pogrešaka u našem kodu. Ovaj posebni LCD modul od 16x2 lako je dostupan i već je dugo popularan. U povezanom članku možete saznati više o osnovama LCD modula 16x2.
Da bismo nastavili s našom serijom tutorijala za STM8 mikrokontroler, u ovom ćemo tutorialu naučiti kako povezati LCD sa STM8 mikrokontrolerom. Prethodno smo povezali LCD 16x2 i s mnogim drugim mikrokontrolerima, vodiči su navedeni u nastavku i ako ih želite možete provjeriti.
Ako ste novi u STM8, pogledajte početak rada sa člankom STM8 Microcontroller kako biste razumjeli osnove ploče kontrolera i programskog okruženja. U ovom uputstvu nećemo pokrivati osnove.
Rad LCD zaslona od 16x2
Kao što i samo ime govori, LCD 16x2 imat će 16 stupaca i 2 reda. Dakle, ukupno ćemo na ovom zaslonu moći prikazati 32 znaka, a ti znakovi mogu biti abeceda ili brojevi ili čak simboli. Jednostavni LCD pinout od 16x2 koji koristimo u ovom vodiču prikazan je ispod -

Kao što vidite, zaslon ima 16 pinova i možemo ga podijeliti u pet kategorija, Power Pins, kontrastni pin, Control Pins, Data pins i Backlight pins, kao što je prikazano u donjoj tablici. U detalje svakog pina ući ćemo kad razgovaramo o shemi sklopa ovog vodiča.
| Kategorija | Pin NO. | Naziv pribadače | Funkcija |
| Igle za napajanje | 1 | VSS | Priključak za uzemljenje, povezan s uzemljenjem |
| 2 | VDD ili Vcc | Napon Pin + 5V | |
| Pin za kontrast | 3 | V0 ili VEE | Postavka kontrasta, spojena na Vcc preko promjenjivog otpora. |
| Kontrolne igle | 4 | RS | Registriraj Odaberite pin, RS = 0 Naredbeni način, RS = 1 Podaci |
| 5 | RW | Igla za čitanje / pisanje, RW = 0 Način pisanja, RW = 1 Način čitanja | |
| 6 | E | Omogući, visoki do niski puls treba omogućiti LCD | |
| Pribadače za podatke | 7-14 | D0-D7 | Pribadače, pohranjuje podatke za prikaz na LCD-u ili naredbe |
| Igle s pozadinskim osvjetljenjem | 15 | LED + ili A | Za napajanje pozadinskog osvjetljenja + 5V |
| 16 | LED- ili K | Pozadinsko osvjetljenje uzemljenja |
Na stražnjoj strani LCD-a, kao što je prikazano na donjoj slici, pronaći ćete dvije crne točke, unutar kojih imamo HD44780 IC upravljački program LCD-a (zaokružen crvenom bojom). Naš mikrokontroler trebao bi komunicirati s ovom IC-om koja će zauzvrat kontrolirati što se prikazuje na LCD-u. Ako ste znatiželjni kako točno sve ovo funkcionira, trebali biste provjeriti rad LCD zaslona 16x2 gdje smo već detaljno razgovarali o tome kako LCD radi.

U ovom uputstvu raspravit ćemo o shemi i kodu za prikaz alfamernih znakova (abeceda i brojeva) na LCD zaslonu 16x2 pomoću jednostavnih naredbi LCD_print _char i LCD_print_string . Te se naredbe mogu izravno koristiti u programu nakon uključivanja naše datoteke zaglavlja. Datoteka zaglavlja bavi se većinom stvari za vas, tako da nije obavezno znati kako funkcionira zaslon ili IC44 upravljački program za HD44780.
Kružna shema na sučelju LCD-a sa STM8 mikrokontrolerom
Kompletni STM8 LCD krug nalazi se na donjoj slici. Kao što vidite, veza za STM8S103F3P6 kontroler s LCD-om vrlo je jednostavna, imamo LCD zaslon izravno povezan s našom pločom, a ST-link je također povezan za programiranje ploče.

Priključci za napajanje Vss i Vcc spojeni su na 5 V pin na ploči STM8S, imajte na umu da je radni napon LCD-a 5 V i povezan je za rad na 3,3 V. Dakle, iako mikrokontroler STM8S103F3P6 radi na 3,3 V, obavezno je imati 5 V napajanja za LCD, to možete izbjeći korištenjem IC kontrolera punjenja, ali o tome nećemo raspravljati u ovom vodiču.
Dalje, imamo kontrastni pin koji služi za podešavanje kontrasta LCD-a, spojili smo ga na potenciometar kako bismo mogli kontrolirati kontrast. Upotrijebili smo 10k lonac, ali možete koristiti i druge vrijednosti u blizini, lonac djeluje kao potencijalni razdjelnik kako bi osigurao 0-5 V na kontrastnom pinu, obično možete upotrijebiti i otpornik izravno za oko 2,2 V za razumni kontrast vrijednost. Zatim imamo igle za resetiranje (RS), čitanje / pisanje (RW) i Omogućivanje (E). Pribadača za čitanje i pisanje je uzemljena, jer nećemo ništa čitati s LCD-a, već ćemo izvršavati samo operacije pisanja. Preostala dva upravljačka zatiča Rs i E spojena su na pribadače PA1 i PA2.
Zatim imamo podatkovne pinove DB0 do DB7. LCD 16x2 može raditi u dva načina, jedan je 8-bitni način rada gdje moramo koristiti svih 8 podatkovnih pinova (DB0-DB7) na LCD-u, a drugi je 4-bitni način rada u kojem nam trebaju samo 4 podatkovne igle (DB4-DB7). Često se koristi 4-bitni način jer zahtijeva manje GPIO pinova od kontrolera, pa smo u ovom uputstvu koristili i 4-bitni način rada te smo na pinove PD1, PD2, PD3 povezali samo pinove DB4, DB5, DB6 i DB7, odnosno PD4.
Posljednja dva pina BLA i BLK koriste se za napajanje LED-a s unutarnjim pozadinskim osvjetljenjem, kao otpornik za ograničavanje struje koristili smo otpor od 560 ohma. Programer ST-Link povezan je kao i uvijek kao u našem prethodnom vodiču. Potpuno sam povezao ploču i moja postavka izgleda ovako prikazano na donjoj slici.

STM8 LCD knjižnica - datoteka zaglavlja za STM8S103F3P6
Prije nego što nastavimo s shemom sklopa, uzmimo STM8 LCD zaglavnu datoteku s GitHub-a koristeći sljedeću vezu-
STM8S 16x2 LCD datoteka zaglavlja
Možete preuzeti cijeli repo i dobiti datoteku stm8s103_LCD_16x2.h ili jednostavno kôd s gornje veze. Tijekom postavljanja projekta, obavezno uključite sve potrebne datoteke zaglavlja u direktorij inc zajedno s ovom datotekom zaglavlja.

Ako niste sigurni kako dodati datoteke zaglavlja i sastaviti program, slijedite videozapis na dnu ove stranice. A ako vas zanima kako funkcionira kôd unutar datoteke zaglavlja, PIC možete provjeriti pomoću LCD vodiča. Datoteka zaglavlja koja se koristi u ovom projektu vrlo je slična onoj koja je tamo objašnjena, pa nećemo ulaziti u detalje o tome.
LCD program za mikrokontroler STM8S
Za demonstraciju ćemo programirati naš STM8S kontroler tako da prikazuje jednostavan niz poput "Circuit Digest", a zatim ćemo povećavati vrijednost "Test" za svaku sekundu u drugom retku. Kompletni program nalazi se na dnu ove stranice. Objašnjenje je sljedeće.
Naš program započinjemo definiranjem pribadača i dodavanjem potrebnih datoteka zaglavlja kao i uvijek. U našem gore spomenutom dijagramu spoja, povezali smo LCD_RS s PA1 pa smo ga definirali kao LCD_RS GPIOA, GPIO_PIN_1. Slično tome, učinili smo isto i za druge pribadače. Ako slijede drugačiji krug, svakako promijenite ove vrijednosti u skladu s tim.
#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"
Sljedeće u našem glavnom programu, proglasili smo varijable potrebne za ovaj uzorak koda. Imamo testnu varijablu nazvanu test_var koja je inicijalizirana na nulu, povećat ćemo varijablu i prikazati je na LCD-u. Znakovi d1 do d4 predstavljaju 4 znamenke testne varijable jer naš LCD ne može izravno prikazati int vrijednost, moramo ih pretvoriti u znakove.
// Deklaracije varijabli int test_var = 0; char d4, d3, d2, d1;
Funkcija LCD_Begin () koristi se za inicijalizaciju LCD-a. Ova će funkcija inicijalizirati sve potrebne GPIO pinove i također postaviti LCD u LCD način rada 16x2. Tada imamo funkciju LCD_Clear () koja se koristi za brisanje svih vrijednosti na LCD-u, čime će se izbrisati sve na LCD-u, tako da je čisto zapisivati nove vrijednosti. Tada imamo funkciju LCD_Set_Cursor (x, y) gdje su x i y položaji na kojima trebamo napisati svoj novi lik. Na primjer, (1,1) znači prvi red i prvi stupac, slično (2,12) znači i drugi redak 12 stupac. Imajte na umu da ovdje imamo 2 retka i 16 stupaca kao što smo ranije raspravljali.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Sada je LCD postavljen, obrisan i kursor je na mjestu. Sljedeća je stvar ispisati nešto na ekranu. Možemo koristiti LCD_Print_String ("Sample String") za ispis niza na LCD i LCD_Print_Char (a) za ispis vrijednosti znaka na LCD. U našem programu ovdje smo ispisali “STM8S103F3P3 LCD” i stvorili kašnjenje od 5 sekundi pomoću donjeg koda.
Lcd_Print_String ("STM8S103F3P3 LCD"); kašnjenje_ms (5000);
Nakon odgode od 5 sekundi, ponovno očistimo LCD i prikazujemo "Circuit Digest" u prvom redu i "Test:" u drugom redu.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Sažetak kruga"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Unutar while petlje podijelit ćemo vrijednost na cjelobrojnoj varijabli test_var u pojedinačne znakove tako da se može prikazati na LCD-u pomoću jednostavnih operatora podjele i modula. Također smo dodali '0' za pretvaranje ASCII vrijednosti u znak.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Zatim smo postavili kursor na (2,6), jer smo u drugi redak koji sadrži 6 znakova već napisali "Test:". Ako prepišemo, postojeći znak bit će zamijenjen novim znakom na LCD-u. Također smo dodali kašnjenje 1 sekundu i povećali varijablu.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); kašnjenje_ms (1000); test_var ++;
STM8 s LCD-om - radi
Da biste testirali naš program, jednostavno prenesite kôd na naš kontroler i uključite ga mikro-USB priključkom. Imajte na umu da za rad LCD-a treba 5 V, pa je ploču potrebno napajati iz USB priključka. Prije smo ga napajali izravno iz ST-linka jer nam nije trebalo napajanje od 5V.

Kao što vidite, LCD radi kako se očekivalo, pri čemu se vrijednost testne varijable povećava približno za svaku sekundu. Također, imajte na umu da nismo koristili odbrojavanje i da smo koristili samo funkciju odgode da bismo stvorili to odgađanje, pa nemojte očekivati da će odgoda biti točna, u tu ćemo svrhu upotrijebiti odbrojače kasnije u drugom uputstvu.
Cjelovit rad projekta možete pronaći u videu dolje povezanom. Nadam se da ste uživali u vodiču i naučili nešto korisno. Ako imate bilo kakvih pitanja, ostavite ih u odjeljku za komentare ili upotrijebite naše forume za ostale tehničke upite.
