Display is het noodzakelijke onderdeel van elke machine, of het nu een huishoudelijk apparaat of industriële machines is. Het display toont niet alleen de besturingsopties om de machine te bedienen, maar toont ook de status en uitvoer van de taak die door die machine wordt uitgevoerd. Er zijn veel soorten displays die in de elektronica worden gebruikt, zoals een 7-segment display, 16x2 LCD-display, TFT-touchscreen, OLED-display enz.
16x2 LCD-scherm is de meest elementaire displaymodule en wordt ook gebruikt in sommige kleine elektronische apparatuur zoals rekenmachines, digitale meters enz. We hebben veel projecten gedaan met 16x2 LCD-schermen, inclusief de basisinterface voor andere microcontrollers:
- LCD-interface met 8051 Microcontroller
- Interfacing LCD met ATmega32 Microcontroller
- LCD-interface met PIC-microcontroller
- 16x2 LCD-interface met Arduino
- 16x2 LCD-interface met Raspberry Pi met Python
In deze tutorial zullen we zien hoe je een 16x2 LCD-scherm verbindt met de Atmega16 AVR-microcontroller en een eenvoudig welkomstbericht weergeeft.
Componenten vereist
- Atmega16
- 16x2 LCD-module
- Truien
- Breadboard
Schakelschema
Atmega16 programmeren voor 16x2 LCD-scherm
Voor programmeren zijn geen externe bibliotheken nodig. Hier wordt de Atmega16 geprogrammeerd met behulp van USBASP en Atmel Studio7.0. Volledig programma en werkvideo wordt aan het einde van het project gegeven, upload het programma in Atmega16 en draai 10k POT om de helderheid van het LCD-scherm aan te passen.Definieer in eerste instantie de CPU-frequentie en neem de nodige bibliotheken op die bij het Atmel Studio-pakket worden geleverd, zoals voor toegang tot IO-pinnen en
Definieer RS en EN pin van LCD in het programma. De RS-pinnen worden gebruikt om het gegevens- en commandoregister te selecteren. De activeringspin vergrendelt de gegevens.
#define en PA3 #define rs PA2
Bepaal ook welke POORT van Atmega16 zal worden gebruikt om LCD te koppelen. Hier wordt de PORTA gebruikt.
#define lcdDirection DDRA #define lcdPort PORTA
De volgende stap is het construeren van een functie die een commando accepteert door een parameter door te geven. Er zijn veel LCD HEX-opdrachten. De Hex-opdrachten worden gebruikt om de functie van LCD te definiëren. Omdat we de 4-bits modus van LCD gebruiken, wordt de byte (8-bits) in twee pakketten verzonden. Het ene pakket is Upper Nibble (4-bit) en het andere pakket is Lower Nibble (4-bit).
void lcdCommand (niet-ondertekende tekenopdrachten) { lcdPort = (lcdPort & 0x0F) - (opdrachten & 0xF0); lcdPort & = ~ (1 <
De volgende stap zou zijn om de karakters te accepteren en deze aan de LCD-poort te koppelen. De ontvangen karakters worden vervolgens naar de LCD-nibble door nibble gestuurd. De functie neemt het karakter met de parameter pass by en neemt vervolgens de bovenste en onderste nibble. De 'rs'-pin wordt te hoog ingesteld voor gegevensregistratie en vervolgens wordt een stijgende puls verzonden om de gegevens te vergrendelen. Evenzo wordt het lagere knabbelen verzonden door de waarde van inschakelen te veranderen en de stijgende puls te verzenden voor inschakelen.
void lcdChar (tekenreeks zonder teken) { lcdPort = (lcdPort & 0x0F) - (tekenreeks & 0xF0); lcdPort - = (1 <
Deze functie converteert het karakter gewoon naar een string en kan later in het programma worden gebruikt waar het schrijven van string nodig is.
void lcdString (char * str) { int j; voor (j = 0; str! = 0; j ++) { lcdChar (str); } }
Nu wordt er een functie geschreven om het scherm leeg te maken. U hoeft alleen het commando 01 in HEX te verzenden en vervolgens de cursor op de beginpositie te zetten.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Nu in de hoofdfunctie wordt het LCD-scherm geïnitialiseerd. Stel in eerste instantie de PORT-richting in voor LCD naar interface. Hier wordt de POORT ingesteld als UITGANG, dus stel FF in.
lcdDirection = 0xFF; _vertraging_ms (20)
Dan zet de LCD in de 4-bits modus door het sturen van 02 in hex. Stuur ook 28 in hexadecimaal om het in de 2-lijns, 15x7 matrixpixels in 4-bits modus in te stellen.
lcdCommand (0x02); lcdCommand (0x28);
Het commando 0c en 06 wordt gebruikt om de cursorpositie te besturen. En maak tenslotte gewoon het scherm leeg door 01 in hexadecimaal te verzenden. Hiermee wordt de initialisatie van het LCD-scherm voltooid.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Nadat de initialisatie is voltooid, test u het LCD-scherm door een string te verzenden. Hier zijn we het verzenden van een String " Interfacing LCD " in de 1 ste rij.
lcdString ("Interfacing LCD");
Dan verplaatst de cursor naar de volgende rij door het sturen van het commando c0 in hex. En tenslotte op deze positie, schrijf de string "Met Atmega1 6".
lcdCommand (0xC0); lcdString ("Met Atmega16");
Hiermee is de volledige tutorial over de interface van een 16x2 LCD-scherm met Atmega16 voltooid. Merk op dat als u geen afbeelding of pixels krijgt, ofwel uw bedrading controleert volgens de code en het schakelschema, ofwel de waarde van de POT die is aangesloten op de V0-pin van het LCD-scherm verandert. Als u enige twijfel of suggestie heeft, kunt u ons bereiken door te schrijven naar ons forum of door hieronder te reageren.