- Funcționarea afișajului LCD 16x2
- Schema circuitului la interfața LCD cu microcontrolerul STM8
- Biblioteca LCD STM8 - Fișier antet pentru STM8S103F3P6
- Program LCD pentru microcontroler STM8S
- STM8 cu LCD - Funcționează
Afișajul LCD alfanumeric 16x2 este cel mai frecvent utilizat afișaj în rândul pasionaților și pasionaților. Afișajul este foarte util atunci când doriți să afișați informații de bază utilizatorului și poate ajuta, de asemenea, la testarea sau depanarea codului nostru. Acest modul LCD 16x2 special este ușor disponibil și este popular de mult timp. Puteți afla mai multe despre elementele de bază ale modulului LCD 16x2 în articolul legat.
Pentru a continua cu seria noastră de tutoriale STM8 Microcontroller, în acest tutorial, vom învăța cum să interfațăm un LCD cu STM8 Microcontroller. Am interfațat anterior LCD 16x2 cu multe alte microcontrolere, tutorialele sunt listate mai jos și le puteți verifica dacă sunteți interesat.
Dacă sunteți nou în STM8, verificați noțiunile de bază cu articolul despre microcontrolerul STM8 pentru a înțelege elementele de bază ale plăcii controlerului și mediul de programare. Nu vom acoperi elementele de bază din acest tutorial.
Funcționarea afișajului LCD 16x2
După cum sugerează și numele, un ecran LCD de 16x2 va avea 16 coloane și 2 rânduri. Deci, în total, vom putea afișa 32 de caractere pe acest ecran și aceste caractere pot fi alfabete sau numere sau chiar simboluri. Un pinout LCD de 16x2 simplu pe care îl folosim în acest tutorial este prezentat mai jos-
După cum puteți vedea, afișajul are 16 pini și îl putem împărți în cinci categorii, pini de putere, pini de contrast, pini de control, pini de date și pini de iluminare de fundal, așa cum se arată în tabelul de mai jos. Vom intra în detaliile fiecărui pin când vom discuta schema circuitului acestui tutorial.
Categorie | PIN nr. | Nume PIN | Funcţie |
Pinii de alimentare | 1 | VSS | Pinul de masă, conectat la masă |
2 | VDD sau Vcc | Pin de tensiune + 5V | |
Pin de contrast | 3 | V0 sau VEE | Setarea contrastului, conectată la Vcc printr-un rezistor variabil. |
Pinii de control | 4 | RS | Înregistrare Selectați Pin, RS = 0 Mod comandă, RS = 1 Mod date |
5 | RW | Citire / Scriere pin, RW = 0 Mod scriere, RW = 1 Mod citire | |
6 | E | Activați, pentru a activa ecranul LCD este nevoie de un impuls de la mare la mic | |
Pinii de date | 7-14 | D0-D7 | Pinii de date, stochează datele care trebuie afișate pe ecranul LCD sau instrucțiunile de comandă |
Pinii de iluminare din spate | 15 | LED + sau A | Pentru a alimenta iluminarea din spate + 5V |
16 | LED- sau K | Teren de iluminare din spate |
Pe partea din spate a ecranului LCD, așa cum se arată în imaginea de mai jos, veți găsi două puncte negre, în interiorul cărora avem driverul LCD HD44780 IC (înconjurat în roșu). Microcontrolerul nostru ar trebui să comunice cu acest IC care, la rândul său, va controla ceea ce este afișat pe ecranul LCD. Dacă sunteți curioși să știți exact cum funcționează toate acestea, ar trebui să verificați funcționarea afișajului LCD 16x2, unde am discutat deja cum funcționează LCD-ul în detaliu.
În acest tutorial, vom discuta schema circuitului și codul pentru a afișa caractere alfanumerice (alfabete și numere) pe un ecran LCD de 16x2 folosind comenzi simple LCD_print _char și LCD_print_string . Aceste comenzi pot fi utilizate direct în program după includerea fișierului nostru antet. Fișierul de antet tratează toate cele mai multe lucruri pentru dvs., deci nu este obligatoriu să știți cum funcționează afișajul sau IC-ul driverului HD44780.
Schema circuitului la interfața LCD cu microcontrolerul STM8
Circuitul complet LCD STM8 poate fi găsit în imaginea de mai jos. După cum puteți vedea, conexiunea pentru controlerul STM8S103F3P6 cu LCD este foarte simplă, avem afișajul LCD conectat direct la placa noastră și ST-link este, de asemenea, conectat pentru a programa placa.
Pinii de alimentare Vss și Vcc sunt conectați la pinul de 5V de pe placa STM8S, rețineți că tensiunea de funcționare a LCD-ului este de 5V și este conectată pentru a funcționa pe 3.3V. Deci, chiar dacă microcontrolerul STM8S103F3P6 funcționează pe 3.3V este obligatoriu să aveți o sursă de 5V pentru LCD, puteți evita acest lucru folosind un IC de control de încărcare, dar nu vom discuta acest lucru în acest tutorial.
Apoi, avem pinul de contrast care este utilizat pentru a seta contrastul LCD-ului, l-am conectat la potențiometru, astfel încât să putem controla contrastul. Am folosit un vas de 10k, dar puteți utiliza și alte valori din apropiere, vasul acționează ca un divizor potențial pentru a furniza 0-5 V pinului de contrast, de obicei puteți utiliza și un rezistor direct pentru a furniza în jur de 2,2V pentru un contrast rezonabil valoare. Apoi avem pinii de resetare (RS), citire / scriere (RW) și Enable (E). Pinul de citire-scriere este împământat, deoarece nu vom citi nimic de pe ecranul LCD, vom efectua doar operații de scriere. Ceilalți doi pini de control Rs și E sunt conectați la pinii PA1 și respectiv PA2.
Apoi avem pinii de date DB0 la DB7. Ecranul LCD de 16x2 poate funcționa în două moduri, unul este un mod de funcționare pe 8 biți în care trebuie să folosim toți cei 8 pini de date (DB0-DB7) de pe ecranul LCD, iar celălalt este modul de funcționare pe 4 biți în care avem nevoie doar de 4 pini de date (DB4-DB7). Modul pe 4 biți este utilizat în mod obișnuit, deoarece necesită mai puțini pini GPIO de la controler, deci am folosit și modul 4 biți în acest tutorial și am conectat doar pini DB4, DB5, DB6 și DB7 la pinii PD1, PD2, PD3, respectiv PD4.
Ultimii doi pini BLA și BLK sunt utilizați pentru alimentarea LED-ului de iluminare internă, am folosit un rezistor de 560 ohmi ca rezistor de limitare a curentului. Programatorul ST-Link este conectat ca întotdeauna ca în tutorialul nostru anterior. Am făcut conexiunea completă pe panou și configurarea mea arată așa cum se arată în imaginea de mai jos.
Biblioteca LCD STM8 - Fișier antet pentru STM8S103F3P6
Înainte de a continua în diagrama circuitului, să luăm fișierul antet LCD STM8 de la GitHub folosind următorul link-
Fișier antet LCD STM8S 16x2
Puteți să descărcați repo completă și să obțineți fișierul stm8s103_LCD_16x2.h sau să simplificați codul de pe linkul de mai sus. În timp ce setați proiectul, asigurați-vă că includeți toate fișierele antet necesare în directorul inc împreună cu acest fișier antet.
Dacă nu sunteți sigur cum să adăugați fișierele antet și să compilați programul, urmați videoclipul din partea de jos a acestei pagini. Și dacă sunteți curios cu privire la modul în care funcționează codul din fișierul antet, puteți verifica PIC cu un tutorial LCD. Fișierul antet utilizat în acest proiect este foarte similar cu cel explicat acolo, deci nu vom intra în detalii despre acest lucru.
Program LCD pentru microcontroler STM8S
Pentru demonstrație, vom programa controlerul nostru STM8S pentru a afișa un șir simplu precum „Circuit Digest” și apoi vom incrementa o valoare „Test” pentru fiecare secundă în a doua linie. Programul complet poate fi găsit în partea de jos a acestei pagini. Explicația este următoarea.
Începem programul definind pinii și adăugând fișierele antet necesare ca întotdeauna. În schema de circuite discutată mai sus, am conectat LCD_RS la PA1, așa că am definit-o ca LCD_RS GPIOA, GPIO_PIN_1. În mod similar, am făcut același lucru și pentru alte știfturi. Dacă urmează un alt circuit, asigurați-vă că modificați aceste valori în consecință.
#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 "GP_D_7
În continuare, în cadrul programului nostru principal, am declarat variabilele necesare pentru acest exemplu de cod. Avem o variabilă de test numită test_var care este inițializată la zero, vom incrementa variabila și o vom afișa pe ecranul LCD. Caracterele de la d1 la d4 reprezintă cele 4 cifre ale variabilei de test, deoarece LCD-ul nostru nu poate afișa direct valoarea int, trebuie să le convertim în caractere.
// Declarații variabile int test_var = 0; char d4, d3, d2, d1;
Funcția LCD_Begin () este utilizată pentru a inițializa ecranul LCD. Această funcție va inițializa toți pinii GPIO necesari și va seta LCD-ul în modul LCD 16x2. Apoi avem funcția LCD_Clear () care este utilizată pentru a șterge toate valorile de pe LCD, aceasta va șterge totul de pe LCD, astfel încât să fie curat să scrieți valori noi. Apoi avem funcția LCD_Set_Cursor (x, y) unde x și y sunt pozițiile în care trebuie să scriem noul nostru caracter. De exemplu, (1,1) înseamnă primul rând și primul Colum, în mod similar (2,12) înseamnă al doilea rând 12 coloană, la fel. Rețineți că avem aici 2 rânduri și 16 coloane așa cum am discutat mai devreme.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Acum, ecranul LCD este setat, șters și cursorul se află la locul respectiv. Următorul lucru este să imprimați ceva pe ecran. Putem folosi LCD_Print_String („Sample String”) pentru a imprima un șir pe LCD și LCD_Print_Char (a) pentru a imprima o valoare de caracter pe LCD. În programul nostru de aici am imprimat „STM8S103F3P3 LCD” și am creat o întârziere de 5 secunde folosind codul de mai jos.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
După întârzierea de 5 secunde, ștergem din nou ecranul LCD și afișăm „Circuit Digest” în primul rând și „Test:” I al doilea rând.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
În interiorul buclei while , vom împărți valoarea variabilei întregi test_var în caractere individuale, astfel încât să poată fi afișată pe ecranul LCD utilizând operatori simpli de diviziune și modul. De asemenea, am adăugat „0” pentru a converti valoarea ASCII în caracter.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Apoi am setat cursorul la (2,6) pentru că am scris deja „Test:” în al doilea rând, care are 6 caractere. Dacă suprascriem, caracterul existent va fi înlocuit cu un caracter nou pe ecranul LCD. De asemenea, am adăugat o întârziere cu 1 secundă și incrementăm variabila.
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 cu LCD - Funcționează
Pentru a testa programul nostru, pur și simplu încărcați codul în controlerul nostru și porniți-l cu portul micro-USB. Rețineți că ecranul LCD necesită 5V pentru funcționare, deci este obligatoriu să alimentați placa de la portul USB. Anterior, l-am alimentat direct de la ST-link, deoarece nu aveam nevoie de sursa de 5V.
După cum puteți vedea, LCD-ul funcționează așa cum era de așteptat, valoarea variabilă de test fiind incrementată pentru fiecare secundă aproximativ. De asemenea, rețineți că nu am folosit temporizatoare și am folosit doar funcția de întârziere pentru a crea această întârziere, așa că nu vă așteptați ca durata întârzierii să fie exactă, vom folosi temporizatoarele mai târziu într-un alt tutorial în acest scop.
Funcționarea completă a proiectului poate fi găsită în videoclipul legat mai jos. Sper că ți-a plăcut tutorialul și ai învățat ceva util. Dacă aveți întrebări, lăsați-le în secțiunea de comentarii sau utilizați forumurile noastre pentru alte întrebări tehnice.