- Funcionament de la pantalla LCD de 16x2
- Diagrama de circuits a la interfície LCD amb microcontrolador STM8
- Biblioteca LCD STM8: fitxer de capçalera per a STM8S103F3P6
- Programa LCD per a microcontroladors STM8S
- STM8 amb LCD: funciona
La pantalla LCD alfanumèrica de 16x2 és la pantalla més utilitzada entre aficionats i aficionats. La pantalla és molt útil quan voleu mostrar informació bàsica a l'usuari i també us pot ajudar a provar o depurar el nostre codi. Aquest mòdul LCD de 16x2 en concret està fàcilment disponible i ha estat popular durant molt de temps. Podeu obtenir més informació sobre els conceptes bàsics del mòdul LCD de 16x2 a l'article enllaçat.
Per continuar amb la nostra sèrie de tutorials sobre microcontroladors STM8, en aquest tutorial aprendrem com interfície una pantalla LCD amb microcontrolador STM8. Prèviament, hem interfaçat LCD de 16x2 amb molts altres microcontroladors, a continuació es detallen els tutorials i els podeu comprovar si esteu interessats.
Si no sou nou de STM8, consulteu l'article sobre com començar l'article de STM8 Microcontroller per entendre els conceptes bàsics de la placa de control i de l'entorn de programació. No tractarem els conceptes bàsics d’aquest tutorial.
Funcionament de la pantalla LCD de 16x2
Com el seu nom indica, una pantalla LCD de 16x2 tindrà 16 columnes i 2 files. Així, en total, podrem mostrar 32 caràcters en aquesta pantalla i aquests caràcters poden ser alfabets o números o fins i tot símbols. A continuació es mostra un pinout LCD de 16x2 senzill que fem servir en aquest tutorial.

Com podeu veure, la pantalla té 16 pins i la podem dividir en cinc categories: pins d’alimentació, pins de contrast, pins de control, pins de dades i pins de retroil·luminació, tal com es mostra a la taula següent. Entrarem en els detalls de cada pin quan discutim el diagrama de circuits d’aquest tutorial.
| Categoria | Pin NO. | Nom del pin | Funció |
| Pins d'alimentació | 1 | VSS | Pin de terra, connectat a terra |
| 2 | VDD o Vcc | Pin de tensió + 5V | |
| Pin de contrast | 3 | V0 o VEE | Configuració del contrast, connectat a Vcc mitjançant una resistència variable. |
| Pins de control | 4 | RS | Registre Seleccioneu Pin, RS = 0 Mode d’ordres, RS = 1 Mode de dades |
| 5 | RW | Pin de lectura / escriptura, RW = 0 mode d’escriptura, RW = 1 mode de lectura | |
| 6 | E | Activa, un pols d’alç a baix ha d’habilitar la pantalla LCD | |
| Pins de dades | 7-14 | D0-D7 | Pins de dades, emmagatzema les dades que es mostraran a la pantalla LCD o les instruccions d’ordre |
| Pins de llum de fons | 15 | LED + o A | Per alimentar la llum de fons + 5V |
| 16 | LED- o K | Terra de llum de fons |
A la part posterior de la pantalla LCD, tal com es mostra a la imatge següent, hi trobareu dos punts negres, dins dels quals tenim el controlador LCD HD44780 IC (encerclat en vermell). El nostre microcontrolador hauria de comunicar-se amb aquest CI que al seu torn controlarà el que es mostra a la pantalla LCD. Si teniu curiositat per saber exactament com funciona tot això, consulteu el funcionament de la pantalla LCD de 16x2, on ja hem comentat detalladament el funcionament de la pantalla LCD.

En aquest tutorial, parlarem del diagrama de circuits i del codi per mostrar caràcters alfanumèrics (alfabets i números) en una pantalla LCD de 16x2 mitjançant ordres simples LCD_print _char i LCD_print_string . Aquestes ordres es poden utilitzar directament al programa després d'incloure el nostre fitxer de capçalera. El fitxer de capçalera tracta de la major part de les vostres coses, de manera que no és obligatori saber com funciona la pantalla o l'IC del controlador HD44780.
Diagrama de circuits a la interfície LCD amb microcontrolador STM8
El circuit complet STM8 LCD es pot trobar a la imatge següent. Com podeu veure, la connexió del controlador STM8S103F3P6 amb LCD és molt senzilla, tenim la pantalla LCD connectada directament a la nostra placa i l’enllaç ST també està connectat per programar la placa.

