- 16x2 Dot Matrix LCD Controller IC HD44780:
- Anzeigen eines benutzerdefinierten Zeichens auf einem 16x2-LCD:
- Programmieren und Arbeiten Erklärung:
- Schaltungsanschlüsse und Tests:
In unserem vorherigen Tutorial haben wir gelernt, wie ein 16 * 2-LCD mit einem PIC-Mikrocontroller verbunden wird. Wir empfehlen Ihnen, dies durchzugehen, bevor Sie fortfahren, wenn Sie Anfänger im PIC-Mikrocontroller sind. Zuvor haben wir auch die Grundlagen des PIC mithilfe des LED-Blinkprogramms und der Timer im PIC-Mikrocontroller gelernt. Hier finden Sie alle Tutorials zum Erlernen von PIC-Mikrocontrollern mit MPLABX- und XC8-Compiler.
In diesem Tutorial machen wir es interessanter, indem wir unsere eigenen benutzerdefinierten Zeichen erstellen und sie mit dem PIC16F877A PIC Microcontroller auf unserem LCD-Bildschirm anzeigen. Es gibt auch einige vordefinierte, meist verwendete benutzerdefinierte Zeichen, die vom HD44780A-IC selbst angegeben werden. Wir werden auch sehen, wie wir sie verwenden können. Wie in unserem vorherigen Tutorial erläutert, ist auf unserem LCD ein Hitachi HD44780-Controller eingebettet, mit dem wir Zeichen anzeigen können. Jedes Zeichen, das wir anzeigen, ist bereits im ROM des HD44780-IC vordefiniert. Wir werden etwas über den LCD-Controller IC HD44780 lernen, bevor wir Zeichen auf dem LCD anzeigen.
16x2 Dot Matrix LCD Controller IC HD44780:
Um ein benutzerdefiniertes Zeichen anzuzeigen, müssen wir dem IC irgendwie mitteilen, wie das benutzerdefinierte Zeichen aussehen wird. Zu diesem Zweck sollten wir die drei Arten von Speichern kennen, die im HD44780 LCD-Controller-IC vorhanden sind:
Zeichengenerator-ROM (CGROM): Dies ist der Nur-Lese-Speicher, der, wie bereits erwähnt, alle Muster der darin vordefinierten Zeichen enthält. Dieses ROM unterscheidet sich von jedem Typ von Schnittstellen-IC, und einige haben möglicherweise einen vordefinierten benutzerdefinierten Charakter.
Display Data RAM (DDRAM): Dies ist ein Direktzugriffsspeicher. Jedes Mal, wenn wir ein Zeichen anzeigen, wird sein Muster aus dem CGROM abgerufen und in das DDRAM übertragen und dann auf dem Bildschirm platziert. Vereinfacht ausgedrückt enthält DDRAM die Muster aller Zeichen, die derzeit auf dem LCD-Bildschirm angezeigt werden. Auf diese Weise muss der IC für jeden Zyklus keine Daten aus dem CGROM abrufen und hilft dabei, eine kurze Aktualisierungsfrequenz zu erhalten
Zeichengenerator-RAM (CGRAM): Dies ist auch ein Direktzugriffsspeicher, damit wir Daten daraus schreiben und lesen können. Wie der Name schon sagt, ist dieser Speicher derjenige, der zum Generieren des benutzerdefinierten Zeichens verwendet werden kann. Wir müssen ein Muster für das Zeichen bilden und es in das CGRAM schreiben. Dieses Muster kann bei Bedarf gelesen und auf dem Bildschirm angezeigt werden.
Jetzt haben wir ein grundlegendes Verständnis für die im HD44780-Schnittstellen-IC vorhandenen Speichertypen. Werfen wir einen Blick in das Datenblatt, um etwas mehr zu verstehen.
Wie aus dem Datenblatt hervorgeht, hat der HD44780 IC 8 Speicherorte zum Speichern unserer benutzerdefinierten Muster in CGRAM bereitgestellt. Rechts sehen wir, dass einige vordefinierte Zeichen auch auf unserem LCD-Bildschirm angezeigt werden können. Lassen Sie uns sehen, wie wir es schaffen können.
Anzeigen eines benutzerdefinierten Zeichens auf einem 16x2-LCD:
Um ein benutzerdefiniertes Zeichen anzuzeigen, müssen wir zuerst ein Muster dafür generieren und es dann im CGRAM speichern. Da wir die Bibliotheksfunktionen bereits bei uns haben, sollte es mit einigen einfachen Befehlen einfach sein, dies zu tun. Hier ist die Bibliothek für LCD-Funktionen, aber hier haben wir alle Bibliotheksfunktionen in das Programm selbst kopiert, sodass diese Header-Datei nicht in unser Programm aufgenommen werden muss. In diesem Artikel finden Sie auch Informationen zur grundlegenden LCD-Funktion und deren Pinbelegung.
Der erste Schritt besteht darin, ein Muster oder ein benutzerdefiniertes Zeichen zu generieren. Wie wir wissen, ist jedes Zeichen eine Kombination aus 5 * 8 Punkten. Wir müssen auswählen, welcher Punkt (Pixel) hoch und welcher niedrig bleiben soll. Zeichne einfach ein Kästchen wie unten und schattiere die Regionen basierend auf deinem Charakter. Mein Charakter hier ist ein Strichmännchen (ich hoffe, es sieht so aus). Nach dem Schattieren schreiben Sie einfach den äquivalenten Binärwert jedes Bytes wie unten gezeigt.
Setzen Sie einfach für jedes Byte eine '1' in den schattierten Bereich und eine '0' in den nicht schattierten Bereich, und das ist unser benutzerdefiniertes Muster. In ähnlicher Weise habe ich 8 benutzerdefinierte Mustercodes für unsere 8 Speicherplätze erstellt, die das CGROM darstellen. Sie sind in der folgenden Tabelle aufgeführt.
S.NO: |
Benutzerdefinierter Charakter |
Mustercode |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Hinweis: Es ist nicht zwingend erforderlich, alle 8 im CGRAM bereitgestellten Leerzeichen zu laden.
Programmieren und Arbeiten Erklärung:
Jetzt sind unsere Mustercodes fertig, wir müssen sie nur noch in das CGRAM des LCD laden und sie mit dem PIC-Mikrocontroller anzeigen. Um sie in das CGRAM zu laden, können wir ein 5 * 8-Array von Elementen bilden und jedes Byte mithilfe einer ' for-Schleife ' laden. Das Array des Mustercodes ist unten dargestellt:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Code für CGRAM-Speicherplatz 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110 CGRAM-Speicherplatz 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Code für CGRAM-Speicherplatz 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Code für CG Leerzeichen 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Code für CGRAM-Speicherplatz 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Code für CGRAM-Speicherplatz 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Code für CGRAM-Speicherplatz 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Code für CGRAM-Speicherplatz 8};
Jeder Speicherplatz wird mit seinem respektierten Zeichenmuster geladen. Um dieses Muster in den HD44780-IC zu laden, muss auf das Datenblatt von HD44780 verwiesen werden, aber es können nur Befehlszeilen verwendet werden, um die Adresse des CGRAM festzulegen
// *** Benutzerdefiniertes Zeichen in das CGROM laden *** ////// Lcd_Cmd (0x04); // CGRAM-Adresse setzen Lcd_Cmd (0x00); //.. CGRAM-Adresse setzen für (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Zurück nach Hause Lcd_Cmd (2); //.. zurück nach Hause // *** Laden des benutzerdefinierten Zeichens abgeschlossen *** //////
Hier wird innerhalb der ' for-Schleife' jeder Binärwert in das CGROM geladen. Sobald das Muster geladen ist, können die benutzerdefinierten Zeichen angezeigt werden, indem einfach die Position des Musters mit der Funktion void Lcd_Print_Char (char data) wie unten gezeigt aufgerufen wird.
Lcd_Print_Char (0); // Benutzerdefiniertes Zeichen anzeigen 0 Lcd_Print_Char (1); // Benutzerdefiniertes Zeichen anzeigen 1 Lcd_Print_Char (2); // Benutzerdefiniertes Zeichen anzeigen 2 Lcd_Print_Char (3); // Benutzerdefiniertes Zeichen anzeigen 3 Lcd_Print_Char (4); // Benutzerdefiniertes Zeichen anzeigen 4 Lcd_Print_Char (5); // Benutzerdefiniertes Zeichen anzeigen 5 Lcd_Print_Char (6); // Benutzerdefiniertes Zeichen anzeigen 6 Lcd_Print_Char (7); // Benutzerdefiniertes Zeichen anzeigen 7
Vordefiniertes Sonderzeichen drucken:
Auf dem HD44780 IC sind einige vordefinierte Sonderzeichen im DDROM gespeichert. Diese Zeichen können direkt auf den Bildschirm gedruckt werden, indem auf den Binärwert im Datenblatt verwiesen wird.
Beispiel: Der Binärwert des Zeichens "ALPHA" ist 0b11100000. Wie Sie dies erhalten, können Sie der folgenden Abbildung entnehmen. Ebenso können Sie einen Wert für jedes Sonderzeichen erhalten, das im IC vordefiniert ist.
Sobald der Binärwert bekannt ist, kann das entsprechende Zeichen auf dem Bildschirm gedruckt werden, indem einfach die Funktion void Lcd_Print_Char (char data) verwendet wird (siehe unten).
Lcd_Print_Char (0b11100000); // Binärwert von Alpha aus Datenblatt
Der vollständige Code dieses Projekts ist unten im Abschnitt Code angegeben. Überprüfen Sie auch die ausführliche Erklärung des Videos am Ende dieses Tutorials.
Schaltungsanschlüsse und Tests:
Für dieses Projekt sind keine zusätzlichen Hardwareanforderungen erforderlich. Wir haben einfach dieselben Verbindungen wie im vorherigen Tutorial für LCD-Schnittstellen verwendet und dieselbe Karte verwendet, die wir im Tutorial zum Blinken von LEDs erstellt haben. Wie immer simulieren wir das Programm mit Proteus, um unsere Ausgabe zu überprüfen.
Sobald die Simulation wie erwartet ausgeführt wurde, können Sie den Code direkt in unser Hardware-Setup brennen. Die Ausgabe des Programms sollte ungefähr so aussehen:
So können Sie mit dem PIC Microcontroller mit MPLABX- und XC8-Compiler jedes benutzerdefinierte Zeichen auf einem 16x2-LCD anzeigen. Lesen Sie hier auch unsere komplette PIC Microcontroller-Lernserie.