Displej je nezbytnou součástí stroje, ať už se jedná o jakýkoli domácí spotřebič nebo průmyslové stroje. Displej zobrazuje nejen možnosti ovládání stroje, ale také zobrazuje stav a výstup úkolu prováděného tímto strojem. V elektronice se používá mnoho typů displejů, jako je 7segmentový displej, LCD displej, TFT dotykový displej, LED displej atd. 16x2 LCD displej je nejzákladnější a používá se také v některých malých elektronických zařízeních, udělali jsme spoustu projekty využívající 16x2 LCD včetně základního propojení s jinými mikrokontroléry:
- Rozhraní LCD s mikrokontrolérem 8051
- Propojení LCD s mikrokontrolérem ATmega32
- Rozhraní LCD s mikrokontrolérem PIC
- Propojení 16x2 LCD s Arduino
- 16x2 LCD rozhraní s Raspberry Pi pomocí Pythonu
V tomto tutoriálu uvidíme, jak propojit 16x2 LCD s mikrokontrolérem ARM7-LPC2148 a zobrazit jednoduchou uvítací zprávu. Pokud jste s ARM7 noví, začněte základy ARM7 LPC2148 a naučte se, jak jej lze naprogramovat pomocí Keil uVision
Potřebné materiály
Hardware
- Deska mikrokontroléru ARM7-LPC2148
- LCD (16X2)
- Potenciometr
- IC regulátor napětí 5V
- Nepájivá deska
- Připojení vodičů
- 9V baterie
- Kabel micro USB
Software
- Keil uVision 5
- Magic Flash Tool
Než se pustíme do projektu, musíme vědět několik věcí o provozních režimech LCD ao hexadecimálních kódech LCD.
Modul LCD displeje 16X2
16X2 LCD říká, že má 16 sloupců a 2 řádky. Tento LCD má 16 pinů. Níže uvedený obrázek a tabulka uvádí názvy pinů LCD displeje a jeho funkcí.
NÁZEV |
FUNKCE |
VSS |
Uzemňovací kolík |
VDD |
+ 5V vstupní kolík |
VEE |
Kolík pro nastavení kontrastu |
RS |
Registrovat Vybrat |
R / W |
PIN pro čtení / zápis |
E |
Povolit PIN |
D0-D7 |
Datové kolíky (8 kolíků) |
LED A |
Anodový kolík (+ 5 V) |
LED K |
Katodový kolík (GND) |
Displej LCD může pracovat ve dvou různých režimech, a to ve 4bitovém režimu a 8bitovém režimu. Ve 4bitovém režimu posíláme data nibble po nibble, nejprve horní nibble a poté spodní nibble. Pro ty z vás, kteří nevědí, co je to okusování: okusování je skupina čtyř bitů, takže spodní čtyři bity (D0-D3) bajtu tvoří spodní okusování, zatímco horní čtyři bity (D4-D7) bajtu tvoří vyšší nibble. To nám umožňuje odesílat 8bitová data.
Zatímco v 8bitovém režimu můžeme poslat 8bitová data přímo jedním tahem, protože používáme všech 8 datových linek.
Zde v tomto projektu použijeme nejčastěji používaný režim, kterým je 4bitový režim. Ve čtyřbitovém režimu můžeme ušetřit 4 piny mikrokontroléru a také snížit režii vedení.
16x2 také používá hexadecimální kód k převzetí libovolného příkazu, existuje mnoho hexadecimálních příkazů pro LCD, jako je pohyb kurzoru, výběr režimu, posunutí ovládání na druhý řádek atd. Další informace o 16X2 LCD Display Module a hex příkazech.
Schéma zapojení a zapojení
Níže uvedená tabulka ukazuje zapojení obvodů mezi LCD a ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Register Select) |
P0.6 |
E (Povolit) |
P0.12 |
D4 (datový kolík 4) |
P0.13 |
D5 (datový kolík 5) |
P0.14 |
D6 (datový kolík 6) |
P0.15 |
D7 (datový kolík 7) |
Připojení regulátoru napětí s LCD a ARM7 Stick
Níže uvedená tabulka ukazuje spojení mezi ARM7 a LCD s regulátorem napětí.
IC regulátoru napětí |
Pin funkce |
LCD a ARM-7 LPC2148 |
1. Levý kolík |
+ Ve z baterie 9V vstup |
NC |
2. Středový kolík |
- Ve z baterie |
VSS, R / W, K LCD GND ARM7 |
3. Pravý kolík |
Regulovaný výstup + 5 V. |
VDD, A na LCD + 5 V k ARM7 |
Potenciometr s LCD
Potenciometr se používá ke změně kontrastu LCD displeje. Hrnec má tři piny, levý kolík (1) je připojen k + 5 V a střední (2) k VEE nebo V0 LCD modulu a pravý kolík (3) je připojen k GND. Otáčením knoflíku můžeme upravit kontrast.
Nastavení propojky
Propojovací kolík je na ARM7-Stick, takže můžeme napájet a nahrávat kód pomocí USB nebo pomocí 5V DC vstupu pouze pro napájení. Můžete vidět níže uvedené obrázky.
Níže uvedený obrázek ukazuje, že propojka je v poloze DC. To znamená, že desku musíme napájet z externího 5V zdroje.
A tento obrázek ukazuje, že propojka je připojena v režimu USB. Zde je napájení a kód poskytován přes micro usb port.
POZNÁMKA: Tady v tomto tutoriálu jsme nahráli kód pomocí USB nastavením jumperu na USB a poté změnili jumper na DC režim pro napájení LPC2148 z 5v vstupu regulátoru. Můžete si to prohlédnout ve videu na konci.
Konečný obvod pro propojení 16x2 LCD s mikrokontrolérem ARM7 bude vypadat takto:
Programování ARM7-LPC2148
K programování ARM7-LPC2148 potřebujeme nástroj Keil uVision & Flash Magic. Používáme USB kabel k programování ARM7 Stick přes micro USB port. Napíšeme kód pomocí Keila a vytvoříme hexadecimální soubor a poté se soubor HEX přenese na flash disk ARM7 pomocí Flash Magic. Chcete-li se dozvědět více o instalaci keil uVision a Flash Magic a o tom, jak je používat, přejděte na odkaz Začínáme s mikrokontrolérem ARM7 LPC2148 a naprogramujte jej pomocí Keil uVision.
Celý kód pro propojení LCD s ARM 7 je uveden na konci tohoto tutoriálu, zde vysvětlujeme několik jeho částí.
Nejprve musíme zahrnout požadované hlavičkové soubory
#zahrnout
Inicializace modulu LCD je velmi důležitý krok. Zde používáme určité HEX kódy, které jsou vlastně příkazy, abychom informovali LCD o provozním režimu (4-bit), typu LCD (16x2), startovní čáře atd.
void LCD_INITILIZE (void) // Funkce pro přípravu LCD { IO0DIR = 0x0000FFF0; // Nastaví pin P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicializace lcd ve 4bitovém provozním režimu LCD_SEND (0x28); // 2 řádky (16X2) LCD_SEND (0x0C); // Vypnout zobrazení kurzoru LCD_SEND (0x06); // Automatický přírůstek kurzoru LCD_SEND (0x01); // Zobrazit jasný LCD_SEND (0x80); // První řádek první pozice }
Pro 4bitový režim máme pro piny jiný typ funkce zápisu, to znamená pomocí horního a dolního okusování. Uvidíme, jak se to dělá
void LCD_SEND (příkaz char) // Funkce pro odesílání hex příkazů okusovat okusovat { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((příkaz & 0xF0) << 8)); // Odeslání horního okusování příkazu IO0SET = 0x00000040; // Povolení HIGH IO0CLR = 0x00000030; // Vytvoření RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Povolení LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((příkaz & 0x0F) << 12)); // Odeslat Dolní okusování příkazu IO0SET = 0x00000040; // POVOLIT VYSOKÝ IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // ENABLE LOW delay_ms (5); }
Logika odesílání okusování
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((příkaz & 0x0F) << 12)); // Odeslat Dolní okusování příkazu IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((příkaz & 0xF0) << 8)); // Odeslat horní část příkazu
Výše uvedená prohlášení hrají v tomto programu důležitou roli. První příkaz odešle spodní okusovat a druhý vyšle horní okusovat. To je bez ovlivnění ostatních kolíků, které děláme. Podívejme se, jak se to děje, než se nejprve seznámíme s touto logikou
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Používáme tedy koncept maskování a operaci logického posunu, aniž bychom ovlivnili ostatní piny. Znamená to, že jsou použity pouze piny (P0.12 - P0.15) a nejsou ovlivněny žádné další piny, jako jsou P0.4, P0.6. Bude to provedeno posunutím dat ve čtyřech bitech a provedením horního okusování v místě spodního okuláru a maskováním horního okusování. A pak uděláme spodní bity nula (0XF0) a ORed s nibble daty, abychom získali horní nibble data na výstupu.
Podobný proces se používá pro data s nižším okusováním, ale zde nemusíme data přesouvat.
Při zápisu dat na výstup, tj. V příkazovém režimu by RS mělo být LOW a pro provedení povolení musí být HIGH a v datovém režimu RS by mělo být HIGH a pro provedení povolení musí být HIGH.
Nyní pro odesílání dat řetězce, která se mají vytisknout na výstupu, se používá stejný princip nibble by nibble. Důležitým krokem je, že REGISTER SELECT (RS) musí být pro datový režim HIGH.
void LCD_DISPLAY (char * msg) // Funkce pro tisk posílaných znaků jeden po druhém { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Odešle horní okusování IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH pro tisk dat IO0CLR = 0x00000020; // RW LOW Zpoždění režimu zápisu ms (2); IO0CLR = 0x00000040; // EN = 0, RS a RW beze změny (tj. RS = 1, RW = 0) zpoždění ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Odesílá spodní okusování IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; zpoždění ms (2); IO0CLR = 0x00000040; zpoždění ms (5); i ++; }
Kompletní video o kódování a demonstraci je uvedeno níže.