- 16x2 LCD displeja darbība
- Ķēdes shēma uz saskarnes LCD ar STM8 mikrokontrolleru
- STM8 LCD bibliotēka - galvenes fails STM8S103F3P6
- LCD programma STM8S mikrokontrollerim
- STM8 ar LCD - darbojas
Hobijiem un entuziastiem visbiežāk tiek izmantots 16x2 burtciparu LCD displejs. Displejs ir ļoti noderīgs, ja vēlaties parādīt lietotājam pamatinformāciju, un tas var arī palīdzēt pārbaudīt vai atkļūdot mūsu kodu. Šis konkrētais 16x2 LCD modulis ir viegli pieejams un ir bijis populārs jau ilgu laiku. Saistītajā rakstā varat uzzināt vairāk par 16x2 LCD moduļa pamatiem.
Lai turpinātu mūsu STM8 mikrokontrolleru apmācību sēriju, šajā apmācībā mēs uzzināsim, kā saskarni veidot LCD ar STM8 mikrokontrolleru. Mēs jau iepriekš esam saskarnē 16x2 LCD ar daudziem citiem mikrokontrolleriem, apmācības ir uzskaitītas zemāk, un, ja jūs interesē, varat tās pārbaudīt.
Ja esat jauns STM8 lietotājs, pārbaudiet, kā sākt darbu ar STM8 mikrokontrolleru, lai izprastu kontroliera paneļa un programmēšanas vides pamatus. Šajā apmācībā mēs neatklāsim pamatus.
16x2 LCD displeja darbība
Kā norāda nosaukums, 16x2 LCD ekrānā būs 16 kolonnas un 2 rindas. Tātad kopumā šajā displejā varēsim parādīt 32 rakstzīmes, un šīs rakstzīmes var būt alfabēti vai skaitļi, vai pat simboli. Zemāk ir parādīts vienkāršs 16x2 LCD spraudnis, ko izmantojam šajā apmācībā.
Kā redzat, displejā ir 16 tapas, un mēs to varam sadalīt piecās kategorijās: strāvas tapas, kontrasta tapa, vadības tapas, datu tapas un aizmugures apgaismojuma tapas, kā parādīts zemāk esošajā tabulā. Mēs apspriedīsim katras tapas detaļas, kad mēs apspriedīsim šīs apmācības shēmu.
Kategorija | PIN NO. | Piespraudes nosaukums | Funkcija |
Spēka tapas | 1 | VSS | Zemējuma tapa, savienota ar zemi |
2 | VDD vai Vcc | Sprieguma tapa + 5V | |
Kontrasta tapa | 3 | V0 vai VEE | Kontrasta iestatījums, savienots ar Vcc caur mainīgu rezistoru. |
Kontroles adatas | 4 | RS | Reģistrēties Atlasiet Piespraust, RS = 0 komandu režīms, RS = 1 Datu režīms |
5 | RW | Lasīšanas / rakstīšanas tapa, RW = 0 rakstīšanas režīms, RW = 1 lasīšanas režīms | |
6 | E | Iespējot, LCD jāiespējo no augsta līdz zemam impulsam | |
Datu tapas | 7-14 | D0-D7 | Datu tapas, glabā LCD displejā parādāmos datus vai komandu instrukcijas |
Apgaismojuma tapas | 15 | LED + vai A | Lai darbinātu fona apgaismojumu + 5V |
16 | LED vai K | Fona apgaismojums |
LCD aizmugurē, kā parādīts attēlā zemāk, jūs atradīsit divus melnus punktus, kuru iekšpusē mums ir HD44780 LCD draivera IC (apvilkts sarkanā krāsā). Mūsu mikrokontrollerim vajadzētu sazināties ar šo IC, kas savukārt kontrolēs to, kas tiek parādīts LCD. Ja vēlaties zināt, kā tieši tas viss darbojas, jums jāpārbauda 16x2 LCD displeja darbība, kur mēs jau esam detalizēti apsprieduši, kā LCD darbojas.
Šajā apmācībā mēs apspriedīsim shēmu un kodu, lai parādītu alfameriskās rakstzīmes (alfabētus un ciparus) 16x2 LCD displejā, izmantojot vienkāršas komandas LCD_print _char un LCD_print_string . Šīs komandas var tieši izmantot programmā pēc mūsu galvenes faila iekļaušanas. Galvenes fails attiecas uz lielāko daļu jums domāto lietu, tāpēc nav obligāti jāzina, kā darbojas displejs vai HD44780 draivera IC.
Ķēdes shēma uz saskarnes LCD ar STM8 mikrokontrolleru
Pilna STM8 LCD shēma ir atrodama zemāk esošajā attēlā. Kā redzat , STM8S103F3P6 kontroliera savienojums ar LCD ir ļoti vienkāršs, mums LCD displejs ir tieši savienots ar mūsu paneli, un ST-saite ir pievienota arī plates programmēšanai.
Strāvas tapas Vss un Vcc ir savienotas ar 5 V tapu uz STM8S plates. Ņemiet vērā, ka LCD darba spriegums ir 5 V un ir pievienots darbam ar 3,3 V. Tātad, pat ja STM8S103F3P6 mikrokontrolleris darbojas ar 3,3 V, LCD displejam ir jābūt 5 V barošanas avotam, no tā var izvairīties, izmantojot uzlādes kontrollera IC, taču šajā apmācībā mēs to neapspriedīsim.
Pēc tam mums ir kontrasta tapa, ko izmanto, lai iestatītu LCD kontrastu, mēs to esam savienojuši ar potenciometru, lai mēs varētu kontrolēt kontrastu. Mēs izmantojām 10k pot, bet jūs varat izmantot arī citas tuvumā esošās vērtības, pot darbojas kā potenciāls dalītājs, lai nodrošinātu 0-5 V kontrasta tapai, parasti jūs varat arī tieši izmantot rezistoru, lai nodrošinātu saprātīgu kontrastu ap 2.2V vērtība. Tad mums ir atiestatīšanas (RS), lasīšanas / rakstīšanas (RW) un iespējošanas (E) tapas. Lasīšanas-rakstīšanas tapa ir iezemēta, jo mēs neko nelasīsim no LCD, bet tikai rakstīšanas darbības. Pārējie divi vadības kontakti Rs un E ir attiecīgi savienoti ar PA1 un PA2 tapām.
Tad mums ir datu tapas no DB0 līdz DB7. 16x2 LCD var darboties divos režīmos, viens ir 8 bitu darbības režīms, kurā mums jāizmanto visas 8 datu tapas (DB0-DB7) LCD, bet otrs ir 4 bitu darbības režīms, kurā mums ir nepieciešami tikai 4 datu tapas (DB4-DB7). Parasti tiek izmantots 4 bitu režīms, jo tas prasa mazāk GPIO tapu no kontrollera, tāpēc šajā apmācībā esam izmantojuši arī 4 bitu režīmu un PD1, PD2, PD3 tapām esam pievienojuši tikai DB4, DB5, DB6 un DB7 tapas un PD4.
Divas pēdējās tapas BLA un BLK tiek izmantotas iekšējā apgaismojuma gaismas diodes darbināšanai, kā strāvas ierobežošanas rezistoru esam izmantojuši 560 omu rezistoru. ST-Link programmētājs ir savienots tāpat kā vienmēr mūsu iepriekšējā apmācībā. Es izveidoju pilnīgu savienojumu uz paneļa, un mans iestatījums izskatās šādi, kā parādīts zemāk esošajā attēlā.
STM8 LCD bibliotēka - galvenes fails STM8S103F3P6
Pirms turpināt ķēdes shēmu, saņemsim STM8 LCD galvenes failu no GitHub, izmantojot šādu saiti-
STM8S 16x2 LCD galvenes fails
Jūs varat vai nu lejupielādēt pilnu repo un iegūt failu stm8s103_LCD_16x2.h, vai arī vienkārši ievadīt kodu no iepriekš norādītās saites. Iestatot projektu, pārliecinieties, ka visi nepieciešamie galvenes faili ir iekļauti inc direktorijā kopā ar šo galvenes failu.
Ja neesat pārliecināts, kā pievienot galvenes failus un sastādīt programmu, izpildiet video šīs lapas apakšdaļā. Un, ja jums ir interese par to, kā darbojas kods galvenes failā, varat pārbaudīt PIC ar LCD apmācību. Šajā projektā izmantotais galvenes fails ir ļoti līdzīgs tajā paskaidrotajam, tāpēc mēs to neiedziļināsimies.
LCD programma STM8S mikrokontrollerim
Demonstrācijai mēs ieprogrammēsim mūsu STM8S kontrolieri, lai parādītu vienkāršu virkni, piemēram, “Circuit Digest”, un pēc tam mēs palielināsim “Test” vērtību katrai sekundei otrajā rindā. Pilna programma ir atrodama šīs lapas apakšdaļā. Paskaidrojums ir šāds.
Mēs sākam savu programmu, definējot tapas un kā vienmēr pievienojot nepieciešamos galvenes failus. Iepriekš aprakstītajā shēmā mēs esam savienojuši LCD_RS ar PA1, tāpēc mēs to esam definējuši kā LCD_RS GPIOA, GPIO_PIN_1. Līdzīgi to pašu esam darījuši arī citām tapām. Ja viņi seko citai shēmai, pārliecinieties, ka esat attiecīgi mainījis šīs vērtības.
#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 GPIODs "GPIO_PIN_B4_Glode # GP7_PIND # # Definēt LCFI
Tālāk mūsu galvenajā programmā mēs esam deklarējuši mainīgos, kas nepieciešami šim parauga kodam. Mums ir testa mainīgais ar nosaukumu test_var, kas tiek inicializēts līdz nullei, mēs palielināsim mainīgo un parādīsim to LCD. Rakstzīmes no d1 līdz d4 apzīmē testa mainīgā 4 ciparus, jo mūsu LCD nevar tieši parādīt int vērtību, tās mums jāpārvērš rakstzīmēs.
// Mainīgo deklarācijas int test_var = 0; char d4, d3, d2, d1;
LCD_Begin () funkcija tiek izmantota, lai sāktu LCD. Šī funkcija inicializēs visas nepieciešamās GPIO tapas un arī iestatīs LCD 16x2 LCD režīmā. Tad mums ir funkcija LCD_Clear (), kuru izmanto, lai notīrītu visas vērtības LCD, tas visu izdzēsīs LCD, lai būtu vērts rakstīt jaunas vērtības. Tad mums ir funkcija LCD_Set_Cursor (x, y), kur x un y ir pozīcijas, kurās mums jāuzraksta mūsu jaunais raksturs. Piemēram, (1,1) nozīmē pirmo rindu un pirmo kolonnu, tāpat (2,12) nozīmē arī otro 12. rindas kolonnu. Ņemiet vērā, ka mums šeit ir 2 rindas un 16 kolonnas, kā mēs iepriekš apspriedām.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Tagad LCD ir iestatīts, notīrīts un kursors atrodas vietā. Nākamā lieta ir kaut ko izdrukāt uz ekrāna. Mēs varam izmantot LCD_Print_String (“Sample String”), lai drukātu virkni uz LCD, un LCD_Print_Char (a), lai drukātu rakstzīmju vērtību LCD. Šajā programmā mēs esam izdrukājuši “STM8S103F3P3 LCD” un izveidojuši 5 sekunžu aizkavi, izmantojot zemāk redzamo kodu.
Lcd_Print_String ("STM8S103F3P3 LCD"); kavēšanās_ms (5000);
Pēc 5 sekunžu aiztures mēs atkal notīriet LCD un pirmajā rindā parādīsim “Circuit Digest” un otrajā rindā “Test:” I.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Pārbaude:");
Inside kamēr cilpa, mēs sadalīt vērtību skaitlis mainīgā test_var vērā atsevišķas rakstzīmes, lai tā var parādīt uz LCD, izmantojot vienkāršus divīzijas un modulis operatoriem. Mēs arī esam pievienojuši “0”, lai pārveidotu ASCII vērtību rakstzīmē.
d4 = testa_var% 10 + '0'; d3 = (testa_var / 10)% 10 + '0'; d2 = (testa_var / 100)% 10 + '0'; d1 = (testa_var / 1000) + '0';
Tad mēs esam iestatījuši kursoru uz (2,6), jo mēs jau esam ierakstījuši “Test:” otrajā rindā, kas sastāv no 6 rakstzīmēm. Ja mēs pārrakstīsim, esošais raksturs tiks aizstāts ar jaunu rakstzīmi LCD ekrānā. Mēs esam arī pievienojuši kavēšanos 1 sekundi un palielina mainīgo.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); kavēšanās_ms (1000); test_var ++;
STM8 ar LCD - darbojas
Lai pārbaudītu mūsu programmu, vienkārši augšupielādējiet kodu mūsu kontrolierī un ieslēdziet to, izmantojot mikro-USB pieslēgvietu. Ņemiet vērā, ka LCD darbībai nepieciešams 5 V, tāpēc tā ir obligāta barošana no USB porta. Iepriekš mēs to darbinājām tieši no ST-link, jo mums nebija vajadzīga 5V barošana.
Kā redzat, LCD displejs darbojas, kā paredzēts, ar testa mainīgo vērtību aptuveni katru sekundi. Ņemiet vērā arī to, ka mēs neesam izmantojuši taimerus un esam izmantojuši tikai kavēšanās funkciju, lai izveidotu šo kavēšanos, tāpēc negaidiet, ka kavēšanās ilgums būs precīzs, mēs šim nolūkam vēlāk izmantosim taimerus citā apmācībā.
Pilnīga projekta darbība ir atrodama zemāk esošajā videoklipā. Ceru, ka jums patika apmācība un uzzinājāt kaut ko noderīgu. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā vai izmantojiet mūsu forumus citiem tehniskiem jautājumiem.