- Paggawa ng 16x2 LCD Display
- Circuit Diagram sa Interface LCD na may STM8 Microcontroller
- STM8 LCD Library - File ng Header para sa STM8S103F3P6
- LCD Program para sa STM8S Microcontroller
- STM8 na may LCD - Gumagana
Ang 16x2 Alphanumeric LCD display ay ang pinakakaraniwang ginagamit na display sa mga hobbyist at taong mahilig. Napaka kapaki-pakinabang ng display kapag nais mong ipakita ang pangunahing impormasyon sa gumagamit at maaari ring makatulong sa pagsubok o pag-debug ng aming code. Ang partikular na 16x2 LCD module na ito ay madaling magagamit at naging tanyag sa mahabang panahon. Maaari kang matuto nang higit pa tungkol sa mga pangunahing kaalaman ng 16x2 LCD module sa naka-link na artikulo.
Upang magpatuloy sa aming serye ng mga tutorial sa STM8 Microcontroller, sa tutorial na ito, matututunan namin kung paano i-interface ang isang LCD sa STM8 Microcontroller. Na-interfaced namin dati ang 16x2 LCD sa maraming iba pang mga microcontroll pati na rin, ang mga tutorial ay nakalista sa ibaba at maaari mong suriin ang mga ito kung interesado.
Kung bago ka sa STM8, suriin ang pagsisimula sa artikulong STM8 Microcontroller upang maunawaan ang mga pangunahing kaalaman sa board ng controller at kapaligiran sa programa. Hindi namin sasakupin ang mga pangunahing kaalaman sa tutorial na ito.
Paggawa ng 16x2 LCD Display
Tulad ng ipinahihiwatig ng pangalan, ang isang 16x2 LCD ay magkakaroon ng 16 Columns at 2 Rows. Kaya sa kabuuan, maipapakita namin ang 32 mga character sa display na ito at ang mga character na ito ay maaaring maging mga alpabeto o numero o kahit na mga simbolo. Ang isang simpleng 16x2 LCD pinout na ginagamit namin sa tutorial na ito ay ipinapakita sa ibaba-
Tulad ng nakikita mo, ang display ay may 16 na mga pin at maaari natin itong hatiin sa limang mga kategorya, Power Pins, contrad pin, Control Pins, Data pin, at Backlight pin tulad ng ipinakita sa talahanayan sa ibaba. Makakakuha kami ng mga detalye ng bawat pin kapag tinatalakay namin ang circuit diagram ng tutorial na ito.
Kategoryang | Pin NO. | Pangalan ng Pin | Pag-andar |
Mga Power Pins | 1 | VSS | Ground Pin, konektado sa Ground |
2 | VDD o Vcc | Boltahe Pin + 5V | |
Contrast Pin | 3 | V0 o VEE | Pagtatakda ng Contrast, konektado sa Vcc sa pamamagitan ng isang variable risistor. |
Kontrolin ang Mga Pins | 4 | Ang RS | Magrehistro Piliin ang Pin, RS = 0 Command mode, RS = 1 Data mode |
5 | RW | Basahin / Isulat ang pin, RW = 0 Mode ng pagsulat, RW = 1 Basahin ang mode | |
6 | E | Paganahin, isang mataas hanggang sa mababang pulso na kailangan upang paganahin ang LCD | |
Mga Data Pins | 7-14 | D0-D7 | Mga Data Pins, Iniimbak ang Data na ipapakita sa LCD o mga tagubilin sa utos |
Mga Backlight Pins | 15 | LED + o A | Upang mapagana ang Backlight + 5V |
16 | LED- o K | Backlight Ground |
Sa likuran ng LCD, tulad ng ipinakita sa imahe sa ibaba, mahahanap mo ang dalawang itim na tuldok, sa loob nito mayroon kaming HD44780 LCD driver IC (na nakapalibot sa pula). Ang aming microcontroller ay dapat makipag-usap sa IC na ito na kung saan ay makokontrol kung ano ang ipinapakita sa LCD. Kung gusto mong malaman kung paano eksaktong gumagana ang lahat ng ito dapat mong suriin ang pagtatrabaho ng 16x2 LCD display kung saan tinalakay na natin kung paano gumagana nang detalyado ang LCD.
Sa tutorial na ito, tatalakayin namin ang diagram ng circuit at code upang maipakita ang mga alpabetong character (mga alpabeto at numero) sa isang 16x2 LCD display gamit ang simpleng mga utos ng LCD_print _char at LCD_print_string . Ang mga utos na ito ay maaaring direktang magamit sa programa pagkatapos isama ang aming header file. Nakikipag-usap ang file ng header sa lahat ng karamihan sa mga bagay-bagay para sa iyo kaya hindi sapilitan na malaman kung paano gumagana ang display o ang driver ng HD44780 na IC.
Circuit Diagram sa Interface LCD na may STM8 Microcontroller
Ang kumpletong STM8 LCD Circuit ay matatagpuan sa larawan sa ibaba. Tulad ng nakikita mo ang koneksyon para sa STM8S103F3P6 Controller na may LCD ay napaka-simple, mayroon kaming LCD display na direktang konektado sa aming board at ang ST-link ay konektado din sa programa ng board.
Ang mga power pin na Vss at Vcc ay konektado sa 5V pin sa STM8S board, tandaan na ang operating boltahe ng LCD ay 5V at konektado upang mapatakbo sa 3.3V. Kaya't kahit na ang STM8S103F3P6 Microcontroller ay nagpapatakbo sa 3.3V ay sapilitan na magkaroon ng isang 5V supply para sa LCD, maiiwasan mo ito sa pamamagitan ng paggamit ng isang charge controller IC ngunit hindi namin tatalakayin ito sa tutorial na ito.
Susunod, mayroon kaming kaibahan na pin na ginagamit upang itakda ang kaibahan ng LCD, ikinonekta namin ito sa potensyomiter upang makontrol namin ang kaibahan. Gumamit kami ng isang 10k palayok, ngunit maaari mo ring gamitin ang iba pang mga kalapit na halaga, ang palayok ay gumaganap bilang isang potensyal na divider upang magbigay ng 0-5 V sa pin ng kaibahan, karaniwang maaari mo ring gamitin ang isang risistor nang direkta upang magbigay ng paligid ng 2.2V para sa makatuwirang kaibahan halaga Pagkatapos ay mayroon kaming pag-reset (RS), Basahin / Isulat (RW), at Paganahin ang (E) mga pin. Ang read-sulat na pin ay pinag-grounded dahil wala kaming babasahin kahit ano mula sa LCD na isasagawa lamang namin ang mga operasyon sa pagsusulat. Ang iba pang dalawang control pin na Rs at E ay konektado sa PA1 at PA2 pin ayon sa pagkakabanggit.
Pagkatapos mayroon kaming mga data pin na DB0 hanggang DB7. Ang 16x2 LCD ay maaaring gumana sa dalawang mga mode, ang isa ay isang 8-bit na mode ng pagpapatakbo kung saan kailangan naming gamitin ang lahat ng mga 8 data pin (DB0-DB7) sa LCD at ang iba pa ay ang 4-bit na mode ng pagpapatakbo kung saan kailangan lamang namin ng 4 mga pin ng data (DB4-DB7). Ang 4-bit mode ay karaniwang ginagamit dahil nangangailangan ito ng mas kaunting mga GPIO pin mula sa controller, kaya gumamit din kami ng 4-bit mode sa tutorial na ito at nakakonekta lamang ang mga pin ng DB4, DB5, DB6, at DB7 sa mga pin ng PD1, PD2, PD3, at PD4 ayon sa pagkakabanggit.
Ang huling dalawang pin na BLA at BLK ay ginagamit upang magaan ang panloob na backlight LED, gumamit kami ng isang resistor na 560-ohm bilang isang kasalukuyang nililimitahan na risistor. Ang programmer ng ST-Link ay konektado nang palaging tulad ng sa aming nakaraang tutorial. Ginawa ko ang kumpletong koneksyon sa breadboard at ang aking set-up ay mukhang ipinakita sa imahe sa ibaba.
STM8 LCD Library - File ng Header para sa STM8S103F3P6
Bago kami magpatuloy sa diagram ng circuit, kunin natin ang file ng header ng STM8 LCD mula sa GitHub gamit ang sumusunod na link-
STM8S 16x2 LCD header file
Maaari mong i-download ang kumpletong repo at makuha ang stm8s103_LCD_16x2.h file o gawing simple ang code mula sa itaas na link. Habang itinatakda ang proyekto, tiyaking isinasama mo ang lahat ng kinakailangang mga file ng header sa direktoryo ng inc kasama ang header file na ito.
Kung hindi ka sigurado kung paano idaragdag ang mga file ng header at ipagsama ang programa, sundin ang video sa ilalim ng pahinang ito. At kung nag-usisa ka tungkol sa kung paano gumagana ang code sa loob ng header file, maaari mong suriin ang PIC gamit ang isang LCD tutorial. Ang header file na ginamit sa proyektong ito ay halos kapareho ng ipinaliwanag doon, kaya hindi namin masisiyahan iyon.
LCD Program para sa STM8S Microcontroller
Para sa pagpapakita, ipo-program namin ang aming STM8S controller upang maipakita ang isang simpleng string tulad ng "Circuit Digest" at pagkatapos ay magpapalaki kami ng isang "Test" na halaga para sa bawat isang segundo sa pangalawang linya. Ang kumpletong programa ay matatagpuan sa ilalim ng pahinang ito. Ang paliwanag ay ang mga sumusunod.
Sinisimula namin ang aming programa sa pamamagitan ng pagtukoy sa mga pin at pagdaragdag ng kinakailangang mga file ng header tulad ng lagi. Sa aming tinalakay sa itaas na diagram ng circuit, ikinonekta namin ang LCD_RS sa PA1 kaya tinukoy namin ito bilang LCD_RS GPIOA, GPIO_PIN_1. Katulad nito, nagawa rin namin ang pareho para sa iba pang mga pin. Kung sumusunod sila sa ibang circuit, tiyaking binago mo ang mga halagang ito nang naaayon.
#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"
Susunod sa loob ng aming pangunahing programa, idineklara namin ang mga variable na kinakailangan para sa sample code na ito. Mayroon kaming isang variable ng pagsubok na tinatawag na test_var na na-initialize sa zero, tataasan namin ang variable at ipapakita ito sa LCD. Ang mga character na d1 hanggang d4 ay kumakatawan sa 4 na digit ng variable ng pagsubok dahil ang aming LCD ay hindi maaaring ipakita nang direkta ang halaga ng int, kailangan nating i-convert ang mga ito sa mga character.
// Variable declarations int test_var = 0; char d4, d3, d2, d1;
Ang pagpapaandar ng LCD_Begin () ay ginagamit upang simulan ang LCD. Ang pagpapaandar na ito ay sisimulan ang lahat ng kinakailangang mga GPIO pin at itakda din ang LCD sa 16x2 LCD mode. Pagkatapos mayroon kaming pagpapaandar na LCD_Clear () na ginagamit upang limasin ang lahat ng mga halaga sa LCD, tatanggalin nito ang lahat sa LCD upang malinis itong magsulat ng mga bagong halaga. Pagkatapos mayroon kaming pagpapaandar ng LCD_Set_Cursor (x, y) kung saan ang x at y ang mga posisyon kung saan kailangan nating isulat ang aming bagong character. Halimbawa, ang (1,1) ay nangangahulugang unang hilera at unang Colum, katulad (2,12) nangangahulugang pangalawang hilera 12 haligi, gayun din. Tandaan na mayroon kaming 2 mga hilera at 16 na mga haligi dito tulad ng tinalakay namin kanina.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Ngayon, ang LCD ay naka-set, na-clear, at ang cursor ay nasa lugar na. Susunod na bagay ay ang pag-print ng isang bagay sa screen. Maaari naming gamitin ang LCD_Print_String ("Sample String") upang mag-print ng isang string sa LCD at LCD_Print_Char (a) upang mai -print ang isang halaga ng character sa LCD. Sa aming programa dito nai-print namin ang "STM8S103F3P3 LCD" at lumikha ng isang pagkaantala ng 5 segundo gamit ang code sa ibaba.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Matapos ang pagka-antala ng 5 segundo, muli naming nililimas ang LCD at ipinakita ang "Circuit Digest" sa unang hilera at "Pagsubok:" Ako ang pangalawang hilera.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Pagsubok:");
Sa loob ng habang loop, hahatiin namin ang halaga sa integer variable test_var sa mga indibidwal na character upang maipakita ito sa LCD gamit ang simpleng mga operator ng dibisyon at modulus. Nagdagdag din kami ng '0' upang i-convert ang ASCII na halaga sa character.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Pagkatapos ay itinakda namin ang cursor sa (2,6) sapagkat nakasulat na kami ng "Pagsubok:" sa pangalawang hilera na 6 na character. Kung i-o-overlap namin, ang umiiral na character ay papalitan ng isang bagong character sa LCD. Nagdagdag din kami ng isang pagkaantala ng 1 segundo at dagdagan ang 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 na may LCD - Gumagana
Upang subukan ang aming programa, i-upload lamang ang code sa aming controller at paganahin ito gamit ang micro-USB port. Tandaan na ang LCD ay nangangailangan ng 5V para sa pagtatrabaho kaya't sapilitan na i-power ang board mula sa USB port. Nauna namin itong pinalakas nang direkta mula sa ST-link dahil hindi namin kailangan ang 5V supply.
Tulad ng nakikita mo ang LCD ay gumagana tulad ng inaasahan na may halaga ng variable ng pagsubok na pagtaas para sa bawat segundo na tinatayang. Gayundin, tandaan na hindi kami gumamit ng mga timer at ginamit lamang ang pagpapaandar na pagpapaandar upang likhain ang pagkaantala na ito kaya huwag asahan na tumpak ang tagal ng pagkaantala, gagamit kami ng mga timer sa ibang pagkakataon sa isa pang tutorial para sa hangaring iyon.
Ang kumpletong pagtatrabaho ng proyekto ay matatagpuan sa video na naka-link sa ibaba. Inaasahan kong nasiyahan ka sa tutorial at natutunan ang isang bagay na kapaki-pakinabang. Kung mayroon kang anumang mga katanungan, iwanan ang mga ito sa seksyon ng komento o gamitin ang aming mga forum para sa iba pang mga teknikal na query.