Els pins d'alimentació Vss i Vcc estan connectats al pin de 5 V de la placa STM8S. Tingueu en compte que el voltatge de funcionament de la pantalla LCD és de 5 V i està connectat per funcionar a 3,3 V. Per tant, tot i que el microcontrolador STM8S103F3P6 funciona a 3,3 V és obligatori tenir un subministrament de 5 V per a la pantalla LCD, podeu evitar-ho mitjançant un IC de controlador de càrrega, però no ho discutirem en aquest tutorial.
A continuació, tenim el pin de contrast que s’utilitza per configurar el contrast de la pantalla LCD, l’hem connectat al potenciòmetre perquè puguem controlar el contrast. Hem utilitzat una olla de 10 k, però també podeu utilitzar altres valors propers, la pota actua com a divisor de potencial per proporcionar 0-5 V al pin de contrast, normalment també podeu utilitzar una resistència directament per proporcionar uns 2,2 V per obtenir un contrast raonable valor. Després tenim els pins de restabliment (RS), lectura / escriptura (RW) i habilitació (E). El pin de lectura i escriptura està connectat a terra perquè no llegirem res de la pantalla LCD, sinó que només realitzarem operacions d’escriptura. Els altres dos pins de control Rs i E estan connectats als pins PA1 i PA2 respectivament.
Després tenim els pins de dades DB0 a DB7. La pantalla LCD de 16x2 pot funcionar en dos modes, un és un mode de funcionament de 8 bits on hem d’utilitzar tots els 8 pins de dades (DB0-DB7) de la pantalla LCD i l’altre és el mode de funcionament de 4 bits on només necessitem 4 pins de dades (DB4-DB7). El mode de 4 bits s’utilitza habitualment perquè requereix menys pins GPIO del controlador, de manera que també hem utilitzat el mode de 4 bits en aquest tutorial i només hem connectat els pins DB4, DB5, DB6 i DB7 als pins PD1, PD2, PD3, i PD4 respectivament.
Els dos darrers pins BLA i BLK s’utilitzen per alimentar el LED de llum de fons intern; hem utilitzat una resistència de 560 ohms com a resistència de limitació de corrent. El programador ST-Link està connectat com sempre, com en el nostre tutorial anterior. Vaig fer la connexió completa a la taula de proves i la meva configuració es veu així a la imatge següent.

Biblioteca LCD STM8: fitxer de capçalera per a STM8S103F3P6
Abans de continuar amb el diagrama del circuit, obtenim el fitxer de capçalera LCD STM8 de GitHub mitjançant el següent enllaç:
Fitxer de capçalera LCD 16x2 STM8S
Podeu descarregar la reposició completa i obtenir el fitxer stm8s103_LCD_16x2.h o senzillament el codi de l’enllaç anterior. Mentre configureu el projecte, assegureu-vos d'incloure tots els fitxers de capçalera necessaris al directori inc juntament amb aquest fitxer de capçalera.

