Toto je náš šiesty výukový program v našej sérii výučbových programov PIC, v tomto výučbovom programe sa učíme Prepojenie 16x2 LCD s mikrokontrolérom PIC. V našich predchádzajúcich tutoriáloch sme sa naučili základy PIC pomocou niektorých blikajúcich programov LED a tiež sme sa naučili, ako používať časovače v mikrokontroléri PIC. Môžete si tu pozrieť všetky výukové programy týkajúce sa učenia mikrokontrolérov PIC pomocou kompilátora MPLABX a XC8.
Tento tutoriál bude zaujímavý, pretože sa naučíme Ako prepojiť 16 × 2 LCD s PIC16F877A, pozrite si podrobné Video na konci tohto tutoriálu. Dávna doba, keď sme na indikáciu používateľa používali LED, je preč. Pozrime sa, ako môžeme pomocou LCD displejov dosiahnuť, aby naše projekty vyzerali úžasnejšie a užitočnejšie. Prečítajte si tiež naše predchádzajúce články o prepojení LCD s 8051, s Arduino, s Raspberry Pi, s AVR.
Funkcie pre prepojenie LCD s mikrokontrolérom PIC:
Aby sme vám uľahčili prácu, vytvorili sme malú knižnicu, ktorá nám môže uľahčiť prácu pri používaní tohto LCD displeja s fotoaparátom PIC16F877A. Na stiahnutie je tu uvedený hlavičkový súbor „MyLCD.h“, ktorý obsahuje všetky funkcie potrebné na pohon LCD pomocou PIC MCU. Kód knižnice je dobre vysvetlený riadkami komentárov, ale ak máte stále pochybnosti, kontaktujte nás prostredníctvom sekcie komentárov. V tomto článku nájdete aj základné informácie o fungovaní LCD a jeho vývodoch.
Poznámka: Vždy sa odporúča vedieť, čo sa vlastne deje vo vašom hlavičkovom súbore, pretože vám pomôže pri ladení alebo pri zmene MCU.
Existujú dva spôsoby, ako tento kód pridať do programu. Môžete skopírovať všetky vyššie uvedené riadky kódu do MyLCD.h a vložiť ich pred void main (). Alebo si môžete stiahnuť hlavičkový súbor pomocou odkazu a pridať ho do hlavičkového súboru vášho projektu ( #include "MyLCD.h "; ). Môžete to urobiť tak, že kliknete pravým tlačidlom myši na súbor hlavičky a vyberiete možnosť Pridať existujúcu položku a prejdete na tento súbor hlavičky.
Tu som skopíroval a vložil kód súboru hlavičky do môjho hlavného súboru C. Ak teda používate náš kód, nemusíte si do svojho programu sťahovať a pridávať hlavičkový súbor, stačí použiť celý kód uvedený na konci tohto tutoriálu. Upozorňujeme tiež, že táto knižnica bude podporovať iba mikrokontrolér PIC16F série PIC.
Tu vysvetľujem každú funkciu v našom hlavičkovom súbore nižšie:
void Lcd_Start (): Táto funkcia by mala byť prvou funkciou, ktorú je potrebné zavolať, aby sme mohli začať pracovať s našim LCD. Túto funkciu by sme mali zavolať iba raz, aby sme predišli oneskoreniu v programe.
void Lcd_Start () {Lcd_SetBit (0x00); pre (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 is used for Return home -> Vymaže RAM a inicializuje LCD Lcd_Cmd (0x02); // 02H is used for Return home -> Vymaže RAM a inicializuje LCD Lcd_Cmd (0x08); // Vyberte riadok 1 Lcd_Cmd (0x00); // Vymazať riadok 1 Zobraziť Lcd_Cmd (0x0C); // Vyberte riadok 2 Lcd_Cmd (0x00); // Vymazať riadok 2 Zobraziť Lcd_Cmd (0x06); }
Lcd_Clear (): Táto funkcia vymaže obrazovku LCD a dá sa použiť vo vnútri slučiek na vyčistenie vzhľadu predchádzajúcich údajov.
Lcd_Clear () {Lcd_Cmd (0); // Vymazanie LCD Lcd_Cmd (1); // Presuňte kurzor na prvé miesto}
void Lcd_Set_Cursor (x pos, y pos): Po spustení je náš LCD displej pripravený prijímať príkazy. Pomocou tejto funkcie môžeme LCD nastaviť, aby nastavilo kurzor na vami preferované miesto. Predpokladajme, že ak potrebujeme kurzor na 5. znak 1. riadku. Potom bude funkcia neplatná Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; if (a == 1) {temp = 0x80 + b - 1; // 80H sa používa na pohyb kurzora z = temp >> 4; // Dolných 8 bitov y = temp & 0x0F; // Horných 8-bitov Lcd_Cmd (z); // Nastaviť riadok Lcd_Cmd (y); // Nastaviť stĺpec} else if (a == 2) {temp = 0xC0 + b - 1; z = teplota >> 4; // Spodných 8 bitov y = temp & 0x0F; // Horných 8-bitov Lcd_Cmd (z); // Nastaviť riadok Lcd_Cmd (y); // Nastaviť stĺpec}}
void Lcd_Print_Char (char dáta): Keď je kurzor nastavený, môžeme napísať znak na jeho pozíciu jednoduchým volaním tejto funkcie.
void Lcd_Print_Char (char data) // Odoslanie 8 bitov cez 4-bitový režim {char Lower_Nibble, Upper_Nibble; Lower_Nibble = data & 0x0F; Upper_Nibble = data & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Hornú polovicu pošli posunutím o 4 EN = 1; pre (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Odoslať Dolná polovica EN = 1; pre (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Ak sa má zobraziť skupina znakov, je možné použiť reťazcovú funkciu.
void Lcd_Print_String (char * a) {int i; pre (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Rozdeľte reťazec pomocou ukazovateľov a zavolajte funkciu Char}
Zakaždým, keď sa volá Lcd_Print_Char (char dáta) , jeho príslušné hodnoty znakov sa odošlú do dátových liniek LCD. Tieto znaky sa dostanú na HD44780U vo forme bitov. Teraz tento IC vzťahuje bity k znaku, ktorý sa má zobraziť pomocou jeho pamäte ROM, ako je uvedené v nasledujúcej tabuľke. Bity pre všetky znaky nájdete v údajovom liste ovládača LCD HD44780U.
Teraz, keď sme spokojní s našim hlavičkovým súborom, zostavme obvod a otestujme program. Skontrolujte tiež celý súbor hlavičky uvedený v odkaze uvedenom vyššie.
Schéma zapojenia a testovanie:
Ďalej je uvedená schéma zapojenia pre rozhranie 16x2 LCD s mikrokontrolérom PIC.
Vo vyššie uvedenom obvode som neukázal napájanie alebo pripojenie ICSP, pretože používame rovnakú dosku, ktorú sme použili v predchádzajúcom tutoriáli, tu skontrolujte.
Jedna dôležitá vec, ktorú si musíte v programe všimnúť, je definícia pinov LCD:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Tieto definície pinov je možné meniť podľa hardvérového nastavenia programátorov. Nezabudnite zmeniť konfiguráciu rešpektovaného portu v hlavnej funkcii, ak sa tu zmeníte.
Hardvér pre tento projekt je veľmi jednoduchý. Znovu použijeme ten istý PIC modul, ktorý sme použili naposledy, a pomocou prepojovacích vodičov pripojíme LCD modul k nášmu PIC.
Pripojenie je zrejmé z nasledujúcej tabuľky:
Číslo PIN LCD |
Názov kolíka LCD |
Názov PINu MCU |
Číslo PIN MCU |
1 |
Uzemnenie |
Uzemnenie |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Uzemnenie |
12 |
4 |
Registrovať Vyberte |
RD2 |
21 |
5 |
Čítaj píš |
Uzemnenie |
12 |
6 |
Povoliť |
RD3 |
22 |
7 |
Dátový bit 0 |
NC |
- |
8 |
Dátový bit 1 |
NC |
- |
9 |
Dátový bit 2 |
NC |
- |
10 |
Dátový bit 3 |
NC |
- |
11 |
Dátový bit 4 |
RD4 |
27 |
12 |
Dátový bit 5 |
RD5 |
28 |
13 |
Dátový bit 6 |
RD6 |
29 |
14 |
Dátový bit 7 |
RD7 |
30 |
15 |
Pozitívne LED |
+ 5V |
11 |
16 |
LED negatívne |
Uzemnenie |
12 |
Teraz poďme jednoducho urobiť spojenie, vypísať kód do nášho MCU a overiť výstup.
Ak máte akékoľvek problémy alebo pochybnosti, použite sekciu komentárov. Skontrolujte tiež ukážkové video uvedené nižšie.