Display er den nødvendige delen av enhver maskin, enten det er husholdningsapparater eller industrielle maskiner. Displayet viser ikke bare kontrollalternativene for å betjene maskinen, men viser også status og utgang for oppgaven som maskinen utfører. Det er mange typer skjermer som brukes i elektronikk som 7-segment display, 16x2 LCD display, TFT berøringsskjerm, OLED display etc.
16x2 LCD-skjerm er den mest grunnleggende skjermmodulen og brukes også i litt lite elektronikkutstyr som kalkulator, digital måler osv. Vi har gjort mange prosjekter ved bruk av 16x2 LCD inkludert grunnleggende grensesnitt med andre mikrokontrollere:
- LCD-grensesnitt med 8051 mikrokontroller
- Grensesnitt LCD med ATmega32 Microcontroller
- LCD-grensesnitt med PIC-mikrokontroller
- Grensesnitt 16x2 LCD med Arduino
- 16x2 LCD-grensesnitt med Raspberry Pi ved hjelp av Python
I denne opplæringen vil vi se hvordan du kan grensesnitt en 16x2 LCD med Atmega16 AVR mikrokontroller og vise en enkel velkomstmelding.
Komponenter kreves
- Atmega16
- 16x2 LCD-modul
- Gensere
- Brettbrett
Kretsdiagram
Programmering Atmega16 for 16x2 LCD-skjerm
Programmering krever ingen eksterne biblioteker. Her er Atmega16 programmert ved hjelp av USBASP og Atmel Studio7.0. Komplett program og arbeidsvideo er gitt på slutten av prosjektet, bare last opp programmet i Atmega16 og roter 10k POT for å justere lysstyrken på LCD-skjermen.Definere innledningsvis CPU-frekvensen og inkludere de nødvendige bibliotekene som følger med Atmel Studio Package, for eksempel for tilgang til IO-pinner og
Definer RS og EN pin på LCD i programmet. RS Pins brukes til å velge data- og kommandoregister. Aktiveringspinnen låser dataene.
#define en PA3 #define rs PA2
Definer også hvilken PORT av Atmega16 som skal brukes til å grensesnitt LCD. Her brukes PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Neste trinn er å konstruere en funksjon som aksepterer en kommando ved å sende en parameter. Det er mange LCD HEX-kommandoer. Hex-kommandoene brukes til å definere funksjonen til LCD. Siden vi bruker 4-biters modus på LCD, vil byte (8-bit) sendes i to pakker. De ene pakkene vil være Upper Nibble (4-bit), og den andre pakken vil være Lower Nibble (4-bit).
ugyldig lcdCommand (usignerte char-kommandoer) { lcdPort = (lcdPort & 0x0F) - (kommandoer & 0xF0); lcdPort & = ~ (1 <
Det neste trinnet ville være å godta karakterene og låse den til LCD-porten. Karakterene som mottas sendes deretter til LCD-knabben med knabb. Funksjonen tar tegnet ved å bruke pass by parameter og tar deretter den øvre og nedre knabben. Rs-pinnen er satt til høy for dataregisteret, og deretter sendes en stigende puls for å låse dataene. Tilsvarende sendes den nedre nippelen ved å endre verdien for aktivering og sende den stigende pulsen for aktivering.
ugyldig lcdChar (usignert char-streng) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); lcdPort - = (1 <
Denne funksjonen konverterer bare tegnet til streng og kan brukes i programmet senere der det er behov for skrivestreng.
ugyldig lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Nå er det skrevet en funksjon bare for å rydde skjermen. Du trenger bare å sende kommandoen 01 i HEX og deretter bare sette markøren til startposisjon.
ugyldig lcdClear () { lcdCommand (0x01); _forsink_ms (2); lcdCommand (0x80); }
Nå i hovedfunksjonen er LCD-skjermen initialisert. Sett inn PORT-retningen for LCD til grensesnittet. Her er PORT satt som OUTPUT så sett FF.
lcdDirection = 0xFF; _forsink_ms (20)
Deretter setter LCD i 4-bits modus ved å sende 02 i hex. Send også 28 i hex for å sette den i 2-linjers, 15x7 matrise-piksler i 4-bits modus.
lcdCommand (0x02); lcdCommand (0x28);
Den kommando 0 ° C og 06 brukes til å kontrollere markørens posisjon. Og til slutt er det bare å rense skjermen ved å sende 01 i hex. Dette vil fullføre initialiseringen av LCD-skjermen.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Etter at initialiseringen er fullført, er det bare å teste LCD-skjermen ved å sende en streng. Her sender vi en streng " Grensesnitt LCD " i en st rad.
lcdString ("Grensesnitt LCD");
Deretter flytter du markøren til neste rad ved å sende kommandoen c0 i hex. Og til slutt på denne posisjonen, skriv strengen "With Atmega1 6".
lcdCommand (0xC0); lcdString ("With Atmega16");
Dette avslutter den komplette opplæringen om Grensesnitt en 16x2 LCD med Atmega16. Merk at hvis du ikke får noe bilde eller piksler, må du enten kontrollere ledningene dine i henhold til kode og kretsskjema eller endre verdien på POTTEN festet til V0-stift på LCD-skjermen. Hvis du er i tvil eller forslag, kan du kontakte oss enten ved å skrive til forumet vårt eller kommentere nedenfor.