Display är den nödvändiga delen av varje maskin, oavsett om det är hushållsapparater eller industrimaskiner. Displayen visar inte bara kontrollalternativen för att manövrera maskinen utan visar också status och output för den uppgift som utförs av den maskinen. Det finns många typer av skärmar som används i elektronik som 7-segmentsdisplay, 16x2 LCD-display, TFT-pekskärmsdisplay, OLED-skärm etc.
16x2 LCD-skärm är den mest grundläggande displaymodulen och används även i en del små elektronikutrustning som miniräknare, digital mätare etc. Vi har gjort många projekt med 16x2 LCD inklusive grundläggande gränssnitt med andra mikrokontroller:
- LCD-gränssnitt med 8051 mikrokontroller
- Gränssnitts LCD med ATmega32 Microcontroller
- LCD-gränssnitt med PIC Microcontroller
- Gränssnitt 16x2 LCD med Arduino
- 16x2 LCD-gränssnitt med Raspberry Pi med Python
I denna handledning kommer vi att se hur man gränssnitt en 16x2 LCD med Atmega16 AVR mikrokontroller och visar ett enkelt välkomstmeddelande.
Komponenter krävs
- Atmega16
- 16x2 LCD-modul
- Tröjor
- Bakbord
Kretsschema
Programmering Atmega16 för 16x2 LCD-skärm
Programmering kräver inga externa bibliotek. Här programmeras Atmega16 med USBASP och Atmel Studio7.0. Komplett program och arbetsvideo ges i slutet av projektet, ladda bara upp programmet i Atmega16 och rotera 10k POT för att justera LCD-skärmens ljusstyrka.Definiera inledningsvis CPU-frekvensen och inkludera de nödvändiga biblioteken som medföljer Atmel Studio Package, t.ex. för åtkomst till IO-stift och
Definiera RS- och EN-stift på LCD i programmet. RS Pins används för att välja data- och kommandoregister. Aktiveringsstiftet spärrar data.
#define en PA3 #define rs PA2
Definiera också vilken PORT av Atmega16 som ska användas för att gränssnitt LCD. Här används PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Nästa steg är att konstruera en funktion som accepterar ett kommando genom att skicka en parameter. Det finns många LCD HEX-kommandon. Hex-kommandona används för att definiera LCD-funktionen. Eftersom vi använder 4-bitars LCD-läge skickas byten (8-bit) i två paket. De ena paketen kommer att vara Upper Nibble (4-bit) och andra paket kommer att vara Lower Nibble (4-bit).
ogiltig lcdCommand (osignerade char-kommandon) { lcdPort = (lcdPort & 0x0F) - (kommandon & 0xF0); lcdPort & = ~ (1 <
Nästa steg är att acceptera karaktärerna och låsa den till LCD-porten. De mottagna karaktärerna skickas sedan till LCD-knapret med knapra. Funktionen tar tecknet med parametern passera och tar sedan den övre och nedre knapret. 'Rs-stiftet är inställt på högt för dataregistret och sedan skickas en stigande puls för att låsa datan. På samma sätt skickas den nedre nippeln in genom att ändra aktiveringsvärdet och skicka den stigande pulsen för att aktivera.
ogiltig lcdChar (osignerad char-sträng) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); lcdPort - = (1 <
Denna funktion omvandlar bara tecknet till sträng och kan användas i programmet senare där det krävs skrivsträng.
ogiltig lcdString (char * str) { int j; för (j = 0; str! = 0; j ++) { lcdChar (str); } }
Nu skrivs en funktion bara för att rensa skärmen. Du behöver bara skicka kommandot 01 i HEX och sedan bara ställa markören till utgångsläget.
ogiltig lcdClear () { lcdCommand (0x01); _fördröja_ms (2); lcdCommand (0x80); }
Nu i huvudfunktionen initialiseras LCD-skärmen. Ställ in PORT-riktningen för LCD-gränssnittet. Här är PORT inställt som OUTPUT så ställ FF.
lcdDirection = 0xFF; _fördröja_ms (20)
Ställ sedan LCD-skärmen i 4-bitarsläge genom att skicka 02 i hex. Skicka också 28 i hex för att ställa in den i 2-rad, 15x7 matrispixlar i 4-bitars läge.
lcdCommand (0x02); lcdCommand (0x28);
Den kommando 0c och 06 används för att styra markören. Och slutligen bara rensa skärmen genom att skicka 01 i hex. Initieringen av LCD-skärmen avslutas.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
När initialiseringen är klar testar du bara LCD-skärmen genom att skicka en sträng. Här har vi skickar en sträng " Gränssnitt LCD " i en a rad.
lcdString ("Interfacing LCD");
Sedan flytta markören till nästa rad genom att skicka kommandot c0 i hex. Och slutligen på denna position, skriv strängen "With Atmega1 6".
lcdCommand (0xC0); lcdString ("With Atmega16");
Detta avslutar den fullständiga handledningen om gränssnitt mellan en 16x2 LCD-skärm och Atmega16. Observera att om du inte får någon bild eller pixlar, antingen kontrollera ledningarna enligt kod och kretsschema eller ändra värdet på POT som är ansluten till V0-stift på LCD. Om du har några tvivel eller förslag kan du nå oss antingen genom att skriva till vårt forum eller kommentera nedan.