- Funktionieren des 16x2 LCD-Displays
- Schaltplan zur Schnittstelle LCD mit STM8 Mikrocontroller
- STM8 LCD Library - Header-Datei für STM8S103F3P6
- LCD-Programm für STM8S-Mikrocontroller
- STM8 mit LCD - funktioniert
Das 16x2 alphanumerische LCD-Display ist das am häufigsten verwendete Display unter Hobbyisten und Enthusiasten. Die Anzeige ist sehr nützlich, wenn Sie dem Benutzer grundlegende Informationen anzeigen möchten, und kann auch beim Testen oder Debuggen unseres Codes helfen. Dieses spezielle 16x2 LCD-Modul ist leicht verfügbar und seit langem beliebt. Weitere Informationen zu den Grundlagen des 16x2-LCD-Moduls finden Sie im verlinkten Artikel.
Um mit unserer Reihe von STM8-Mikrocontroller-Tutorials fortzufahren, lernen wir in diesem Tutorial, wie Sie ein LCD mit dem STM8-Mikrocontroller verbinden. Wir haben zuvor auch 16x2-LCD mit vielen anderen Mikrocontrollern verbunden. Die Tutorials sind unten aufgeführt und können bei Interesse überprüft werden.
Wenn Sie mit STM8 noch nicht vertraut sind, lesen Sie die ersten Schritte mit dem STM8-Mikrocontroller-Artikel, um die Grundlagen der Controller-Karte und der Programmierumgebung zu verstehen. Wir werden die Grundlagen in diesem Tutorial nicht behandeln.
Funktionieren des 16x2 LCD-Displays
Wie der Name schon sagt, hat ein 16x2-LCD 16 Spalten und 2 Zeilen. Insgesamt können wir also 32 Zeichen auf dieser Anzeige anzeigen, und diese Zeichen können Alphabete oder Zahlen oder sogar Symbole sein. Eine einfache 16x2 LCD-Pinbelegung, die wir in diesem Tutorial verwenden, ist unten dargestellt.
Wie Sie sehen können, verfügt das Display über 16 Pins und kann in fünf Kategorien unterteilt werden: Power Pins, Kontraststifte, Steuerstifte, Datenstifte und Hintergrundbeleuchtungsstifte, wie in der folgenden Tabelle gezeigt. Wir werden auf die Details der einzelnen Pins eingehen, wenn wir den Schaltplan dieses Tutorials besprechen.
Kategorie | Pin NO. | Pin Name | Funktion |
Power Pins | 1 | VSS | Erdungsstift, mit Masse verbunden |
2 | VDD oder Vcc | Spannungsstift + 5V | |
Kontraststift | 3 | V0 oder VEE | Kontrasteinstellung, über einen variablen Widerstand mit Vcc verbunden. |
Steuerstifte | 4 | RS | Register Select Pin, RS = 0 Befehlsmodus, RS = 1 Datenmodus |
5 | RW | Lese- / Schreibstift, RW = 0 Schreibmodus, RW = 1 Lesemodus | |
6 | E. | Aktivieren, ein hoher bis niedriger Impuls muss das LCD aktivieren | |
Datenstifte | 7-14 | D0-D7 | Datenstifte, Speichert die Daten, die auf dem LCD angezeigt werden sollen, oder die Befehlsanweisungen |
Stifte für die Hintergrundbeleuchtung | 15 | LED + oder A. | Zum Einschalten der Hintergrundbeleuchtung + 5V |
16 | LED- oder K. | Hintergrundbeleuchtung Boden |
Auf der Rückseite des LCD befinden sich, wie in der Abbildung unten gezeigt, zwei schwarze Punkte, in denen sich der HD44780 LCD-Treiber-IC befindet (rot eingekreist). Unser Mikrocontroller sollte mit diesem IC kommunizieren, der wiederum steuert, was auf dem LCD angezeigt wird. Wenn Sie neugierig sind, wie genau dies alles funktioniert, sollten Sie sich die Funktionsweise des 16x2-LCD-Displays ansehen, auf dem wir bereits ausführlich über die Funktionsweise des LCD gesprochen haben.
In diesem Tutorial werden der Schaltplan und der Code zum Anzeigen von Buchstaben (Alphabete und Zahlen) auf einem 16x2-LCD-Display mit einfachen Befehlen LCD_print _char und LCD_print_string erläutert . Diese Befehle können direkt im Programm verwendet werden, nachdem unsere Header-Datei eingefügt wurde. Die Header-Datei behandelt die meisten Dinge für Sie, sodass Sie nicht unbedingt wissen müssen, wie das Display oder der HD44780-Treiber-IC funktionieren.
Schaltplan zur Schnittstelle LCD mit STM8 Mikrocontroller
Die vollständige STM8-LCD-Schaltung finden Sie im folgenden Bild. Wie Sie sehen können, ist die Verbindung für den STM8S103F3P6-Controller mit LCD sehr einfach. Wir haben das LCD-Display direkt an unsere Karte angeschlossen und die ST-Verbindung ist auch angeschlossen, um die Karte zu programmieren.
Die Stromanschlüsse Vss und Vcc sind mit dem 5-V-Pin auf der STM8S-Platine verbunden. Beachten Sie, dass die Betriebsspannung des LCD 5 V beträgt und für den Betrieb mit 3,3 V angeschlossen ist. Obwohl der STM8S103F3P6-Mikrocontroller mit 3,3 V betrieben werden muss, um eine 5-V-Versorgung für das LCD zu erhalten, können Sie dies vermeiden, indem Sie einen Laderegler-IC verwenden. Dies wird in diesem Lernprogramm jedoch nicht behandelt.
Als nächstes haben wir den Kontraststift, mit dem der Kontrast des LCD eingestellt wird. Wir haben ihn an das Potentiometer angeschlossen, damit wir den Kontrast steuern können. Wir haben einen 10k-Poti verwendet, aber Sie können auch andere Werte in der Nähe verwenden. Der Poti fungiert als potenzieller Teiler, um den Kontraststift mit 0-5 V zu versorgen. In der Regel können Sie auch einen Widerstand direkt verwenden, um etwa 2,2 V für einen angemessenen Kontrast bereitzustellen Wert. Dann haben wir die Pins Reset (RS), Read / Write (RW) und Enable (E). Der Lese- / Schreibstift ist geerdet, da wir nichts vom LCD lesen, sondern nur Schreibvorgänge ausführen. Die anderen beiden Steuerstifte Rs und E sind mit den Stiften PA1 bzw. PA2 verbunden.
Dann haben wir die Datenpins DB0 bis DB7. Das 16x2-LCD kann in zwei Modi betrieben werden. Einer ist ein 8-Bit-Betriebsmodus, in dem alle 8 Datenpins (DB0-DB7) auf dem LCD verwendet werden müssen, und der andere ist der 4-Bit-Betriebsmodus, in dem nur 4 benötigt werden Datenpins (DB4-DB7). Der 4-Bit-Modus wird häufig verwendet, da weniger GPIO-Pins vom Controller benötigt werden. Daher haben wir in diesem Lernprogramm auch den 4-Bit-Modus verwendet und nur die Pins DB4, DB5, DB6 und DB7 mit den Pins PD1, PD2, PD3 verbunden bzw. PD4.
Die letzten beiden Pins BLA und BLK werden zur Stromversorgung der internen Hintergrundbeleuchtung verwendet. Wir haben einen 560-Ohm-Widerstand als Strombegrenzungswiderstand verwendet. Der ST-Link-Programmierer ist wie immer wie in unserem vorherigen Tutorial verbunden. Ich habe die vollständige Verbindung auf dem Steckbrett hergestellt und mein Setup sieht wie folgt aus (siehe Abbildung unten).
STM8 LCD Library - Header-Datei für STM8S103F3P6
Bevor wir mit dem Schaltplan fortfahren, holen wir uns die STM8 LCD-Header-Datei von GitHub über den folgenden Link:
STM8S 16x2 LCD-Header-Datei
Sie können entweder das komplette Repo herunterladen und die Datei stm8s103_LCD_16x2.h herunterladen oder einfach den Code über den obigen Link. Stellen Sie beim Festlegen des Projekts sicher, dass Sie alle erforderlichen Header-Dateien zusammen mit dieser Header-Datei in das inc-Verzeichnis aufnehmen.
Wenn Sie nicht sicher sind, wie Sie die Header-Dateien hinzufügen und das Programm kompilieren sollen, folgen Sie dem Video unten auf dieser Seite. Und wenn Sie neugierig sind, wie der Code in der Header-Datei funktioniert, können Sie den PIC mit einem LCD-Tutorial überprüfen. Die in diesem Projekt verwendete Header-Datei ist der dort erläuterten sehr ähnlich, daher werden wir nicht näher darauf eingehen.
LCD-Programm für STM8S-Mikrocontroller
Zur Demonstration programmieren wir unseren STM8S-Controller so, dass eine einfache Zeichenfolge wie „Circuit Digest“ angezeigt wird, und erhöhen dann in der zweiten Zeile für jede Sekunde einen „Test“ -Wert. Das vollständige Programm finden Sie unten auf dieser Seite. Die Erklärung lautet wie folgt.
Wir starten unser Programm, indem wir die Pins definieren und wie immer die erforderlichen Header-Dateien hinzufügen. In unserem oben diskutierten Schaltplan haben wir LCD_RS mit PA1 verbunden, also haben wir es als LCD_RS GPIOA, GPIO_PIN_1 definiert. In ähnlicher Weise haben wir dasselbe auch für andere Pins getan. Wenn sie einem anderen Stromkreis folgen, stellen Sie sicher, dass Sie diese Werte entsprechend ändern.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3 #4 "
Als nächstes haben wir in unserem Hauptprogramm die für diesen Beispielcode erforderlichen Variablen deklariert. Wir haben eine Testvariable namens test_var, die auf Null initialisiert ist. Wir erhöhen die Variable und zeigen sie auf dem LCD an. Die Zeichen d1 bis d4 stellen die 4 Ziffern der Testvariablen dar, da unser LCD den int-Wert nicht direkt anzeigen kann. Wir müssen sie in Zeichen konvertieren.
// Variablendeklarationen int test_var = 0; Zeichen d4, d3, d2, d1;
Mit der Funktion LCD_Begin () wird das LCD initialisiert. Diese Funktion initialisiert alle erforderlichen GPIO-Pins und versetzt das LCD in den 16x2-LCD-Modus. Dann haben wir die Funktion LCD_Clear () , mit der alle Werte auf dem LCD gelöscht werden. Dadurch wird alles auf dem LCD gelöscht, sodass das Schreiben neuer Werte sauber ist. Dann haben wir die Funktion LCD_Set_Cursor (x, y) , wobei x und y die Positionen sind, an denen wir unser neues Zeichen schreiben müssen. Zum Beispiel bedeutet (1,1) die erste Zeile und die erste Spalte, ähnlich bedeutet (2,12) ebenfalls die zweite Zeile 12 Spalte. Beachten Sie, dass wir hier 2 Zeilen und 16 Spalten haben, wie wir zuvor besprochen haben.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Jetzt wird das LCD eingestellt, gelöscht und der Cursor befindet sich an der Stelle. Als nächstes drucken Sie etwas auf dem Bildschirm. Wir können den LCD_Print_String („Sample String“) verwenden , um einen String auf das LCD zu drucken, und LCD_Print_Char (a) , um einen Zeichenwert auf das LCD zu drucken. In unserem Programm hier haben wir „STM8S103F3P3 LCD“ gedruckt und mit dem folgenden Code eine Verzögerung von 5 Sekunden erstellt.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Nach der Verzögerung von 5 Sekunden löschen wir das LCD erneut und zeigen in der ersten Zeile „Circuit Digest“ und in der zweiten Zeile „Test:“ an.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
Innerhalb der while- Schleife teilen wir den Wert der Ganzzahlvariablen test_var in einzelne Zeichen auf, damit er mit einfachen Divisions- und Moduloperatoren auf dem LCD angezeigt werden kann. Wir haben auch '0' hinzugefügt, um den ASCII-Wert in das Zeichen zu konvertieren.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Dann haben wir den Cursor auf (2,6) gesetzt, weil wir bereits "Test:" in die zweite Zeile geschrieben haben, die aus 6 Zeichen besteht. Wenn wir überschreiben, wird das vorhandene Zeichen durch ein neues Zeichen auf dem LCD ersetzt. Wir haben auch eine Verzögerung von 1 Sekunde hinzugefügt und die Variable erhöht.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 mit LCD - funktioniert
Um unser Programm zu testen, laden Sie einfach den Code auf unseren Controller hoch und schalten Sie ihn über den Micro-USB-Anschluss ein. Beachten Sie, dass das LCD 5 V benötigt, um zu funktionieren. Daher muss die Karte unbedingt über den USB-Anschluss mit Strom versorgt werden. Wir haben es zuvor direkt über ST-Link mit Strom versorgt, da wir die 5-V-Versorgung nicht benötigten.
Wie Sie sehen können, funktioniert das LCD wie erwartet, wobei der Wert der Testvariablen ungefähr jede Sekunde erhöht wird. Beachten Sie außerdem, dass wir keine Timer verwendet haben und nur die Verzögerungsfunktion verwendet haben, um diese Verzögerung zu erstellen. Erwarten Sie daher nicht, dass die Verzögerungsdauer genau ist. Wir werden Timer später in einem anderen Lernprogramm für diesen Zweck verwenden.
Die vollständige Arbeitsweise des Projekts finden Sie im unten verlinkten Video. Ich hoffe, Ihnen hat das Tutorial gefallen und Sie haben etwas Nützliches gelernt. Wenn Sie Fragen haben, lassen Sie diese im Kommentarbereich oder nutzen Sie unsere Foren für andere technische Fragen.