Tai yra mūsų šeštoji „ PIC Tutorial“ serijos pamoka. Šioje pamokoje mokomės susieti 16x2 LCD ekraną su PIC mikrovaldikliu. Ankstesnėse mūsų pamokose mes išmokome PIC pagrindus, naudodami kai kurias LED mirksinčias programas, taip pat sužinojome, kaip naudoti laikmačius PIC mikrovaldiklyje. Čia galite patikrinti visas „PIC“ mikrovaldiklių mokymosi naudojant MPLABX ir XC8 kompiliatorių pamokas.
Ši pamoka bus įdomi, nes sužinosime, kaip susieti 16 × 2 skystųjų kristalų ekraną su PIC16F877A, patikrinkite išsamų vaizdo įrašą šios pamokos pabaigoje. Praėjo senieji laikai, kai naudotojų indikacijoms naudojome šviesos diodus. Pažiūrėkime, kaip naudodami skystųjų kristalų ekranus galime padaryti savo projektus patrauklesnius ir naudingesnius. Taip pat peržiūrėkite mūsų ankstesnius straipsnius apie „Interfacing LCD with 8051“, su „Arduino“, su „Raspberry Pi“ ir „AVR“.
Skystųjų kristalų sąsajos su PIC mikrovaldikliu funkcijos:
Kad būtų lengviau, sukūrėme nedidelę biblioteką, kuri galėtų palengvinti naudojimąsi šiuo LCD su mūsų PIC16F877A. Čia pateikiamas atsisiuntimo antraštės failas „MyLCD.h“, kuriame yra visa reikalinga funkcija, leidžianti valdyti LCD naudojant PIC MCU. Bibliotekos kodas yra gerai paaiškintas komentarų eilutėmis, tačiau jei vis tiek turite abejonių, susisiekite su mumis per komentarų skyrių. Taip pat patikrinkite šį straipsnį, ar veikia pagrindinis LCD ekranas ir jo kištukai.
Pastaba: Visada rekomenduojama žinoti, kas iš tikrųjų vyksta antraštės faile, nes tai padės jums derinant ar keičiant MCU.
Dabar yra du būdai, kaip pridėti šį kodą į savo programą. Galite nukopijuoti visas pirmiau nurodytas kodo eilutes „MyLCD.h“ ir įklijuoti jas prieš „void main“ (). Arba galite atsisiųsti antraštės failą naudodami nuorodą ir pridėti juos prie savo projekto antraštės failo ( #include "MyLCD.h "; ). Tai galima padaryti dešiniuoju pelės mygtuku spustelėjus antraštės failą ir pasirinkus Pridėti esamą elementą ir naršant prie šio antraštės failo.
Čia nukopijavau ir įklijavau antraštės failo kodą į savo pagrindinį C failą. Taigi, jei naudojate mūsų kodą, jums nereikia atsisiųsti ir pridėti antraštės failo į savo programą, tiesiog naudokite visą kodą, pateiktą šios pamokos pabaigoje. Taip pat atkreipkite dėmesį, kad ši biblioteka palaikys tik PIC16F serijos PIC mikrovaldiklį.
Čia aš paaiškinu kiekvieną funkciją, esančią mūsų žemiau esančiame antraštės faile:
void Lcd_Start (): Ši funkcija turėtų būti pirmoji funkcija, kurią reikia iškviesti, kad pradėtumėte dirbti su mūsų LCD. Šią funkciją turėtume iškviesti tik vieną kartą, kad išvengtume programos vėlavimo.
negaliojantis Lcd_Start () {Lcd_SetBit (0x00); už (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H naudojamas grįžimui namo -> išvalo RAM ir inicijuoja LCD ekraną Lcd_Cmd (0x02); // 02H naudojamas grįžimui namo -> išvalo RAM ir inicijuoja LCD ekraną Lcd_Cmd (0x08); // Pasirinkite 1 eilutę Lcd_Cmd (0x00); // Išvalyti 1 eilutės ekraną Lcd_Cmd (0x0C); // Pasirinkite 2 eilutę Lcd_Cmd (0x00); // Išvalyti 2 eilutės ekraną Lcd_Cmd (0x06); }
Lcd_Clear (): ši funkcija išvalo LCD ekraną ir gali būti naudojama kilpų viduje norint išvalyti ankstesnių duomenų išvaizdą.
Lcd_Clear () {Lcd_Cmd (0); // Išvalykite LCD ekraną Lcd_Cmd (1); // Perkelkite žymeklį į pirmą poziciją}
void Lcd_Set_Cursor (x pos, y pos): Kai tik pradėsite , mūsų LCD bus pasirengęs priimti komandas, mes galime nurodyti LCD nustatyti žymeklį jūsų pageidaujamoje vietoje naudodamiesi šia funkcija. Tarkime, jei mums reikia žymeklio 1-osios eilutės 5-ajame simbolyje. Tada funkcija negalios Lcd_Set_Cursor (1, 5)
negaliojantis Lcd_Set_Cursor (char a, char b) {char temp, z, y; jei (a == 1) {temp = 0x80 + b - 1; // 80H naudojamas žymekliui perkelti z = temp >> 4; // Apatiniai 8 bitai y = temp & 0x0F; // Viršutiniai 8 bitai Lcd_Cmd (z); // Nustatyti eilutę Lcd_Cmd (y); // Nustatyti stulpelį} else if (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // Apatiniai 8 bitai y = temp & 0x0F; // Viršutiniai 8 bitai Lcd_Cmd (z); // Nustatyti eilutę Lcd_Cmd (y); // Nustatyti stulpelį}}
void Lcd_Print_Char (char duomenys): Nustačius žymeklį, galime parašyti simbolį į jo vietą paprasčiausiai paskambinę į šią funkciją.
void Lcd_Print_Char (char duomenys) // Siųskite 8 bitus per 4 bitų režimą {char Lower_Nibble, Upper_Nibble; Lower_Nibble = duomenys & 0x0F; Upper_Nibble = duomenys & 0xF0; RS = 1; // => RS = 1 „Lcd_SetBit“ („Upper_Nibble“ >> 4); // Siųsti viršutinę pusę pasislinkus 4 EN = 1; už (int i = 2130483; i <= 0; i--) NOP (); EN = 0; „Lcd_SetBit“ („Lower_Nibble“); // Siųsti apatinę pusę EN = 1; už (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Jei turi būti rodoma simbolių grupė, galima naudoti eilutės funkciją.
negaliojantis Lcd_Print_String (char * a) {int i; už (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Padalykite eilutę naudodamiesi rodyklėmis ir iškvieskite Char funkciją}
Kiekvieną kartą, kai iškviečiama „Lcd_Print_Char“ (char duomenys) , atitinkamos simbolio vertės siunčiamos į LCD duomenų linijas. Šie simboliai HD44780U pasiekia bitų pavidalu. Dabar šis IC susieja bitus su simboliu, kuris turi būti rodomas naudojant jo ROM atmintį, kaip parodyta žemiau esančioje lentelėje. HD44780U LCD valdiklio duomenų lape galite rasti visų simbolių bitus .
Dabar, kadangi mus tenkina mūsų antraštės failas, sukurkime grandinę ir išbandykime programą. Taip pat patikrinkite visą antraštės failą, pateiktą aukščiau pateiktoje nuorodoje.
Grandinės schema ir bandymai:
Žemiau pateikiama sąsajos 16x2 LCD su PIC mikrovaldikliu schema.
Aš nerodžiau maitinimo šaltinio ar ICSP jungties pirmiau pateiktoje grandinėje, nes mes naudojame tą pačią plokštę, kurią naudojome ankstesnėje pamokoje, patikrinkite čia.
Vienas svarbus dalykas, kurį reikia pastebėti programoje, yra skystųjų kristalų LCD apibrėžimai:
# apibrėžti RS RD2 # apibrėžti EN RD3 # apibrėžti D4 RD4 # apibrėžti D5 RD5 # apibrėžti D6 RD6 # apibrėžti D7 RD7
Šiuos smeigtukų apibrėžimus galima pakeisti pagal programuotojų aparatinės įrangos sąranką. Nepamirškite pakeisti gerbiamos prievado konfigūracijos pagrindinėje funkcijoje, jei pakeisite čia.
Šio projekto įranga yra labai paprasta. Mes ketiname pakartotinai naudoti tą patį PIC modulį, kurį naudojome paskutinį kartą, ir prijungti skystųjų kristalų modulį prie mūsų PIC, naudodami trumpiklius.
Ryšį galima suprasti šioje lentelėje:
LCD kaiščio Nr. |
LCD smeigtuko pavadinimas |
MCU PIN kodas |
MCU kaiščio Nr. |
1 |
Žemė |
Žemė |
12 |
2 |
VCC |
+ 5 V |
11 |
3 |
VEE |
Žemė |
12 |
4 |
Registruotis Pasirinkite |
RD2 |
21 |
5 |
Skaityk rašyk |
Žemė |
12 |
6 |
Įgalinti |
RD3 |
22 |
7 |
Duomenų bitas 0 |
NC |
- |
8 |
1 duomenų bitas |
NC |
- |
9 |
2 duomenų bitas |
NC |
- |
10 |
3 duomenų bitas |
NC |
- |
11 |
4 duomenų bitas |
RD4 |
27 |
12 |
5 duomenų bitas |
RD5 |
28 |
13 |
6 duomenų bitas |
RD6 |
29 |
14 |
7 duomenų bitas |
RD7 |
30 |
15 |
LED teigiamas |
+ 5 V |
11 |
16 |
LED neigiamas |
Žemė |
12 |
Dabar leiskite mums tiesiog užmegzti ryšius, perkelti kodą į savo MCU ir patikrinti išvestį.
Jei turite problemų ar kyla abejonių, naudokite komentarų skiltį. Taip pat patikrinkite žemiau pateiktą demonstracinį vaizdo įrašą.