Ovo je naš šesti vodič u našoj PIC lekciji, u ovom tutorialu učimo Povezivanje 16x2 LCD-a s PIC mikrokontrolerom. U našim prethodnim vodičima naučili smo osnove PIC-a koristeći neke programe koji trepere LED-om, a također smo naučili i kako koristiti odbrojavanje u PIC mikrokontroleru. Ovdje možete provjeriti sve vodiče o učenju PIC mikrokontrolera pomoću MPLABX i XC8 kompajlera.
Ovaj će vodič biti zanimljiv jer ćemo naučiti kako povezati LCD zaslon 16 × 2 s PIC16F877A, detaljni video pogledajte na kraju ovog vodiča. Prošla su stara vremena kada smo koristili LED za indikacije korisnika. Pogledajmo kako pomoću LCD zaslona možemo učiniti da naši projekti izgledaju hladnije i korisnije. Provjerite i naše prethodne članke o povezivanju LCD-a s 8051, s Arduinom, s Raspberry Pi-om i AVR-om.
Funkcije za povezivanje LCD-a s PIC mikrokontrolerom:
Kako bismo olakšali stvari, napravili smo malu knjižnicu koja bi mogla olakšati rad dok koristite ovaj LCD s našim PIC16F877A. Datoteka zaglavlja "MyLCD.h" ovdje je dana za preuzimanje, koja sadrži sve potrebne funkcije za upravljanje LCD-om pomoću PIC MCU-a. Kôd knjižnice dobro je objašnjen linijama komentara, ali ako i dalje sumnjate, kontaktirajte nas putem odjeljka za komentare. Također pogledajte ovaj članak za osnovni rad LCD-a i njegove pinoute.
Napomena: Uvijek se preporučuje znati što se zapravo događa u vašoj zaglavnoj datoteci jer će vam to pomoći u otklanjanju pogrešaka ili tijekom promjene MCU-a.
Postoje dva načina za dodavanje ovog koda u vaš program. Možete kopirati sve gornje retke koda u MyLCD.h i zalijepiti ih ispred void main (). Možete i preuzeti datoteku zaglavlja pomoću veze i dodati ih u datoteku zaglavlja vašeg projekta ( #include "MyLCD.h "; ). To se može učiniti desnim klikom na datoteku zaglavlja i odabirom Dodaj postojeću stavku i pregledavanjem ove datoteke zaglavlja.
Ovdje sam kopirao i zalijepio kôd datoteke zaglavlja u svoju glavnu C datoteku. Dakle, ako koristite naš kôd, tada ne trebate preuzimati i dodavati zaglavnu datoteku u svoj program, samo upotrijebite cjeloviti kôd naveden na kraju ovog vodiča. Također imajte na umu da će ova knjižnica podržavati samo PIC mikrokontroler serije PIC16F.
Ovdje objašnjavam svaku funkciju u našoj datoteci zaglavlja u nastavku:
void Lcd_Start (): Ova bi funkcija trebala biti prva funkcija koju treba pozvati da bi započela rad s našim LCD-om. Ovu bismo funkciju trebali pozvati samo jednom kako bismo izbjegli zaostajanje u programu.
poništi Lcd_Start () {Lcd_SetBit (0x00); za (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __zakašnjenje_ms (5); Lcd_Cmd (0x03); __zakašnjenje_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H koristi se za povratak kući -> Briše RAM i inicijalizira LCD Lcd_Cmd (0x02); // 02H koristi se za povratak kući -> Briše RAM i inicijalizira LCD Lcd_Cmd (0x08); // Odabir retka 1 Lcd_Cmd (0x00); // Obriši prikaz retka 1 Lcd_Cmd (0x0C); // Odabir retka 2 Lcd_Cmd (0x00); // Očisti prikaz retka 2 Lcd_Cmd (0x06); }
Lcd_Clear (): Ova funkcija briše LCD zaslon i može se koristiti unutar petlji za brisanje izgleda prethodnih podataka.
Lcd_Clear () {Lcd_Cmd (0); // Obrišite LCD Lcd_Cmd (1); // Pomicanje kursora na prvo mjesto}
void Lcd_Set_Cursor (x poz, y poz): Jednom kad je pokrenut, naš je LCD spreman za primanje naredbi, možemo uputiti LCD da postavi pokazivač na vaše željeno mjesto pomoću ove funkcije. Pretpostavimo ako, trebamo kursor na 5. znak 1. retka. Tada će funkcija biti void Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; ako (a == 1) {temp = 0x80 + b - 1; // 80H koristi se za pomicanje kursora z = temp >> 4; // Donji 8-bitni y = temp & 0x0F; // Gornji 8-bitni Lcd_Cmd (z); // Postavi red Lcd_Cmd (y); // Postavi stupac} else if (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // Donji 8-bitni y = temp & 0x0F; // Gornji 8-bitni Lcd_Cmd (z); // Postavi red Lcd_Cmd (y); // Postavi stupac}}
void Lcd_Print_Char (char podaci): Jednom kad je kursor postavljen, jednostavnim pozivom ove funkcije možemo zapisati znak na njegov položaj.
void Lcd_Print_Char (char podaci) // Slanje 8-bita kroz 4-bitni način rada {char Lower_Nibble, Upper_Nibble; Donji_Nibble = podaci & 0x0F; Upper_Nibble = podaci & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Pošaljite gornju polovicu pomicanjem za 4 EN = 1; za (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Pošaljite donju polovicu EN = 1; za (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Ako treba prikazati skupinu znakova, tada se može koristiti funkcija niza.
void Lcd_Print_String (char * a) {int i; za (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Podijelite niz pomoću pokazivača i pozovite funkciju Char}
Svaki put kad se pozove Lcd_Print_Char (podaci sa znakovima) , njegove odgovarajuće vrijednosti znakova šalju se u podatkovne linije LCD-a. Ti znakovi dođu do HD44780U u obliku bitova. Sada ovaj IC povezuje bitove sa znakom koji će se prikazati pomoću njegove ROM memorije kao što je prikazano u donjoj tablici. Bitove za sve znakove možete pronaći u tehničkom listu HD44780U LCD kontrolera.

Sad, budući da smo zadovoljni našom zaglavnom datotekom, napravimo sklop i testiraj program. Također provjerite kompletnu datoteku zaglavlja navedenu u gore datoj vezi.
Kružni dijagram i ispitivanje:
Ispod je shema spojeva za povezivanje LCD-a 16x2 s PIC mikrokontrolerom.

Nisam prikazao napajanje ili ICSP vezu u gore navedenom krugu, jer koristimo istu ploču koju smo koristili u prethodnom vodiču, provjerite ovdje.

Jedna važna stvar koju treba primijetiti u programu su pin definicije LCD-a:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Te se definicije pinova mogu mijenjati u skladu s postavkama hardvera programera. Ne zaboravite promijeniti uvaženu konfiguraciju porta u glavnoj funkciji ako ovdje promijenite.
Hardver za ovaj projekt vrlo je jednostavan. Ponovno ćemo upotrijebiti isti PIC modul koji smo koristili prošli put i spojiti LCD modul na naš PIC pomoću kratkospojnih žica.
Veza se može razumjeti iz sljedeće tablice:
|
LCD pin br. |
Naziv LCD ekrana |
Naziv MCU pin-a |
Broj MCU pin-a |
|
1 |
Prizemlje |
Prizemlje |
12 |
|
2 |
VCC |
+ 5V |
11 |
|
3 |
VEE |
Prizemlje |
12 |
|
4 |
Registracija Odaberite |
RD2 |
21 |
|
5 |
Čitaj / piši |
Prizemlje |
12 |
|
6 |
Omogućiti |
RD3 |
22 |
|
7 |
Bit podataka 0 |
NC |
- |
|
8 |
Bit podataka 1 |
NC |
- |
|
9 |
Bit podataka 2 |
NC |
- |
|
10 |
Bit podataka 3 |
NC |
- |
|
11 |
Bit podataka 4 |
RD4 |
27 |
|
12 |
Bit podataka 5 |
RD5 |
28 |
|
13 |
Bit podataka 6 |
RD6 |
29 |
|
14 |
Bit podataka 7 |
RD7 |
30 |
|
15 |
LED pozitivan |
+ 5V |
11 |
|
16 |
LED negativan |
Prizemlje |
12 |
Sada jednostavno napravimo veze, izbacimo kod na naš MCU i provjerimo izlaz.

Ako imate bilo kakvih problema ili sumnji, upotrijebite odjeljak za komentare. Također pogledajte dolje predstavljeni demo video.
