LCD Spielerei

Außer der Reihe mal etwas Spaß haben. Also programmiere ich eine Software für die Ausgabe auf LCD Display. Ein oder besser gleich zwei zweizeilige LCD’s mit Hintergrundbeleuchtung sollten schon genügen.

Die Augendemo
Als erstes eine „Augendemo“: Das heißt, die LCD’s als Augen und eine Pupille hinein programmiert, die sich hin- und herbewegt. Wer hier an den Augenroller denkt, liegt richtig. Den habe ich oft genug gesehen.
Dafür brauche ich ein selbstdefiniertes Zeichen im CGRAM des Displays, also auch etwas zum Lernen dabei.

Die LCD’s
Hierfür nehme ich wie schon angedeutet, zwei zweizeilige Displays mit 16 Zeichen Breite. Die sind meist kompatibel zu HD44780, so auch meine zwei. Als Pupille definiere ich vier Zeichen nebeneinander, parallel in beiden Zeilen. Die soll sich dann in beiden „Augen“ hin und her bewegen, wie beim Augenroller. Zusätzlich lasse ich „ihn“ auch ab und zu mal blinzeln. Das bedeutet, die Pupillen verschwinden von oben nach unten und tauchen dann direkt wieder von unten nach oben auf, bevor sie sich weiterbewegen.

Selbstdefinierte Zeichen auf dem Display
Das war etwas mühsam heraus zu finden, aber machbar. Es sind insgesamt acht Zeichen definierbar. Dafür gibt es die Funktion createChar(Par1, Par2) , mit Par1 die Nummer des definierten Zeichens, also von 1 bis 8, Par2 ist dann ein Array aus 8 Bytes. Jedes dieser Bytes stellt eine Zeile des Zeichen dar, beginnend mit der obersten Zeile. Eingetragen wird das Zeichen dann als ASCII Character, wie in der Tabelle im Datasheet dargestellt mit der Nummer des Zeichens (1 bis 8, in der Tabelle die Spalte ganz links). Das sieht in meinem Fall für das Zeichen 1 folgendermaßen aus:

byte blck[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111};.
.

lcd_links.createChar(1, blck); // Pupille definieren

.

lcdtxt[6] = lcdtxt[7] = lcdtxt[8] = lcdtxt[9] = (uint8_t)1; // Pupille schreiben

Das ergibt einen vollständigen Kasten.

Augendemo 😉

Pupillen und Bewegung
Die Funktionen, die das Display zur Verfügung stellt nutze ich hierfür nicht. Dafür nehme ich ein Array aus 17 Zeichen. Das sind 16 darstellbare Zeichen und eine abschließende, binäre 0 als String-ende. Die Pupille schiebe ich dann selbst hin und her und stelle das dann nach jeder Schiebeoperation auf dem Display dar.

Das Laufschrift Demo
Das teile ich auf in zwei Demo’s:

  • einmal der Rundlauf auf jedem Display einzeln
    Für den Rundlauf auf jedem Display einzeln brauche ich nur zwei Arrays mit den Texten für die obere und die untere Zeile.
  • der Rundlauf über beide Displays
    Für den Rundlauf über beide Displays brauche ich vier Arrays mit den Texten für jeweils die obere und die untere Zeile.

Mit den jeweils eigenen Arrays mache ich die ganze Angelegenheit leicht portabel auf andere Displays. Ich muss nur die Ausgabe an die jeweilige Hardware anpassen. Sei es also LCD, Siebensegment oder TFT oder oder oder. Es ist leicht anzupassen. Sind noch mehr Displays beteiligt, so lässt sich das ganze ebenfalls entsprechend einfach erweitern.

Zu den Demos
Welches Demo gerade laufen soll, lässt sich über die Kommentierung / nicht Kommentierung der Defines einstellen. Viel Spaß beim Ausprobieren!

Der Sketch

Links

Augenroller
https://de.wikipedia.org/wiki/Johann_Lutter_von_Kobern

HD44780 Datasheet
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Veröffentlicht von

Jürgen

Ich bin Software Ingenieur und habe meine Schwerpunkte in allen Aktivitäten, die zur Software Entwicklung gehören. Am längsten bin ich als Software Entwickler von Embedded Software in C tätig.