Das Display ist der notwendige Bestandteil jeder Maschine, egal ob es sich um ein Haushaltsgerät oder eine Industriemaschine handelt. Das Display zeigt nicht nur die Steuerungsoptionen für den Betrieb der Maschine an, sondern auch den Status und die Ausgabe der von dieser Maschine ausgeführten Aufgabe. In der Elektronik werden viele Arten von Displays verwendet, z. B. 7-Segment-Displays, 16x2-LCD-Displays, TFT-Touchscreen-Displays, OLED-Displays usw.
Das 16x2-LCD-Display ist das grundlegendste Anzeigemodul und wird auch in einigen kleinen elektronischen Geräten wie Taschenrechner, digitalem Messgerät usw. verwendet. Wir haben viele Projekte mit 16x2-LCD durchgeführt, einschließlich der grundlegenden Schnittstelle zu anderen Mikrocontrollern:
- LCD-Schnittstelle mit 8051-Mikrocontroller
- Schnittstelle zwischen LCD und ATmega32-Mikrocontroller
- LCD-Schnittstelle mit PIC-Mikrocontroller
- 16x2 LCD mit Arduino verbinden
- 16x2 LCD-Schnittstelle mit Raspberry Pi mit Python
In diesem Tutorial erfahren Sie, wie Sie ein 16x2-LCD mit dem Atmega16 AVR-Mikrocontroller verbinden und eine einfache Begrüßungsnachricht anzeigen.
Erforderliche Komponenten
- Atmega16
- 16x2 LCD-Modul
- Jumper
- Steckbrett
Schaltplan
Programmierung von Atmega16 für 16x2 LCD-Display
Für die Programmierung sind keine externen Bibliotheken erforderlich. Hier wird der Atmega16 mit USBASP und Atmel Studio7.0 programmiert. Das vollständige Programm und das Arbeitsvideo finden Sie am Ende des Projekts. Laden Sie einfach das Programm in Atmega16 hoch und drehen Sie 10k POT, um die Helligkeit des LCD anzupassen.Definieren Sie zunächst die CPU-Frequenz und geben Sie die erforderlichen Bibliotheken an, die im Lieferumfang des Atmel Studio-Pakets enthalten sind, z. B. für den Zugriff auf E / A-Pins und
Definieren Sie den RS- und EN-Pin des LCD im Programm. Die RS-Pins werden zur Auswahl des Daten- und Befehlsregisters verwendet. Der Aktivierungsstift speichert die Daten.
#define en PA3 #define rs PA2
Definieren Sie auch, welcher PORT von Atmega16 für die LCD-Schnittstelle verwendet wird. Hier wird die PORTA verwendet.
#define lcdDirection DDRA #define lcdPort PORTA
Der nächste Schritt besteht darin, eine Funktion zu erstellen, die einen Befehl durch Übergabe eines Parameters akzeptiert. Es gibt viele LCD HEX-Befehle. Die Hex-Befehle werden verwendet, um die Funktion des LCD zu definieren. Da wir den 4-Bit-Modus des LCD verwenden, wird das Byte (8-Bit) in zwei Paketen gesendet. Das eine Paket ist Upper Nibble (4-Bit) und das andere Paket ist Lower Nibble (4-Bit).
void lcdCommand (vorzeichenlose Zeichenbefehle) { lcdPort = (lcdPort & 0x0F) - (Befehle & 0xF0); lcdPort & = ~ (1 <
Der nächste Schritt wäre , die Zeichen zu akzeptieren und sie an den Anschluss des LCD anzuschließen. Die empfangenen Zeichen werden dann durch Knabbern an das LCD-Halbbyte gesendet. Die Funktion nimmt das Zeichen mit dem Parameter pass by und nimmt dann das obere und untere Halbbyte. Der 'rs'-Pin wird für das Datenregister auf hoch gesetzt, und dann wird ein ansteigender Impuls gesendet, um die Daten zu speichern. In ähnlicher Weise wird das untere Halbbyte gesendet, indem der Wert der Freigabe geändert und der ansteigende Impuls zur Freigabe gesendet wird.
void lcdChar (vorzeichenlose Zeichenfolge) { lcdPort = (lcdPort & 0x0F) - (Zeichenfolge & 0xF0); lcdPort - = (1 <
Diese Funktion konvertiert das Zeichen nur in eine Zeichenfolge und kann später im Programm verwendet werden, wenn eine Zeichenfolge geschrieben werden muss.
void lcdString (char * str) { int j; für (j = 0; str! = 0; j ++) { lcdChar (str); } }
Jetzt wird eine Funktion geschrieben, um den Bildschirm zu löschen. Sie müssen nur den Befehl 01 in HEX senden und dann den Cursor auf die Ausgangsposition setzen.
void lcdClear () { lcdCommand (0x01); Verzögerung (2); lcdCommand (0x80); }}
In der Hauptfunktion wird nun das LCD initialisiert. Stellen Sie zunächst die PORT-Richtung für die Schnittstelle des LCD ein. Hier wird der PORT als OUTPUT eingestellt, also FF einstellen.
lcdDirection = 0xFF; Verzögerung (20)
Stellen Sie dann das LCD in den 4-Bit-Modus, indem Sie 02 in hex senden. Senden Sie auch 28 in hex, um es in den 2-zeiligen 15x7-Matrixpixeln im 4-Bit-Modus einzustellen.
lcdCommand (0x02); lcdCommand (0x28);
Mit den Befehlen 0c und 06 wird die Cursorposition gesteuert. Und zum Schluss löschen Sie einfach den Bildschirm, indem Sie 01 in hex senden. Damit ist die Initialisierung des LCD abgeschlossen.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Nachdem die Initialisierung abgeschlossen ist, testen Sie einfach das LCD, indem Sie eine Zeichenfolge senden. Hier setzen wir ein String „ Interfacing LCD “ in der 1 st Reihe.
lcdString ("Interfacing LCD");
Dann wird der Cursor auf der nächsten Zeile mit dem Befehl c0 in hex sendet. Und schließlich schreiben Sie an dieser Stelle die Zeichenfolge "With Atmega1 6".
lcdCommand (0xC0); lcdString ("With Atmega16");
Damit ist das vollständige Tutorial zur Schnittstelle eines 16x2-LCD mit Atmega16 abgeschlossen. Beachten Sie, dass Sie, wenn Sie kein Bild oder keine Pixel erhalten, entweder Ihre Verkabelung gemäß Code und Schaltplan überprüfen oder den Wert des POT ändern müssen, der an den V0-Pin des LCD angeschlossen ist. Wenn Sie Zweifel oder Vorschläge haben, können Sie uns erreichen, indem Sie entweder in unser Forum schreiben oder unten einen Kommentar abgeben.