Toto je náš šestý tutoriál v naší sérii PIC tutoriálů, v tomto tutoriálu se učíme Rozhraní 16x2 LCD s PIC mikrokontrolérem. V našich předchozích cvičeních jsme se naučili základy PIC pomocí některých blikajících LED programů a také jsme se naučili, jak používat časovače v mikrokontroléru PIC. Zde si můžete prohlédnout všechny výukové programy o učení mikrokontrolérů PIC pomocí kompilátoru MPLABX a XC8.
Tento tutoriál bude zajímavý, protože se naučíme Jak propojit 16 × 2 LCD s PIC16F877A, podívejte se na podrobné video na konci tohoto tutoriálu. Pryč jsou staré časy, kdy jsme pro indikaci uživatele používali LED diody. Podívejme se, jak můžeme pomocí LCD displejů zajistit, aby naše projekty vypadaly skvěleji a užitečněji. Podívejte se také na naše předchozí články o Interfacing LCD s 8051, s Arduino, s Raspberry Pi, s AVR.
Funkce pro propojení LCD s mikrokontrolérem PIC:
Abychom to usnadnili, vytvořili jsme malou knihovnu, která nám může usnadnit používání tohoto LCD s naším PIC16F877A. Zde je ke stažení uveden soubor záhlaví „MyLCD.h“, který obsahuje všechny nezbytné funkce pro řízení LCD pomocí PIC MCU. Kód knihovny je dobře vysvětlen řádky komentářů, ale pokud máte stále pochybnosti, obraťte se na nás prostřednictvím sekce komentářů. V tomto článku také zkontrolujte základní fungování LCD a jeho zapojení.
Poznámka: Vždy se doporučuje vědět, co se ve vašem hlavičkovém souboru ve skutečnosti děje, protože vám pomůže při ladění nebo při změně MCU.
Nyní existují dva způsoby, jak přidat tento kód do vašeho programu. Můžete buď zkopírovat všechny výše uvedené řádky kódu v MyLCD.h a vložit je před void main (). Nebo si můžete stáhnout soubor záhlaví pomocí odkazu a přidat jej do souboru záhlaví vašeho projektu ( #include "MyLCD.h "; ). To lze provést kliknutím pravým tlačítkem na soubor záhlaví a výběrem Přidat existující položku a procházením tohoto souboru záhlaví.
Zde jsem zkopíroval a vložil kód souboru záhlaví do svého hlavního souboru C. Pokud tedy používáte náš kód, nemusíte stahovat a přidávat záhlaví do svého programu, stačí použít kompletní kód uvedený na konci tohoto výukového programu. Pamatujte, že tato knihovna bude podporovat pouze mikrokontrolér PIC16F řady PIC.
Zde vysvětluji každou funkci uvnitř našeho souboru záhlaví níže:
void Lcd_Start (): Tato funkce by měla být první funkcí, kterou je třeba zavolat, aby bylo možné začít pracovat s naším LCD. Tuto funkci bychom měli volat pouze jednou, abychom se vyhnuli zpoždění v programu.
void Lcd_Start () {Lcd_SetBit (0x00); pro (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 se používá pro návrat domů -> Vymaže RAM a inicializuje LCD Lcd_Cmd (0x02); // 02H se používá pro návrat domů -> Vymaže RAM a inicializuje LCD Lcd_Cmd (0x08); // Vyberte řádek 1 Lcd_Cmd (0x00); // Vymazat řádek 1 Zobrazit Lcd_Cmd (0x0C); // Vyberte řádek 2 Lcd_Cmd (0x00); // Vymazat řádek 2 Zobrazit Lcd_Cmd (0x06); }
Lcd_Clear (): Tato funkce vymaže obrazovku LCD a lze ji použít uvnitř smyček k vymazání vzhledu předchozích dat.
Lcd_Clear () {Lcd_Cmd (0); // Vymazat LCD Lcd_Cmd (1); // Přesuňte kurzor na první pozici}
void Lcd_Set_Cursor (x pos, y pos): Jakmile je náš LCD spuštěn, je připraven přijímat příkazy, můžeme pomocí této funkce dát LCD pokyn, aby nastavil kurzor na vámi preferované místo. Předpokládejme, že pokud potřebujeme kurzor na 5. znak 1. řádku. Pak bude funkce 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 se používá k pohybu kurzoru z = temp >> 4; // Nižší 8 bitů y = temp & 0x0F; // Horní 8 bitů Lcd_Cmd (z); // Nastavit řádek Lcd_Cmd (y); // Nastavit sloupec} else if (a == 2) {temp = 0xC0 + b - 1; z = teplota >> 4; // Nižší 8 bitů y = temp & 0x0F; // Horní 8 bitů Lcd_Cmd (z); // Nastavit řádek Lcd_Cmd (y); // Nastavit sloupec}}
void Lcd_Print_Char (char data): Jakmile je kurzor nastaven, můžeme napsat znak na jeho pozici jednoduchým voláním této funkce.
void Lcd_Print_Char (char data) // Odeslání 8 bitů přes 4bitový režim {char Lower_Nibble, Upper_Nibble; Lower_Nibble = data & 0x0F; Upper_Nibble = data & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Odeslání horní poloviny posunutím o 4 EN = 1; pro (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Odeslat dolní polovinu EN = 1; pro (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Pokud má být zobrazena skupina znaků, lze použít funkci řetězce.
void Lcd_Print_String (char * a) {int i; pro (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Rozdělte řetězec pomocí ukazatelů a zavolejte funkci Char}
Při každém volání Lcd_Print_Char (char data) se příslušné datové hodnoty odešlou do datových řádků LCD. Tyto znaky dosáhnou HD44780U ve formě bitů. Nyní tento IC spojuje bity se znakem, který se má zobrazit pomocí jeho paměti ROM, jak je znázorněno v následující tabulce. Bity pro všechny znaky najdete v datovém listu ovladače LCD HD44780U.
Nyní, protože jsme s naším hlavičkovým souborem spokojeni, vytvořme obvod a otestujme program. Zkontrolujte také kompletní soubor záhlaví uvedený v odkazu uvedeném výše.
Schéma zapojení a testování:
Níže je schéma zapojení rozhraní 16x2 LCD s mikrokontrolérem PIC.
Ve výše uvedeném obvodu jsem neukázal připojení napájecího zdroje nebo ICSP, protože používáme stejnou desku, kterou jsme použili v předchozím tutoriálu, zkontrolujte zde.
Jednou důležitou věcí, kterou si v programu všimnete, jsou definice pinů LCD:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Tyto definice pinů lze změnit podle nastavení hardwaru programátorů. Pokud zde změníte, nezapomeňte změnit konfiguraci respektovaného portu v hlavní funkci.
Hardware pro tento projekt je velmi jednoduchý. Znovu použijeme stejný PIC modul, který jsme použili naposledy, a připojíme LCD modul k našemu PIC pomocí propojovacích vodičů.
Připojení lze pochopit v následující tabulce:
Číslo PIN LCD |
Název PINu LCD |
Název PINu MCU |
Číslo PIN MCU |
1 |
Přízemní |
Přízemní |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Přízemní |
12 |
4 |
Registrovat Vybrat |
RD2 |
21 |
5 |
Číst psát |
Přízemní |
12 |
6 |
Umožnit |
RD3 |
22 |
7 |
Datový bit 0 |
NC |
- |
8 |
Datový bit 1 |
NC |
- |
9 |
Datový bit 2 |
NC |
- |
10 |
Datový bit 3 |
NC |
- |
11 |
Datový bit 4 |
RD4 |
27 |
12 |
Datový bit 5 |
RD5 |
28 |
13 |
Datový bit 6 |
RD6 |
29 |
14 |
Datový bit 7 |
RD7 |
30 |
15 |
Pozitivní LED |
+ 5V |
11 |
16 |
LED negativní |
Přízemní |
12 |
Nyní pojďme jednoduše provést připojení, vypsat kód do našeho MCU a ověřit výstup.
Pokud máte nějaké potíže nebo pochybnosti, použijte prosím sekci komentářů. Zkontrolujte také níže uvedené ukázkové video.