Ez a PIC oktatósorozatunk hatodik oktatóanyaga, ebben az oktatóanyagban megtanuljuk a 16x2 LCD és a PIC mikrovezérlő összekapcsolását. Korábbi oktatóinkban megtanultuk a PIC alapjait néhány LED-es villogó program használatával, és megtanultuk az Időzítők használatát a PIC mikrokontrollerben is. Itt ellenőrizheti az összes oktatóanyagot a PIC mikrovezérlők megtanulásáról az MPLABX és az XC8 fordító segítségével.
Ez az oktatóanyag érdekes lesz, mert megtanuljuk, hogyan kezeljük a 16 × 2 LCD-t a PIC16F877A-val, ellenőrizzük a részletes videót a bemutató végén. Elmúltak azok a régi idők, amikor LED-eket használtunk a felhasználói jelzésekhez. Nézzük meg, hogyan tehetnénk projektjeinket hűvösebbé és hasznosabbá az LCD-kijelzők használatával. Olvassa el korábbi cikkeit is az Interfacing LCD with 8051, Arduino, a Raspberry Pi, az AVR használatával.
Funkciók az LCD és PIC mikrovezérlő összekapcsolására:
A dolgok megkönnyítése érdekében készítettünk egy kis könyvtárat, amely megkönnyíti a dolgokat, miközben ezt az LCD-t a PIC16F877A-val együtt használjuk. A letöltéshez a "MyLCD.h" fejlécfájlt adjuk meg, amely tartalmazza az LCD PIC MCU használatához szükséges összes funkciót. A könyvtár kódját jól megmagyarázzák a megjegyzések sorai, de ha még mindig kétségei vannak, keressen meg minket a megjegyzés részben. Ellenőrizze ezt a cikket az alapvető LCD működésről és a csatlakozókról is.
Megjegyzés: Mindig ajánlott tudni, hogy mi történik valójában a fejlécfájlban, mert ez segít a hibakeresésben vagy az MCU megváltoztatásában.
Kétféleképpen adhatja hozzá ezt a kódot a programjához. Vagy másolhatja a fenti kódsorokat a MyLCD.h fájlba, és beillesztheti őket a void main () elé. Vagy letöltheti a fejlécfájlt a hivatkozás segítségével, és hozzáadhatja a projekt fejlécfájljához ( #include "MyLCD.h "; ). Ezt úgy teheti meg, hogy jobb egérgombbal kattint a fejlécfájlra, és kiválasztja a Meglévő elem hozzáadása elemet, és böngészi ezt a fejlécfájlt.
Itt átmásoltam és beillesztettem a fejléc fájl kódját a fő C fájlomba. Tehát, ha a kódunkat használja, akkor nem kell letöltenie és hozzáadnia a fejlécfájlt a programjához, csak használja az oktatóanyag végén megadott teljes kódot. Vegye figyelembe azt is, hogy ez a könyvtár csak a PIC16F sorozatú PIC mikrokontrollert támogatja.
Itt ismertetem az alábbi fejlécfájlunkban található egyes funkciókat:
void Lcd_Start (): Ez a funkció legyen az első olyan funkció, amelyet meg kell hívni, hogy elkezdhessük az LCD-vel való munkát. Ezt a funkciót csak egyszer kell meghívnunk, hogy elkerüljük a program késését.
void Lcd_Start () {Lcd_SetBit (0x00); for (int i = 1065244; i <= 0; i-) NOP (); Lcd_Cmd (0x03); __késleltetési_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // A 02H-t a hazatérésre használják -> Törli a RAM-ot és inicializálja az LCD-t Lcd_Cmd (0x02); // A 02H-t a hazatérésre használják -> Törli a RAM-ot és inicializálja az LCD-t Lcd_Cmd (0x08); // Válassza ki az 1. sort Lcd_Cmd (0x00); // 1. sor törlése Kijelző Lcd_Cmd (0x0C); // Válassza ki a 2. sort: Lcd_Cmd (0x00); // A 2. sor törlése Lcd_Cmd (0x06); }
Lcd_Clear (): Ez a funkció kitisztítja az LCD képernyőt, és hurkok belsejében használható a korábbi adatok megjelenésének törlésére.
Lcd_Clear () {Lcd_Cmd (0); // Törölje az LCD-t Lcd_Cmd (1); // Vigye a kurzort az első pozícióba}
void Lcd_Set_Cursor (x pos, y pos): Miután elindult, LCD-nk készen áll a parancsok fogadására , utasíthatjuk az LCD-t, hogy ezzel a funkcióval állítsa a kurzort a kívánt helyre. Tegyük fel, hogy szükségünk van egy kurzorra az 1. sor 5. karakterénél. Ekkor a függvény érvénytelen lesz Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; if (a == 1) {temp = 0x80 + b - 1; // a 80H a kurzor mozgatására szolgál z = temp >> 4; // Alsó 8 bit y = temp & 0x0F; // Felső 8-bit Lcd_Cmd (z); // Lcd_Cmd (y) sor beállítása; // Set oszlop} else if (a == 2) {temp = 0xC0 + b - 1; z = hőmérséklet >> 4; // Alsó 8 bit y = temp & 0x0F; // Felső 8-bit Lcd_Cmd (z); // Állítsa be az Lcd_Cmd (y) sort; // Oszlop beállítása}}
void Lcd_Print_Char (char adatok): Ha a kurzor be van állítva, akkor egy karaktert beírhatunk a helyzetébe a függvény egyszerű meghívásával.
void Lcd_Print_Char (char adatok) // 8 bit küldése 4-bites módban {char Lower_Nibble, Upper_Nibble; Lower_Nibble = adatok & 0x0F; Upper_Nibble = adatok & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Küldje a felső felét 4 EN = 1 eltolással; for (int i = 2130483; i <= 0; i-) NOP (); EN = 0; Lcd_SetBit (Alsó_Nibble); // Küldés alsó fele EN = 1; for (int i = 2130483; i <= 0; i-) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Ha karaktercsoportot kell megjeleníteni, akkor a string függvény használható.
void Lcd_Print_String (char * a) {int i; mert (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Bontsa a karakterláncot a mutatók segítségével, és hívja meg a Char függvényt}
Minden alkalommal, amikor az Lcd_Print_Char (char adatok) meghívásra kerül, a megfelelő karakterértékeket elküldi az LCD adatsorainak. Ezek a karakterek bitek formájában jutnak el a HD44780U-hoz. Most ez az IC a biteket a megjelenítendő karakterhez kapcsolja a ROM memória használatával, az alábbi táblázat szerint. Az összes karakterhez tartozó biteket megtalálhatja a HD44780U LCD vezérlő adatlapján .
Mivel elégedettek vagyunk a fejlécfájlunkkal, építsük fel az áramkört és teszteljük a programot. Ellenőrizze a fenti linken megadott teljes fejlécfájlt is.
Áramkör és tesztelés:
Az alábbiakban bemutatjuk az Interfacing 16x2 LCD és PIC mikrovezérlő kapcsolási rajzát.
A fenti áramkörben nem mutattam be a tápegységet vagy az ICSP csatlakozást, mivel ugyanazt a kártyát használjuk, amelyet az előző oktatóanyagban használtunk, ellenőrizze itt.
Az egyik fontos dolog, amit észre kell venni a programban, az LCD meghatározása:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Ezek a pin-definíciók a programozók hardverbeállításaitól függően módosíthatók. Ne felejtse el megváltoztatni a tiszteletben álló portkonfigurációt a fő funkcióban, ha itt változtat.
A hardver ehhez a projekthez nagyon egyszerű. Ugyanazt a PIC-modult fogjuk felhasználni, amelyet legutóbb használtunk, és az áthidaló vezetékek segítségével csatlakoztatjuk az LCD-modult a PIC-hez.
A kapcsolatot az alábbi táblázat értheti meg:
LCD tű sz. |
LCD tű neve |
MCU PIN neve |
MCU Pin No. |
1 |
Talaj |
Talaj |
12. |
2 |
VCC |
+ 5V |
11. |
3 |
VEE |
Talaj |
12. |
4 |
Regisztráció Válassza ki |
RD2 |
21 |
5. |
Ír olvas |
Talaj |
12. |
6. |
Engedélyezze |
RD3 |
22. |
7 |
0. adatbit |
NC |
- |
8. |
1. adatbit |
NC |
- |
9. |
2. adatbit |
NC |
- |
10. |
3. adatbit |
NC |
- |
11. |
4. adatbit |
RD4 |
27. |
12. |
5. adatbit |
RD5 |
28. |
13. |
6. adatbit |
RD6 |
29. |
14 |
7. adatbit |
RD7 |
30 |
15 |
LED pozitív |
+ 5V |
11. |
16. |
LED negatív |
Talaj |
12. |
Most egyszerűen hozzuk létre a kapcsolatokat, dobjuk ki a kódot az MCU-ra és ellenőrizzük a kimenetet.
Ha bármilyen problémája van vagy kétségei vannak, kérjük, használja a megjegyzés részt. Ellenőrizze az alább bemutatott bemutató videót is.