Zaslon je nujni del stroja, ne glede na to, ali gre za gospodinjske aparate ali industrijske stroje. Na zaslonu niso prikazane samo možnosti upravljanja za upravljanje stroja, temveč tudi stanje in rezultat opravila, ki ga izvaja ta naprava. Obstaja veliko vrst zaslonov, ki se uporabljajo v elektroniki, kot so 7-segmentni zaslon, LCD zaslon, TFT zaslon na dotik, LED zaslon itd. 16x2 LCD zaslon je najosnovnejši in se uporablja tudi v nekaterih majhnih elektronskih napravah. projekti, ki uporabljajo LCD 16x2, vključno z osnovnim povezovanjem z drugimi mikrokrmilniki:
- Povezava LCD z mikrokrmilnikom 8051
- Povezava LCD-ja z mikrokrmilnikom ATmega32
- Povezava LCD z mikrokrmilnikom PIC
- Povezava 16x2 LCD z Arduinom
- 16-kratno povezovanje LCD-jev z Raspberry Pi z uporabo Pythona
V tej vadnici bomo videli, kako povezati LCD 16x2 z mikrokrmilnikom ARM7-LPC2148 in prikazati preprosto pozdravno sporočilo. Če ste novi z ARM7, začnite z osnovami ARM7 LPC2148 in se naučite, kako ga lahko programirate s pomočjo Keil uVision
Potrebni materiali
Strojna oprema
- Mikrokrmilna plošča ARM7-LPC2148
- LCD (16X2)
- Potenciometer
- 5V napetostni regulator IC
- Breadboard
- Povezovanje žic
- 9V baterija
- Kabel Micro USB
Programska oprema
- Keil uVision 5
- Magic Flash Tool
Preden začnemo s projektom, moramo vedeti nekaj o načinu delovanja LCD in o šestnajstiških kodah LCD.
Zaslonski modul LCD 16X2
LCD 16X2 pravi, da ima 16 stolpcev in 2 vrstici. Ta LCD ima 16 nožic. Pod sliko in tabelo so prikazana imena nožic LCD zaslona in njegove funkcije.
NAME |
FUNKCIJA |
VSS |
Ground Pin |
VDD |
+ 5V vhodni zatič |
VEE |
Zatič za nastavitev kontrasta |
RS |
Register Select |
R / W |
Branje / pisanje Pin |
E |
Omogoči pin |
D0-D7 |
Podatkovni zatiči (8 zatiči) |
LED A |
Anodni zatič (+ 5V) |
LED K |
Katodni zatič (GND) |
LCD lahko deluje v dveh različnih načinih, in sicer v 4-bitnem in 8-bitnem načinu. V 4-bitnem načinu podatke grizemo po grizljaju, najprej zgornji grizljaj in nato spodnji grizljaj. Za tiste, ki ne veste, kaj je grizljanje: grizljaj je skupina štirih bitov, zato spodnji štirje bitji (D0-D3) bajta tvorijo spodnji grizljaj, medtem ko zgornji štirje bitji (D4-D7) bajta tvorijo višji grizljaj. To nam omogoča pošiljanje 8-bitnih podatkov.
Medtem ko lahko v 8- bitnem načinu 8-bitne podatke pošljemo neposredno v enem potezu, saj uporabljamo vseh 8 podatkovnih vrstic.
V tem projektu bomo uporabili najpogosteje uporabljen način, ki je 4-bitni način. V štiri bitnem načinu lahko prihranimo 4 nožice mikrokrmilnika in zmanjšamo tudi režijske stroške.
16x2 uporablja tudi šestnajstiško kodo za prevzem katerega koli ukaza, za LCD je veliko šestnajstiških ukazov, kot je premikanje kurzorja, izbira načina, premik gumba v drugo vrstico itd. Če želite izvedeti več o 16X2 LCD Display Module in hex ukazih, sledite povezavi.
Shema vezja in povezave
Spodnja tabela prikazuje vezje vezij med LCD in ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (izbira registra) |
P0.6 |
E (Omogoči) |
P0.12 |
D4 (podatkovni zatič 4) |
P0.13 |
D5 (podatkovni zatič 5) |
P0.14 |
D6 (podatkovni zatič 6) |
P0.15 |
D7 (podatkovni zatič 7) |
Povezave regulatorja napetosti z LCD in ARM7 Stick
Spodnja tabela prikazuje povezave med ARM7 in LCD z regulatorjem napetosti.
IC napetostnega regulatorja |
Funkcija zatiča |
LCD & ARM-7 LPC2148 |
1. Levi zatič |
+ Ve od vhoda baterije 9V |
NC |
2. Center Pin |
- Od baterije |
VSS, R / W, K LCD GND ARM7 |
3. Desni zatič |
Reguliran + 5V izhod |
VDD, A LCD + 5V ARM7 |
Potenciometer z LCD
Potenciometer se uporablja za spreminjanje kontrasta LCD zaslona. Lonec ima tri zatiče, levi zatič (1) je povezan na + 5V, sredinski (2) pa na VEE ali V0 modula LCD, desni zatič (3) pa na GND. Kontrast lahko nastavimo z obračanjem gumba.
Nastavitve preskoka
V ARM7-Stick je prisoten mostični zatič, tako da lahko napajamo in nalagamo kodo z uporabo USB-ja ali z vhodom 5V DC samo za napajanje. Ogledate si lahko spodnje slike.
Spodnja slika prikazuje, da je mostiček v položaju DC. To pomeni, da moramo ploščo napajati iz zunanjega napajanja 5V.
Ta slika prikazuje, da je mostiček povezan v načinu USB. Tu se napajanje in koda zagotavljata prek mikro USB vrat.
OPOMBA: Tukaj smo v tej vadnici naložili kodo z uporabo USB-ja, tako da smo mostiček nastavili na USB, nato pa mostiček spremenili v način enosmernega toka, da je napajal LPC2148 iz 5v vhoda regulatorja. To lahko preverite v videoposnetku na koncu.
Končno vezje za povezovanje 16x2 LCD z ARM7 mikrokrmilnikom bo videti takole:
Programiranje ARM7-LPC2148
Za programiranje ARM7-LPC2148 potrebujemo orodje keil uVision & Flash Magic. Za programiranje ARM7 Stick preko mikro USB vrat uporabljamo kabel USB. Kodo napišemo s pomočjo Keila in ustvarimo šestnajstiško datoteko, nato pa datoteko HEX z Flash Magic utripnemo na ARM7. Če želite izvedeti več o namestitvi keil uVision in Flash Magic ter kako jih uporabljati, sledite povezavi Uvod v mikrokrmilnik ARM7 LPC2148 in ga programirajte s pomočjo Keil uVision.
Popolna koda za povezovanje LCD-ja z ARM 7 je podana na koncu te vadnice, tukaj vam razlagamo nekaj delov.
Najprej moramo vključiti zahtevane datoteke glave
#include
Inicializacija LCD modula je zelo pomemben korak. Tu uporabljamo določene šestnajstiške kode, ki so dejansko ukazi, da LCD-prikazovalniku sporočimo način delovanja (4-bitni), vrsto LCD-ja (16x2), začetno vrstico itd.
void LCD_INITILIZE (void) // Funkcija za pripravo LCD-ja { IO0DIR = 0x0000FFF0; // nastavi pin P0.4, P0.6, P0.12, P0.13, P0.14, P0.15 kot IZHOD delay_ms (20); LCD_SEND (0x02); // inicializiramo lcd v 4-bitnem načinu delovanja LCD_SEND (0x28); // 2 vrstici (16X2) LCD_SEND (0x0C); // Prikaz na kazalcu izklopljen LCD_SEND (0x06); // Samodejni prirastek kurzorja LCD_SEND (0x01); // Prikaži jasen LCD_SEND (0x80); // Prva pozicija prve vrstice }
Za 4-bitni način imamo drugačno funkcijo zapisovanja na nožice, to je z uporabo zgornjega in spodnjega grizlja. Poglejmo, kako se to naredi
void LCD_SEND (ukaz char) // Funkcija za pošiljanje šestnajstiških ukazov grizenje z grizljanjem { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ukaz & 0xF0) << 8)); // Pošlji zgornji grizljaj ukaza IO0SET = 0x00000040; // omogočanje HIGH IO0CLR = 0x00000030; // Izdelava RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // omogočanje LOW delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ukaz & 0x0F) << 12)); // Pošlji spodnji grizljaj ukaza IO0SET = 0x00000040; // Omogoči HIGH IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // ENABLE LOW delay_ms (5); }
Nigble Pošiljanje logike
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ukaz & 0x0F) << 12)); // Pošlji spodnji grizljaj ukaza IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ukaz & 0xF0) << 8)); // Pošlji zgornji grizljaj ukaza
Zgoraj dve izjavi igrata pomembno vlogo v tem programu. Prvi ukaz pošlje spodnji grizljaj, drugi pa zgornji grizljaj. To ne vpliva na druge nožice, ki jih delamo. Poglejmo, kako se dogaja, preden najprej spoznamo to logiko
ORING- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Torej uporabljamo koncept maskiranja in logično operacijo premika, ne da bi to vplivalo na ostale nožice. Pomeni, da se uporabljajo samo zatiči (P0.12-P0.15) in to ne vpliva na nobene druge nožice, na primer P0.4, P0.6. To se bo izvedlo tako, da se bodo podatki premaknili v štirih bitih, zgornje grizljaje pa namesto spodnjega grizljaja in maskiranje zgornjega. In potem naredimo spodnje bitov nič (0XF0) in ORed s podatki o grizljanju, da dobimo podatke o zgornjem grizljanju na izhodu.
Podoben postopek se uporablja za podatke z nižjim grizljanjem, vendar tukaj podatkov ni treba premikati.
Med zapisovanjem podatkov v izhod, torej v ukaznem načinu, mora biti RS nizka, za izvajanje pa mora biti VISOK, v podatkovnem načinu pa mora biti VISOK, za izvajanje pa mora biti VISOK.
Zdaj za pošiljanje nizovnih podatkov, ki jih je treba natisniti na izhodu, se uporablja isti princip grizenje za grizljanje. Pomemben korak tukaj je REGISTER SELECT (RS) mora biti VISOK za podatkovni način.
void LCD_DISPLAY (char * msg) // Funkcija za tiskanje znakov, poslanih enega za drugim { uint8_t i = 0; medtem ko (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // pošlje zgornji grizljaj IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH za tiskanje podatkov IO0CLR = 0x00000020; // RW LOW način zakasnitve v načinu ms (2); IO0CLR = 0x00000040; // EN = 0, RS in RW nespremenjeni (tj. RS = 1, RW = 0) zakasnitev ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // pošlje spodnji griz IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; zakasnitev ms (2); IO0CLR = 0x00000040; zakasnitev ms (5); i ++; }
Celoten video o kodiranju in predstavitvi je spodaj.