Displej je nevyhnutnou súčasťou stroja, či už je to akýkoľvek domáci spotrebič alebo priemyselný stroj. Displej zobrazuje nielen možnosti ovládania stroja, ale aj stav a výstup úlohy vykonanej strojom. V elektronike sa používa veľa typov displejov, ako je 7-segmentový displej, LCD displej, TFT dotykový displej, LED displej atď. 16x2 LCD displej je najzákladnejší a používa sa aj v niektorých malých elektronických zariadeniach. Urobili sme veľa projekty využívajúce 16x2 LCD vrátane základného prepojenia s inými mikrokontrolérmi:
- Rozhranie LCD s mikrokontrolérom 8051
- Prepojenie LCD s mikrokontrolérom ATmega32
- Rozhranie LCD s mikrokontrolérom PIC
- Prepojenie 16x2 LCD s Arduino
- 16x2 LCD prepojenie s Raspberry Pi pomocou Pythonu
V tomto tutoriále uvidíme, ako prepojiť 16x2 LCD s mikrokontrolérom ARM7-LPC2148 a zobraziť jednoduchú uvítaciu správu. Ak ste s ARM7 nováčikom, začnite základmi ARM7 LPC2148 a naučte sa, ako ho možno programovať pomocou Keil uVision
Potrebné materiály
Hardware
- Doska mikrokontroléra ARM7-LPC2148
- LCD (16X2)
- Potenciometer
- 5V regulátor napätia IC
- Nepál
- Pripojenie drôtov
- 9V batéria
- Kábel micro USB
Softvér
- Keil uVision 5
- Magic Flash Tool
Predtým, ako sa zapojíme do projektu, musíme vedieť niekoľko vecí o prevádzkových režimoch LCD a hexadecimálnych kódoch LCD.
Modul LCD displeja 16X2
16X2 LCD hovorí, že má 16 stĺpcov a 2 riadky. Tento LCD má 16 pinov. Pod obrázkom a tabuľkou nižšie sú uvedené názvy pinov LCD displeja a jeho funkcií.
NÁZOV |
FUNKCIA |
VSS |
Uzemňovací kolík |
VDD |
+ 5V vstupný kolík |
VEE |
Kolík nastavenia kontrastu |
RS |
Registrovať Vyberte |
R / W |
PIN na čítanie / zápis |
E |
Povoliť pripnutie |
D0-D7 |
Dátové kolíky (8 pinov) |
LED A |
Anódový kolík (+ 5 V) |
LED K |
Katódový kolík (GND) |
Displej LCD môže pracovať v dvoch rôznych režimoch, a to v 4-bitovom režime a 8-bitovom režime. V 4-bitovom režime odosielame dáta po kvapkách, najskôr horné a potom spodné. Pre tých z vás, ktorí nevedia, čo je to prstenec: prstenec je skupina štyroch bitov, takže spodné štyri bity (D0-D3) bajtu tvoria spodný prstenec, zatiaľ čo horné štyri bity (D4-D7) bajtu tvoria vyššiu zrnitosť. To nám umožňuje posielať 8-bitové dáta.
Zatiaľ čo v 8-bitovom režime môžeme 8-bitové dáta posielať priamo jedným ťahom, pretože používame všetkých 8 dátových liniek.
Tu v tomto projekte použijeme najbežnejšie používaný režim, ktorým je 4-bitový režim. V štvorbitovom režime môžeme uložiť 4 piny mikrokontroléra a tiež znížiť réžiu vedenia.
16x2 tiež používa HEX kód na prijatie ľubovoľného príkazu, pre LCD existuje veľa hexadecimálnych príkazov, ako je pohyb kurzorom, výber režimu, posunutie ovládacieho prvku na druhý riadok atď. Ak sa chcete dozvedieť viac informácií o 16X2 LCD zobrazovacom module a hexadecimálnych príkazoch, kliknite na odkaz.
Schéma zapojenia a zapojenia
Nižšie uvedená tabuľka zobrazuje zapojenia obvodov medzi LCD a ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Register Select) |
P0.6 |
E (Povoliť) |
P0.12 |
D4 (dátový kolík 4) |
P0.13 |
D5 (dátový kolík 5) |
P0.14 |
D6 (dátový kolík 6) |
P0.15 |
D7 (dátový kolík 7) |
Pripojenie regulátora napätia s displejom LCD a pákou ARM7
V nasledujúcej tabuľke sú zobrazené spojenia medzi ARM7 a LCD s regulátorom napätia.
IC regulátora napätia |
Funkcia pripnutia |
LCD a ARM-7 LPC2148 |
1. Ľavý kolík |
+ Ve z batérie 9V vstup |
NC |
2. Stredový kolík |
- Ve z batérie |
VSS, R / W, K LCD GND ARM7 |
3. Pravý kolík |
Regulovaný výstup + 5 V. |
VDD, A LCD + 5 V k ARM7 |
Potenciometer s LCD
Na zmenu kontrastu LCD displeja sa používa potenciometer. Hrniec má tri kolíky, ľavý kolík (1) je pripojený k + 5 V a stredový (2) k VEE alebo V0 LCD modulu a pravý kolík (3) je pripojený k GND. Otáčaním gombíka môžeme upraviť kontrast.
Nastavenia prepojky
Prepojovací kolík je prítomný na ARM7-Stick, aby sme mohli napájať a nahrávať kód pomocou USB alebo pomocou 5V DC vstupu iba pre napájanie. Môžete vidieť nasledujúce obrázky.
Obrázok dole ukazuje, že jumper je v polohe DC. To znamená, že musíme napájať dosku z externého zdroja 5V.
A tento obrázok ukazuje, že prepojka je pripojená v režime USB. Tu je napájanie a kód poskytované prostredníctvom micro usb portu.
POZNÁMKA: Tu v tomto tutoriáli sme nahrali kód pomocou USB nastavením jumperu na USB a potom zmenili jumper na DC režim na napájanie LPC2148 z 5v vstupu regulátora. Môžete sa o tom presvedčiť vo videu na konci.
Konečný obvod na prepojenie 16x2 LCD s mikrokontrolérom ARM7 bude vyzerať takto:
Programovanie ARM7-LPC2148
Na programovanie ARM7-LPC2148 potrebujeme keil uVision & Flash Magic nástroj. Na programovanie karty ARM7 Stick cez port micro USB používame kábel USB. Napíšeme kód pomocou Keila a vytvoríme hexadecimálny súbor. Potom sa HEX súbor nahrá na flash disk ARM7 pomocou Flash Magic. Ak sa chcete dozvedieť viac o inštalácii keil uVision a Flash Magic a o tom, ako ich používať, kliknite na odkaz Začíname s mikrokontrolérom ARM7 LPC2148 a naprogramujte ho pomocou Keil uVision.
Celý kód na prepojenie LCD s ARM 7 je uvedený na konci tohto tutoriálu, tu vysvetľujeme niekoľko jeho častí.
Najskôr musíme zahrnúť požadované hlavičkové súbory
#include
Inicializácia modulu LCD je veľmi dôležitý krok. Tu používame určité HEX kódy, čo sú vlastne príkazy, aby sme informovali LCD o režime činnosti (4-bit), type LCD (16x2), štartovacej čiare atď.
void LCD_INITILIZE (void) // Funkcia prípravy LCD { IO0DIR = 0x0000FFF0; // Nastaví pin P0.4, P0.6, P0.12, P0.13, P0.14, P0.15 ako VÝSTUP delay_ms (20); LCD_SEND (0x02); // Inicializácia lcd v 4-bitovom režime prevádzky LCD_SEND (0x28); // 2 riadky (16X2) LCD_SEND (0x0C); // Vypnuté zobrazenie kurzora LCD_SEND (0x06); // Automatický prírastok kurzora LCD_SEND (0x01); // Zobraziť jasný LCD_SEND (0x80); // Prvý riadok prvá pozícia }
Pre 4-bitový režim máme pre piny iný typ funkcie zápisu, to znamená pomocou horného a dolného obrusu. Pozrime sa, ako sa to robí
void LCD_SEND (príkaz char) // Funkcia na posielanie hexadecimálnych príkazov okusuje okusom { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((príkaz & 0xF0) << 8)); // Odošle hornú časť príkazu IO0SET = 0x00000040; // Povolenie HIGH IO0CLR = 0x00000030; // Vytvorenie RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Povolenie LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((príkaz & 0x0F) << 12)); // Odoslať Dolné zrnitosť príkazu IO0SET = 0x00000040; // POVOLIŤ VYSOKÚ IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // ENABLE LOW delay_ms (5); }
Logika odosielania obsahu
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((príkaz & 0x0F) << 12)); // Odošlite spodnú časť príkazu IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((príkaz & 0xF0) << 8)); // Odošle hornú časť príkazu
Vyššie uvedené vyhlásenia zohrávajú v tomto programe dôležitú úlohu. Prvý príkaz odošle dolný obrus a druhý pošle horný obrus. To nemá vplyv na ostatné piny, ktoré robíme. Pozrime sa, ako sa to deje predtým, ako sa dozvieme najskôr túto logiku
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Používame teda koncept maskovania a operáciu logického posunu bez ovplyvnenia ostatných pinov. Znamená to, že sú použité iba kolíky (P0.12 - P0.15) a nie sú ovplyvnené žiadne ďalšie kolíky ako P0.4, P0.6. Bude to vykonané posunutím údajov o štyri bity a vytvorením horného obrusu v mieste spodného obrusovania a maskovaním horného obrusovania. A potom urobíme dolné bity nula (0XF0) a ORed s nibble dátami, aby sme dostali horné nibble dáta na výstupe.
Podobný proces sa používa pre nižšie nibble dáta, ale tu nemusíme posúvať dáta.
Pri zápise údajov na výstup, to znamená, že v príkazovom režime by RS malo byť LOW a na vykonanie povolenia musí byť HIGH a v dátovom režime RS by malo byť HIGH a na vykonanie povolenia musí byť HIGH.
Teraz pre odosielanie údajov reťazca, ktoré sa majú vytlačiť na výstupe, sa používa rovnaký princíp: nibble by nibble. Dôležitým krokom je, že REGISTER SELECT (RS) musí byť pre dátový režim VYSOKÝ.
void LCD_DISPLAY (char * msg) // Funkcia pre tlač znakov odosielaných po jednom { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Odošle horný nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH na tlač údajov IO0CLR = 0x00000020; // RW NÍZKE oneskorenie režimu zápisu ms (2); IO0CLR = 0x00000040; // EN = 0, RS a RW nezmenené (tj. RS = 1, RW = 0) oneskorenie ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Odošle dolný nibble IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; oneskorenie ms (2); IO0CLR = 0x00000040; oneskorenie ms (5); i ++; }
Kompletné video o kódovaní a demonštrácii je uvedené nižšie.