- Arbeider med 16x2 LCD-skjerm
- Kretsskjema til grensesnitt LCD med STM8 mikrokontroller
- STM8 LCD-bibliotek - Overskriftsfil for STM8S103F3P6
- LCD-program for STM8S mikrokontroller
- STM8 med LCD - Arbeider
Den 16x2 alfanumeriske LCD-skjermen er den mest brukte skjermen blant hobbyister og entusiaster. Skjermen er veldig nyttig når du vil vise grunnleggende informasjon til brukeren, og kan også hjelpe til med å teste eller feilsøke koden vår. Denne spesielle 16x2 LCD-modulen er lett tilgjengelig og har vært populær i lang tid. Du kan lære mer om det grunnleggende i 16x2 LCD-modulen i den koblede artikkelen.
For å fortsette med vår serie med STM8 Microcontroller-opplæringsprogrammer, i denne opplæringen, lærer vi hvordan vi kan grensesnitt en LCD med STM8 Microcontroller. Vi har tidligere grensesnitt 16x2 LCD med mange andre mikrokontrollere også, opplæringsprogrammene er oppført nedenfor, og du kan sjekke dem hvis du er interessert.
Hvis du ikke er kjent med STM8, kan du sjekke ut hvordan du kommer i gang med STM8 Microcontroller-artikkelen for å forstå det grunnleggende om kontrollkortet og programmeringsmiljøet. Vi vil ikke dekke det grunnleggende i denne opplæringen.
Arbeider med 16x2 LCD-skjerm
Som navnet antyder, vil en 16x2 LCD ha 16 kolonner og 2 rader. Så totalt sett vil vi kunne vise 32 tegn på denne skjermen, og disse tegnene kan være alfabet eller tall eller til og med symboler. En enkel 16x2 LCD pinout som vi bruker i denne opplæringen er vist nedenfor -
Som du kan se, har skjermen 16 pinner, og vi kan dele den inn i fem kategorier, Power Pins, contrast pin, Control Pins, Data pins og Backlight pins som vist i tabellen nedenfor. Vi vil komme inn i detaljene for hver pin når vi diskuterer kretsskjemaet for denne opplæringen.
Kategori | Pin NO. | Pin-navn | Funksjon |
Strømpinner | 1 | VSS | Jordpinne, koblet til bakken |
2 | VDD eller Vcc | Spenningsstift + 5V | |
Kontraststift | 3 | V0 eller VEE | Kontrastinnstilling, koblet til Vcc gjennom en variabel motstand. |
Kontrollpinner | 4 | RS | Registrer Velg Pin, RS = 0 Kommandomodus, RS = 1 Datamodus |
5 | RW | Les / skriv pin, RW = 0 skrivemodus, RW = 1 lesemodus | |
6 | E | Aktiver, behov for høy til lav puls for å aktivere LCD-skjermen | |
Datapinner | 7-14 | D0-D7 | Data Pins, Lagrer dataene som skal vises på LCD eller kommandoinstruksjonene |
Baklyspinner | 15 | LED + eller A. | For å drive bakgrunnsbelysning + 5V |
16 | LED- eller K | Bakgrunnsbelysning |
På baksiden av LCD-skjermen, som vist på bildet nedenfor, finner du to svarte prikker, der vi har HD44780 LCD-driver IC (omkranset i rødt). Mikrokontrolleren vår skal kommunisere med denne ICen som igjen vil kontrollere hva som vises på LCD-skjermen. Hvis du er nysgjerrig på å vite hvordan alt dette fungerer, bør du sjekke hvordan 16x2 LCD-skjermen fungerer, hvor vi allerede har diskutert hvordan LCD-skjermen fungerer i detalj.
I denne opplæringen vil vi diskutere kretsskjemaet og koden for å vise alfameriske tegn (alfabeter og tall) på en 16x2 LCD-skjerm ved hjelp av enkle kommandoer LCD_print _char og LCD_print_string . Disse kommandoene kan brukes direkte i programmet etter å ha tatt med headerfilen vår. Overskriftsfilen tar for seg alt det meste for deg, så det er ikke obligatorisk å vite hvordan skjermen eller HD44780 driver IC fungerer.
Kretsskjema til grensesnitt LCD med STM8 mikrokontroller
Den komplette STM8 LCD-kretsen finner du i bildet nedenfor. Som du kan se er forbindelsen til STM8S103F3P6-kontroller med LCD veldig enkel, vi har LCD-skjermen direkte koblet til kortet vårt, og ST-lenken er også koblet til å programmere kortet.
Strømpinnene Vss og Vcc er koblet til 5V-pinnen på STM8S-kortet, merk at driftsspenningen til LCD er 5V og er koblet til å fungere på 3,3V. Så selv om STM8S103F3P6 mikrokontroller opererer på 3,3 V, er det obligatorisk å ha en 5 V-forsyning for LCD-skjermen, kan du unngå dette ved å bruke en ladestyring IC, men vi vil ikke diskutere det i denne veiledningen.
Deretter har vi kontrastpinnen som brukes til å stille kontrasten på LCD-skjermen, vi har koblet den til potensiometeret slik at vi kan kontrollere kontrasten. Vi har brukt en 10k potte, men du kan også bruke andre verdier i nærheten, potten fungerer som en potensiell skillelinje for å gi 0-5 V til kontrastpinnen, vanligvis kan du også bruke en motstand direkte for å gi rundt 2,2 V for rimelig kontrast verdi. Så har vi reset (RS), Read / Write (RW) og Enable (E) pins. Les-skriv-pinnen er jordet fordi vi ikke leser noe fra LCD-skjermen, vi utfører bare skriveoperasjoner. De to andre kontrollpinnene Rs og E er koblet til henholdsvis PA1 og PA2 pinner.
Så har vi datapinnene DB0 til DB7. 16x2 LCD kan fungere i to moduser, den ene er en 8-biters driftsmodus hvor vi må bruke alle de 8 datapinnene (DB0-DB7) på LCD-skjermen, og den andre er 4-biters driftsmodus der vi bare trenger 4 datapinner (DB4-DB7). 4-bit-modus brukes ofte fordi den krever mindre GPIO-pinner fra kontrolleren, så vi har også brukt 4-bit-modus i denne opplæringen og har bare koblet pinner DB4, DB5, DB6 og DB7 til pinner PD1, PD2, PD3 og PD4.
De to siste pinnene BLA og BLK brukes til å drive den interne bakgrunnsbelysningen, vi har brukt en 560-ohm motstand som en strømbegrensende motstand. ST-Link-programmereren er koblet til som alltid som i vår forrige opplæring. Jeg opprettet den komplette tilkoblingen på brødplaten, og oppsettet mitt ser slik ut som vist på bildet nedenfor.
STM8 LCD-bibliotek - Overskriftsfil for STM8S103F3P6
Før vi fortsetter i kretsskjemaet, la oss få STM8 LCD-headerfilen fra GitHub ved hjelp av følgende lenke-
STM8S 16x2 LCD headerfil
Du kan enten laste ned hele repoen og få stm8s103_LCD_16x2.h- filen eller enkelt koden fra lenken ovenfor. Mens du setter inn prosjektet, må du sørge for at du inkluderer alle nødvendige headerfiler i inc-katalogen sammen med denne headerfilen.
Hvis du ikke er sikker på hvordan du legger til topptekstfiler og kompilerer programmet, følger du videoen nederst på denne siden. Og hvis du er nysgjerrig på hvordan koden i toppteksten fungerer, kan du sjekke ut PIC med en LCD-veiledning. Overskriftsfilen som brukes i dette prosjektet er veldig lik den som er forklart der, så vi kommer ikke inn på detaljer om det.
LCD-program for STM8S mikrokontroller
For demonstrasjonen vil vi programmere STM8S-kontrolleren til å vise en enkel streng som "Circuit Digest", og deretter øker vi en "Test" -verdi for hvert sekund i andre linje. Hele programmet finner du nederst på denne siden. Forklaringen er som følger.
Vi starter programmet vårt med å definere pinnene og legge til de nødvendige headerfilene som alltid. I vårt ovenfor omtalte kretsskjema har vi koblet LCD_RS til PA1, så vi har definert det som LCD_RS GPIOA, GPIO_PIN_1. På samme måte har vi gjort det samme for andre pinner også. Hvis de følger en annen krets, må du endre disse verdiene tilsvarende.
#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 #Bind_DIOD_DIN
Neste inne i vårt hovedprogram har vi deklarert variablene som kreves for denne eksempelkoden. Vi har en testvariabel kalt test_var som er initialisert til null, vi øker variabelen og viser den på LCD-skjermen. Tegnene d1 til d4 representerer de 4 sifrene i testvariabelen fordi LCD-skjermen vår ikke kan vise int-verdien direkte, vi må konvertere dem til tegn.
// Variable erklæringer int test_var = 0; røye d4, d3, d2, d1;
Den LCD_Begin () funksjonen brukes til å initialisere LCD. Denne funksjonen vil initialisere alle nødvendige GPIO-pinner og sette LCD-skjermen i 16x2 LCD-modus. Så har vi LCD_Clear () -funksjonen som brukes til å fjerne alle verdiene på LCD-skjermen, dette vil slette alt på LCD-skjermen slik at det er rent å skrive nye verdier. Så har vi LCD_Set_Cursor (x, y) -funksjonen der x og y er posisjonene vi trenger for å skrive vår nye karakter. For eksempel betyr (1,1) første rad og første Colum, tilsvarende (2,12) betyr andre rad 12 kolonne, på samme måte. Merk at vi har 2 rader og 16 kolonner her som vi diskuterte tidligere.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Nå er LCD-skjermen satt, fjernet, og markøren er på stedet. Neste ting er å skrive ut noe på skjermen. Vi kan bruke LCD_Print_String (“Sample String”) til å skrive ut en streng til LCD og LCD_Print_Char (a) for å skrive ut en tegnverdi til LCD-skjermen. I vårt program her har vi skrevet ut “STM8S103F3P3 LCD” og opprettet en forsinkelse på 5 sekunder ved hjelp av koden nedenfor.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Etter 5 sekunders forsinkelse tømmer vi LCD-skjermen igjen og viser "Circuit Digest" på første rad og "Test:" I andre rad.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Inne i mens sløyfen vil vi dele verdien på heltallvariabelen test_var i individuelle tegn slik at den kan vises på LCD-skjermen ved hjelp av enkle delings- og moduloperatorer . Vi har også lagt til '0' for å konvertere ASCII-verdien til tegnet.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Så har vi satt markøren til (2,6) fordi vi allerede har skrevet “Test:” i andre rad som er på 6 tegn. Hvis vi overskriver, vil det eksisterende tegnet erstattes med et nytt tegn på LCD-skjermen. Vi har også lagt til en forsinkelse på 1 sekund og øker variabelen.
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 med LCD - Arbeider
For å teste programmet vårt, er det bare å laste opp koden til kontrolleren vår og slå den på med mikro-USB-porten. Merk at LCD-skjermen krever 5V for å fungere, så det er obligatorisk å strømforsyne kortet fra USB-porten. Vi har tidligere drevet den direkte fra ST-link fordi vi ikke trengte 5V-forsyningen.
Som du ser, fungerer LCD-skjermen som forventet, og testvariabelverdien økes for hvert sekund. Vær også oppmerksom på at vi ikke har brukt tidtakere og bare har brukt forsinkelsesfunksjon for å lage denne forsinkelsen, så ikke forvent at forsinkelsens varighet er nøyaktig, vi vil bruke tidtakere senere i en annen opplæring for det formålet.
Fullstendig arbeid av prosjektet finner du i videoen som er lenket nedenfor. Håper du likte opplæringen og lærte noe nyttig. Hvis du har spørsmål, kan du legge dem i kommentarseksjonen eller bruke forumene våre for andre tekniske spørsmål.