Šī ir mūsu sestā apmācība mūsu PIC apmācību sērijā, šajā apmācībā mēs iemācāmies 16x2 LCD saskarni ar PIC mikrokontrolleru. Iepriekšējās apmācībās mēs esam iemācījušies PIC pamatus, izmantojot dažas LED mirgojošās programmas, un esam iemācījušies arī lietot Taimerus PIC mikrokontrollerī. Šeit varat pārbaudīt visas apmācības par PIC mikrokontrolleru apgūšanu, izmantojot MPLABX un XC8 kompilatoru.
Šī apmācība būs interesanta, jo mēs iemācīsimies saskarni 16 × 2 LCD ar PIC16F877A, pārbaudiet detalizēto video šīs apmācības beigās. Ir pagājuši tie vecie laiki, kad lietotāju indikācijām mēs izmantojām gaismas diodes. Apskatīsim, kā mēs varam padarīt mūsu projektus izskatāmākus un noderīgākus, izmantojot LCD displejus. Pārbaudiet arī mūsu iepriekšējos rakstus par saskarnes LCD ar 8051, ar Arduino, ar Raspberry Pi, ar AVR.
Funkcijas LCD saskarnei ar PIC mikrokontrolleru:
Lai atvieglotu lietas, mēs esam izveidojuši nelielu bibliotēku, kas varētu padarīt lietas ērtākas, izmantojot šo LCD ar mūsu PIC16F877A. Šeit tiek lejupielādēts galvenes fails "MyLCD.h", kas satur visu nepieciešamo funkciju, lai vadītu LCD, izmantojot PIC MCU. Bibliotēkas kods ir labi izskaidrots ar komentāru rindiņām, taču, ja jums joprojām ir šaubas, sazinieties ar mums, izmantojot komentāru sadaļu. Pārbaudiet arī šo rakstu par pamata LCD darbību un tā stiprinājumiem.
Piezīme: Vienmēr ieteicams zināt, kas patiesībā notiek galvenes failā, jo tas palīdzēs atkļūdot vai mainot MCU.
Tagad ir divi veidi, kā šo kodu pievienot programmai. Varat vai nu nokopēt visas iepriekš minētās koda rindas MyLCD.h un ielīmēt tās pirms void main (). Vai arī jūs varat lejupielādēt galvenes failu, izmantojot saiti, un pievienot tos sava projekta galvenes failam ( #include "MyLCD.h "; ). To var izdarīt, ar peles labo pogu noklikšķinot uz galvenes faila un atlasot Pievienot esošu vienumu un pārlūkojot šo galvenes failu.
Šeit es esmu nokopējis un ielīmējis galvenes faila kodu savā galvenajā C failā. Tātad, ja izmantojat mūsu kodu, galvenes fails nav jālejupielādē un jāpievieno programmai, vienkārši izmantojiet pilnu kodu, kas norādīts šīs apmācības beigās. Ņemiet vērā arī to, ka šī bibliotēka atbalstīs tikai PIC16F sērijas PIC mikrokontrolleru.
Šeit es izskaidroju katru funkciju mūsu galvenes failā:
void Lcd_Start (): šai funkcijai vajadzētu būt pirmajai funkcijai, kas jāizsauc, lai sāktu strādāt ar mūsu LCD. Mums vajadzētu izsaukt šo funkciju tikai vienu reizi, lai izvairītos no kavēšanās programmā.
void Lcd_Start () {Lcd_SetBit (0x00); par (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __kavēšanās_ms (5); Lcd_Cmd (0x03); __kavēšanās_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H tiek izmantots atgriešanās mājās -> notīra RAM un inicializē LCD Lcd_Cmd (0x02); // 02H tiek izmantots atgriešanās mājās -> notīra RAM un inicializē LCD Lcd_Cmd (0x08); // Atlasiet 1. rindu Lcd_Cmd (0x00); // Notīrīt 1. rindas displeju Lcd_Cmd (0x0C); // Atlasiet 2. rindu Lcd_Cmd (0x00); // Notīrīt 2. rindas displeju Lcd_Cmd (0x06); }
Lcd_Clear (): Šī funkcija notīra LCD ekrānu un to var izmantot cilpu iekšpusē, lai notīrītu iepriekšējo datu izskatu.
Lcd_Clear () {Lcd_Cmd (0); // Notīrīt LCD Lcd_Cmd (1); // Pārvietot kursoru pirmajā pozīcijā}
void Lcd_Set_Cursor (x pos, y pos): Kad sākat , mūsu LCD ir gatavs pieņemt komandas, mēs varam norādīt LCD iestatīt kursoru jums vēlamajā vietā, izmantojot šo funkciju. Pieņemsim, ja mums ir nepieciešams kursors 1. rindas 5. rakstzīmē. Tad funkcija vairs nebūs spēkā Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; ja (a == 1) {temp = 0x80 + b - 1; 80H izmanto, lai pārvietotu kursoru z = temp >> 4; // Apakšējie 8 biti y = temp & 0x0F; // Augšējie 8 biti Lcd_Cmd (z); // Iestatīt rindu Lcd_Cmd (y); // Iestatīt kolonnu} else if (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // Apakšējie 8 biti y = temp & 0x0F; // Augšējie 8 biti Lcd_Cmd (z); // Iestatīt rindu Lcd_Cmd (y); // Iestatīt kolonnu}}
void Lcd_Print_Char (char dati): Kad kursors ir iestatīts, mēs varam ierakstīt rakstzīmi tā pozīcijā, vienkārši izsaucot šo funkciju.
void Lcd_Print_Char (char dati) // Nosūtiet 8 bitus caur 4 bitu režīmu {char Lower_Nibble, Upper_Nibble; Lower_Nibble = dati & 0x0F; Upper_Nibble = dati & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Nosūtiet augšējo pusi, nobīdot par 4 EN = 1; par (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Nosūtīt apakšējo pusi EN = 1; par (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Ja jāparāda rakstzīmju grupa, var izmantot virknes funkciju.
void Lcd_Print_String (char * a) {int i; par (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Sadaliet virkni, izmantojot rādītājus, un izsauciet funkciju Char}
Katru reizi, kad tiek izsaukta Lcd_Print_Char (char dati) , tā attiecīgās rakstzīmju vērtības tiek nosūtītas uz LCD datu līnijām. Šīs rakstzīmes HD44780U sasniedz bitu veidā. Tagad šis IC saista bitus ar parādāmo rakstzīmi, izmantojot tā ROM atmiņu, kā parādīts zemāk esošajā tabulā. HD44780U LCD kontroliera datu lapā var atrast visu rakstzīmju bitus .
Tā kā esam apmierināti ar mūsu galvenes failu, izveidosim ķēdi un pārbaudīsim programmu. Pārbaudiet arī visu galvenes failu, kas norādīts iepriekš sniegtajā saitē.
Shēmas diagramma un pārbaude:
Tālāk ir parādīta shēmas shēma saskarnei 16x2 LCD ar PIC mikrokontrolleru.
Iepriekš minētajā ķēdē es neesmu parādījis barošanas avotu vai ICSP savienojumu, jo mēs izmantojam to pašu plāksni, kuru mēs izmantojām iepriekšējā apmācībā, pārbaudiet šeit.
Viena svarīga lieta, kas jāievēro programmā, ir LCD definīcijas:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Šīs tapu definīcijas var mainīt atbilstoši programmētāju aparatūras iestatījumiem. Neaizmirstiet mainīt ievēroto porta konfigurāciju galvenajā funkcijā, ja maināt šeit.
Šī projekta aparatūra ir ļoti vienkārša. Mēs atkārtoti izmantosim to pašu PIC moduli, kuru izmantojām pagājušajā reizē, un savienojam LCD moduli ar mūsu PIC, izmantojot džempera vadus.
Savienojumu var saprast, izmantojot šo tabulu:
LCD tapas Nr. |
LCD tapas nosaukums |
MCU tapas nosaukums |
MCU tapas Nr. |
1 |
Zeme |
Zeme |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Zeme |
12 |
4 |
Reģistrēties Atlasiet |
RD2 |
21 |
5 |
Lasīt rakstīt |
Zeme |
12 |
6 |
Iespējot |
RD3 |
22 |
7 |
Datu bits 0 |
NC |
- |
8 |
1. datu bits |
NC |
- |
9 |
2. datu bits |
NC |
- |
10 |
3. datu bits |
NC |
- |
11 |
4. datu bits |
RD4 |
27 |
12 |
5. datu bits |
RD5 |
28 |
13 |
6. datu bits |
RD6 |
29 |
14 |
7. datu bits |
RD7 |
30 |
15 |
LED pozitīvs |
+ 5V |
11 |
16 |
LED negatīvs |
Zeme |
12 |
Tagad ļaujiet mums vienkārši izveidot savienojumus, izmest kodu mūsu MCU un pārbaudīt izvadi.
Ja jums ir kādas problēmas vai šaubas, lūdzu, izmantojiet komentāru sadaļu. Pārbaudiet arī zemāk sniegto demonstrācijas video.