Display er den nødvendige del af enhver 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, 16x2 LCD display, TFT touch screen display, OLED display osv.
16x2 LCD-skærm er det mest basale displaymodul og bruges også i noget lille elektronikudstyr som lommeregner, digital måler osv. Vi har lavet mange projekter ved hjælp af 16x2 LCD inklusive 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 Atmega16 AVR-mikrocontroller og viser en simpel velkomstbesked.
Komponenter, der kræves
- Atmega16
- 16x2 LCD-modul
- Jumpere
- Brødbræt
Kredsløbsdiagram
Programmering Atmega16 til 16x2 LCD-skærm
Programmering kræver ingen eksterne biblioteker. Her er Atmega16 programmeret ved hjælp af USBASP og Atmel Studio7.0. Komplet program og arbejdsvideo gives i slutningen af projektet, bare upload programmet i Atmega16 og drej 10k POT for at justere LCD-lysstyrken.Oprindeligt definerer CPU-frekvensen og inkluderer de nødvendige biblioteker, der følger med Atmel Studio-pakke, f.eks. For at få adgang til IO-ben og
Definer RS- og EN-stift på LCD i programmet. RS Pins bruges til at vælge data- og kommandoregistret. Aktiveringstappen låser dataene.
#define en PA3 #define rs PA2
Definer også, hvilken PORT af Atmega16 der skal bruges til at interface LCD. Her bruges PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Næste trin er at konstruere en funktion, der accepterer en kommando ved at sende en parameter. Der er mange LCD HEX-kommandoer. Hex-kommandoer bruges til at definere LCD-funktionen. Da vi bruger 4-bit LCD-tilstand, sendes byten (8-bit) i to pakker. De ene pakker vil være Upper Nibble (4-bit), og den anden pakke vil være Lower Nibble (4-bit).
ugyldigt lcdCommand (usignerede char-kommandoer) { lcdPort = (lcdPort & 0x0F) - (kommandoer & 0xF0); lcdPort & = ~ (1 <
Det næste trin ville være at acceptere tegnene og låse det til LCD-porten. De modtagne tegn sendes derefter til LCD nibble med nibble. Funktionen tager tegnet ved hjælp af parameteren forbipasserende og tager derefter den øvre og nedre nippel. 'Rs'-stiften er indstillet til høj for dataregistrering, og derefter sendes en stigende puls for at låse dataene. På samme måde sendes den nedre nippel ved at ændre aktiveringsværdien og sende den stigende puls for aktivering.
ugyldigt lcdChar (usigneret char-streng) { lcdPort = (lcdPort & 0x0F) - (streng & 0xF0); lcdPort - = (1 <
Denne funktion konverterer bare tegnet til streng og kan bruges i programmet senere, hvor skrivestreng er nødvendig.
ugyldigt lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Nu skrives en funktion bare for at rydde skærmen. Du skal bare sende kommandoen 01 i HEX og derefter bare sætte markøren til startposition.
ugyldigt lcdClear () { lcdCommand (0x01); _forsink_ms (2); lcdCommand (0x80); }
Nu i hovedfunktionen initialiseres LCD'et. Indstil oprindeligt PORT-retningen for LCD til interface. Her er PORT indstillet som OUTPUT, så indstil FF.
lcdDirection = 0xFF; _forsink_ms (20)
Så indstille LCD i 4-bit tilstand ved at sende 02 i hex. Send også 28 i hex for at indstille den i 2-linjers, 15x7 matrix-pixels i 4-bit-tilstand.
lcdCommand (0x02); lcdCommand (0x28);
Den kommando 0C og 06 bruges til at styre cursor position. Og til sidst skal du bare rydde skærmen ved at sende 01 i hex. Dette afslutter initialiseringen af LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Når initialiseringen er afsluttet, skal du bare teste LCD'et ved at sende en streng. Her sender vi en String " Interfacing LCD " i 1 m række.
lcdString ("Interfacing LCD");
Så flytte markøren til den næste række ved at sende kommandoen c0 i hex. Og til sidst på denne position, skriv strengen "With Atmega1 6".
lcdCommand (0xC0); lcdString ("Med Atmega16");
Dette afslutter den komplette tutorial om grænseflade mellem en 16x2 LCD og Atmega16. Bemærk, at hvis du ikke får noget billede eller pixels, skal du enten kontrollere din ledning i henhold til kode og kredsløbsdiagram eller ændre værdien af POT'en, der er fastgjort til V0-stift på LCD. Hvis du er i tvivl eller forslag, kan du kontakte os ved enten at skrive til vores forum eller kommentere nedenfor.