- Nødvendige materialer
- 16X2 LCD-skærmmodul
- Kredsløbsdiagram og forbindelser
- Programmering ARM7-LPC2148
Display er den nødvendige del af en maskine, hvad enten det er husholdningsapparater eller industrielle maskiner. Displayet viser ikke kun kontrolmulighederne til betjening af maskinen, men viser også status og output for den opgave, der udføres af maskinen. Der er mange typer skærme, der bruges i elektronik som 7-segment display, LCD display, TFT touch screen display, LED display osv. 16x2 LCD display er den mest basale og også brugt display i nogle små elektronik udstyr, vi har gjort meget af projekter, der bruger 16x2 LCD, herunder den grundlæggende grænseflade til andre mikrocontrollere:
- LCD-grænseflade med 8051 mikrokontroller
- Interfacing LCD med ATmega32 Microcontroller
- LCD-grænseflade med PIC-mikrocontroller
- Interfacing 16x2 LCD med Arduino
- 16x2 LCD-grænseflade med Raspberry Pi ved hjælp af Python
I denne vejledning vil vi se, hvordan man interagerer en 16x2 LCD med ARM7-LPC2148 mikrokontroller og viser en simpel velkomstmeddelelse. Hvis du er ny med ARM7, skal du starte med det grundlæggende i ARM7 LPC2148 og lære, hvordan det kan programmeres ved hjælp af Keil uVision
Nødvendige materialer
Hardware
- ARM7-LPC2148 Microcontroller-kort
- LCD (16X2)
- Potentiometer
- 5V spændingsregulator IC
- Brødbræt
- Tilslutning af ledninger
- 9V batteri
- Micro USB-kabel
Software
- Keil uVision 5
- Magic Flash-værktøj
Før vi går ind i projektet, skal vi vide få ting om LCD-driftsformerne og om LCD Hex-koder.
16X2 LCD-skærmmodul
En 16X2 LCD siger, at den har 16 kolonner og 2 rækker. Denne LCD-skærm har 16 ben. Nedenstående billede og tabel viser pin-navnene på LCD-displayet og dets funktioner.
NAVN |
FUNGERE |
VSS |
Jordstift |
VDD |
+ 5V indgangsstift |
VEE |
Kontrastjusteringsstift |
RS |
Registrer Vælg |
R / W |
Læs / skriv nål |
E |
Aktivér Pin |
D0-D7 |
Data Pins (8 Pins) |
LED A |
Anodestift (+ 5V) |
LED K |
Katodestift (GND) |
LCD kan fungere i to forskellige tilstande, nemlig 4-bit-tilstand og 8-bit-tilstand. I 4-bit-tilstand sender vi data nibble for nibble, først øvre nibble og derefter nedre nibble. For dem af jer, der ikke ved hvad en nibble er: en nibble er en gruppe på fire bits, så de nederste fire bits (D0-D3) i en byte danner den nederste nibble, mens de øverste fire bits (D4-D7) af en byte, den højere nibble. Dette giver os mulighed for at sende 8 bit data.
Mens vi i 8-bit-tilstand kan sende 8-bit-dataene direkte i et slag, da vi bruger alle de 8 datalinjer.
Her i dette projekt bruger vi den mest anvendte tilstand, som er 4-bit-tilstand. I fire bit-tilstand kan vi gemme 4 ben mikrocontroller og også reducere ledningsomkostningerne.
16x2 bruger også HEX-kode til at tage en hvilken som helst kommando, der er mange hex-kommandoer til LCD som at flytte markøren, vælge tilstand, skifte kontrol til anden linje osv. Hvis du vil vide mere om 16X2 LCD-displaymodul og hex-kommandoer, skal du følge linket.
Kredsløbsdiagram og forbindelser
Nedenstående tabel viser kredsløbsforbindelserne mellem LCD og ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Registrer Vælg) |
P0.6 |
E (Aktiver) |
P0.12 |
D4 (datapind 4) |
P0.13 |
D5 (Data pin 5) |
P0.14 |
D6 (datapind 6) |
P0.15 |
D7 (datapind 7) |
Tilslutninger af spændingsregulator med LCD & ARM7-stik
Nedenstående tabel viser forbindelserne mellem ARM7 og LCD med spændingsregulator.
Spændingsregulator IC |
Pin-funktion |
LCD & ARM-7 LPC2148 |
1. venstre pin |
+ Ve fra batteri 9V Input |
NC |
2. centrum pin |
- Ve fra batteri |
VSS, R / W, K af LCD GND af ARM7 |
3. højre pin |
Reguleret + 5V udgang |
VDD, A af LCD + 5V af ARM7 |
Potentiometer med LCD
Et potentiometer bruges til at variere kontrasten på LCD-displayet. En gryde har tre ben, venstre pin (1) er forbundet til + 5V og center (2) til VEE eller V0 på LCD-modulet, og højre pin (3) er forbundet til GND. Vi kan justere kontrasten ved at dreje på knappen.
Jumperindstillinger
En jumperpind findes i ARM7-Stick, så vi kan tænde og uploade kode ved hjælp af USB eller ved kun at bruge en 5V DC-indgang til strøm. Du kan se nedenstående billeder.
Billedet nedenfor viser, at jumperen er i DC-position. Det betyder, at vi skal drive kortet fra ekstern 5V-forsyning.
Og dette billede viser, at jumper er tilsluttet i USB-tilstand. Her leveres strøm og kode via micro usb-port.
BEMÆRK: Her i denne vejledning har vi uploadet kode ved hjælp af USB ved at indstille jumper til USB og derefter skiftet jumper til DC-tilstand til strøm LPC2148 fra 5v-indgang på regulator. Du kan tjekke dette i videoen til sidst.
Det sidste kredsløb til grænseflade mellem 16x2 LCD og ARM7 Microcontroller vil se sådan ud:
Programmering ARM7-LPC2148
For at programmere ARM7-LPC2148 har vi brug for keil uVision & Flash Magic værktøj. Vi bruger USB-kabel til at programmere ARM7 Stick via mikro-USB-port. Vi skriver kode ved hjælp af Keil og opretter en hex-fil, og derefter blinkes HEX-filen til ARM7-stick ved hjælp af Flash Magic. Hvis du vil vide mere om installation af keil uVision og Flash Magic, og hvordan du bruger dem, skal du følge linket Kom godt i gang med ARM7 LPC2148 Microcontroller og programmer det ved hjælp af Keil uVision.
Den komplette kode til grænseflade mellem LCD og ARM 7 er givet i slutningen af denne tutorial, her forklarer vi få dele af det.
Først og fremmest skal vi medtage de nødvendige headerfiler
#omfatte
Initialisering af LCD-modulet er et meget vigtigt skridt. Her bruger vi visse HEX-koder, der faktisk er kommandoer, til at fortælle LCD'et om driftsform (4-bit), type LCD (16x2), startlinje osv.
ugyldig LCD_INITILIZE (ugyldig) // Funktion for at gøre LCD-skærmen klar { IO0DIR = 0x0000FFF0; // Indstiller pin P0.4, P0.6, P0.12, P0.13, P0.14, P0.15 som OUTPUT delay_ms (20); LCD_SEND (0x02); // Initialiser lcd i 4-bit driftstilstand LCD_SEND (0x28); // 2 linjer (16X2) LCD_SEND (0x0C); // Vis på markør fra LCD_SEND (0x06); // Auto stigning markør LCD_SEND (0x01); // Vis klar LCD_SEND (0x80); // Første linje første position }
I 4-bit-tilstand har vi forskellige skrivefunktioner til stifterne, dvs. ved hjælp af øvre og nedre nibble. Lad os se, hvordan det gøres
ugyldig LCD_SEND (char-kommando) // Funktion til at sende hex-kommandoer nibble med nibble { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // Send øverste nibble af kommando IO0SET = 0x00000040; // Making Enable HIGH IO0CLR = 0x00000030; // Gør RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Aktivering af LAV forsinkelse_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((kommando & 0x0F) << 12)); // Send kommandostørrelse IO0SET = 0x00000040; // AKTIVER HØJ IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // AKTIVER LAV forsinkelse_ms (5); }
Logge på nibble-afsendelse
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((kommando & 0x0F) << 12)); // Send lavere nippel af kommando IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((kommando & 0xF0) << 8)); // Send den øverste kommandostørrelse
Over to udsagn spiller en vigtig rolle i dette program. Første kommando sender nedre nibble og anden sender den øvre nibble. Det er uden at påvirke de andre ben, vi gør. Lad os se, hvordan det sker, før det først får at vide om denne logik
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Så vi bruger et maskeringskoncept og logisk skiftoperation uden at påvirke de andre ben. Betyder, at kun benene (P0.12-P0.15) bruges, og ingen andre ben som P0.4, P0.6 påvirkes. Det gøres ved at flytte dataene i fire bits og gøre den øverste nibble i stedet for den nederste nibble og maske den øvre nibble. Og så laver vi de nederste bits nul (0XF0) og ORed med nibble-dataene for at få de øvre nibble-data ved output.
En lignende proces bruges til lavere nibble-data, men her behøver vi ikke at flytte dataene.
Under skrivning af data til output, dvs. i kommandotilstand, skal RS være LAV, og for at udføre aktivering skal være HØJ, og i datatilstand skal RS være HØJ og for at udføre aktivering skal være HØJ.
Nu for at sende strengdataene, der skal udskrives ved output, bruges det samme princip nibble for nibble. Vigtigt trin her er REGISTER SELECT (RS) skal være HIGH for datatilstand.
ugyldigt LCD_DISPLAY (char * msg) // Funktion til at udskrive de tegn, der sendes en efter en { uint8_t i = 0; mens (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Sender øvre nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH for at udskrive data IO0CLR = 0x00000020; // RW LOW Skriveforsinkelse ms (2); IO0CLR = 0x00000040; // EN = 0, RS og RW uændret (dvs. RS = 1, RW = 0) forsinkelse ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Sender nedre nibble IO0SET = 0x00000050; // RS & EN HØJ IO0CLR = 0x00000020; forsinkelse ms (2); IO0CLR = 0x00000040; forsinkelse ms (5); i ++; }
Komplet kodnings- og demonstrationsvideo er angivet nedenfor.