Si no esteu segur de com afegir els fitxers de capçalera i compilar el programa, seguiu el vídeo al final d'aquesta pàgina. I si teniu curiositat per saber com funciona el codi dins del fitxer de capçalera, podeu consultar el PIC amb un tutorial LCD. El fitxer de capçalera utilitzat en aquest projecte és molt similar al que s’explica allà, de manera que no entrarem en detalls.
Programa LCD per a microcontroladors STM8S
Per a la demostració, programarem el nostre controlador STM8S per mostrar una cadena senzilla com "Circuit Digest" i, a continuació, incrementarem un valor de "Prova" per cada segon a la segona línia. El programa complet es troba a la part inferior d’aquesta pàgina. L’explicació és la següent.
Comencem el nostre programa definint els pins i afegint els fitxers de capçalera necessaris com sempre. Al nostre diagrama de circuits comentat anteriorment, hem connectat LCD_RS a PA1, de manera que l’hem definit com a LCD_RS GPIOA, GPIO_PIN_1. De la mateixa manera, també hem fet el mateix amb altres pins. Si segueixen un circuit diferent, assegureu-vos de canviar aquests valors en conseqüència.
#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__DB7_D_7
A continuació, dins del nostre programa principal, hem declarat les variables necessàries per a aquest codi de mostra. Tenim una variable de prova anomenada test_var que s’inicialitza a zero, incrementarem la variable i la mostrarem a la pantalla LCD. Els caràcters d1 a d4 representen els 4 dígits de la variable de prova perquè la nostra pantalla LCD no pot mostrar directament el valor int, els hem de convertir a caràcters.
// Declaracions variables int test_var = 0; char d4, d3, d2, d1;
La funció LCD_Begin () s’utilitza per inicialitzar la pantalla LCD. Aquesta funció inicialitzarà tots els pins GPIO necessaris i també configurarà la pantalla LCD en mode LCD de 16x2. A continuació, tenim la funció LCD_Clear () que s’utilitza per esborrar tots els valors de la pantalla LCD; això esborrarà tot el contingut de la pantalla LCD perquè quedi net per escriure nous valors. A continuació, tenim la funció LCD_Set_Cursor (x, y) on x i y són les posicions en què hem d’escriure el nostre nou personatge. Per exemple, (1,1) significa primera fila i primera Colum, de manera similar (2,12) significa segona columna fila 12, de la mateixa manera. Tingueu en compte que aquí tenim 2 files i 16 columnes, tal com hem comentat anteriorment.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Ara, la pantalla LCD està configurada, esborrada i el cursor al seu lloc. El següent és imprimir alguna cosa a la pantalla. Podem utilitzar LCD_Print_String ("Sample String") per imprimir una cadena a LCD i LCD_Print_Char (a) per imprimir un valor de caràcter a la pantalla LCD. Al nostre programa aquí hem imprès “STM8S103F3P3 LCD” i hem creat un retard de 5 segons mitjançant el codi següent.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Després del retard de 5 segons, tornem a esborrar la pantalla LCD i mostrarem "Circuit Digest" a la primera fila i "Test:" I la segona fila.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Prova:");
Dins el temps de bucle, anem a dividir el valor a la variable sencera test_var en caràcters individuals de manera que es pugui mostrar a la pantalla LCD utilitzant els operadors de divisió i mòdul simples. També hem afegit '0' per convertir el valor ASCII al caràcter.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
A continuació, hem establert el cursor a (2,6) perquè ja hem escrit "Prova" a la segona fila, que té 6 caràcters. Si sobreescrivim, el caràcter existent se substituirà per un de nou a la pantalla LCD. També hem afegit un retard d'1 segon i augmentem la variable.
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 amb LCD: funciona
Per provar el nostre programa, simplement pengeu el codi al nostre controlador i engegueu-lo amb el port micro-USB. Tingueu en compte que la pantalla LCD necessita 5 V per funcionar, de manera que és obligatori alimentar la placa des del port USB. Prèviament l’hem alimentat directament des de ST-link perquè no necessitàvem el subministrament de 5 V.

Com podeu veure, la pantalla LCD funciona tal com s’esperava, amb el valor de la variable de prova que s’incrementa cada segon aproximadament. Tingueu en compte, a més, que no hem utilitzat temporitzadors i que només hem utilitzat la funció de retard per crear aquest retard, així que no espereu que la durada del retard sigui exacta; utilitzarem temporitzadors més endavant en un altre tutorial amb aquest propòsit.
El funcionament complet del projecte es pot trobar al vídeo enllaçat a continuació. Espero que us hagi agradat el tutorial i hàgiu après alguna cosa útil. Si teniu cap pregunta, deixeu-les a la secció de comentaris o utilitzeu els nostres fòrums per a altres consultes tècniques.
