Herzlich Willkommen auf der Homepage von Sven Jordan! Sonntag, 06. Oktober 2024, 02:26

Ansteuerung eines LC-Displays

Ich habe ein C-Programm-Modul erstellt, das die Ansteuerung eines LC-Displays mit dem ATmega32 ermöglicht.
Das Modul dient zur Ansteuerung eines Displays vom Typ "DEM20488" der Display Elektronik GmbH oder eines Displays vom Typ "EA DIP204-4NLED" der Electronic Assembly GmbH. Die Displays haben beide 4 Zeilen mit jeweils 20 Zeichen.

Anschluss des Displays an den Controller

Da dem Programm-Modul bei der Initialisierung der verwendete Controller-Port mitgeteilt wird, kann das Display an einen beliebigen I/O-Port angeschlossen werden (PORT A ... PORT D). Die Reihenfolge der Pins darf aber nicht vertauscht werden!

Der Anschluss an den Controller erfolgt nach folgenden Schemata:

DEM20488



Dabei sind je nach Display-Farbe folgende Widerstandswerte zu verwenden:

DisplaytypSchriftfarbeHintergrundfarbeWert von R1Wert von R2
DEM20488SYH-PYSchwarzGrün-Gelb20 Ohm2,15 kOhm
DEM20488SBH-PW-NWeißBlau133 Ohm2,15 kOhm
DEM20488FGH-PWSchwarzWeiß133 Ohm2,15 kOhm

EA DIP204-4NLED



Datenblatt

Download

Download: display.h (C-Header-Datei)

Wichtiger Hinweis

Es sind Wartefunktionen enthalten (siehe unten), die eine for-Schleife nutzen. Je nach Optimierungseinstellung des Compilers ist es möglich, dass dieser die Schleifen für unnötig erachtet und einfach weglässt. In diesem Fall kann die Initialisierung des Displays aber nicht funktionieren!

Versions-Verlauf

Version 1.0: Initiale Version
Version 1.1: Wartefunktionen geändert
Version 2.0: Funktion zum Anzeigen von großen Zahlen über alle 4 Display-Zeilen ergänzt, Funktion zum Anzeigen eines Bargraphs ergänzt
Version 3.0: Unterstuetzung von EA DIP204-4NLED

Funktionen

Das C-Programm-Modul beinhaltet folgende Funktionen:

Wartefunktion mit 10 Millisekunden

Datentyp der Funktion: void wait_10_millisek(void)
Diese Funktion sorgt mittels for-Schleife für eine Wartezeit von 10 Millisekunden, unter der Voraussetzung, dass die CPU-Frequenz 16 MHz beträgt. Diese Funktion wird vom Programm-Modul intern verwendet, kann aber auch für andere Zwecke verwendet werden.

Wartefunktion mit 500 Mikrosekunden

Datentyp der Funktion: void wait_500_mikrosek(void)
Diese Funktion sorgt mittels for-Schleife für eine Wartezeit von 500 Mikrosekunden, unter der Voraussetzung, dass die CPU-Frequenz 16 MHz beträgt. Diese Funktion wird vom Programm-Modul intern verwendet, kann aber auch für andere Zwecke verwendet werden.

Einschalten und Initialisieren des Displays

Datentyp der Funktion: void display_init(unsigned char eingangsport, unsigned char displaytyp)
Durch Aufruf der Funktion wird das Display eingeschaltet und initialisiert. Als erstes Argument erwartet die Funktion 'A', 'B', 'C' oder 'D'. Damit wird der Port mitgeteilt, an dem das Display angeschlossen ist. Als zweites Argument erwartet die Funktion entweder den Wert 0 oder den Wert 1. 0 entspricht dem Display Typ DEM20488, 1 dem Display Typ EA DIP204-4NLED. Die Funktion display_init muss aufgerufen werden, bevor eine andere Funktion dieses Moduls verwendet werden kann (Ausnahme: Wartefunktionen)!

Display ausschalten

Datentyp der Funktion: void display_off(void)
Diese Funktion schaltet das Display sowie die Hintergrundbeleuchtung des Displays aus.

Hintergrundbeleuchtung einschalten

Datentyp der Funktion: void backlight_on(void)
Diese Funktion schaltet die Hintergrundbeleuchtung des Displays ein.

Hintergrundbeleuchtung ausschalten

Datentyp der Funktion: void backlight_off(void)
Diese Funktion schaltet die Hintergrundbeleuchtung des Display aus.

Anzeige löschen

Datentyp der Funktion: void clear_display(void)
Diese Funktion entfernt sämtliche Zeichen vom Display und setzt den Cursor auf das erste Zeichen in der ersten Zeile.

Positionieren des Cursors

Datentyp der Funktion: void cursor_to_position(unsigned char zeile, unsigned char spalte)
Diese Funktion erwartet als erstes Argument die Zeilennummer des Display (1 ... 4) und als zweites Argument die Spaltennummer des Displays (1 ... 20). Der Cursor wird nur an die angegebene Position gesetzt, es wird kein Zeichen ausgegeben. Das nächste auszugebende Zeichen wird dann an dieser Stelle angezeigt.

Ausgeben eines einzelnen Zeichens

Datentyp der Funktion: void print_char(char character)
Diese Funktion zeigt an der aktuellen Cursor-Position ein einzelnes Zeichen an. Als Argument kann entweder ein Standardzeichen in einfachen Anführungszeichen übergeben werden (z.B. 'A'). Alternativ kann der Zahlenwert eines Zeichens, das in der Zeichentabelle im Datenblatt zu finden ist, übergeben werden (z.B. 0b11011111 für das Grad-Zeichen).

Ausgeben einer Zeichenkette

Datentyp der Funktion: void print_string(char* string)
Diese Funktion zeigt ab der aktuellen Cursor-Position eine Zeichenkette an. Als Argument wird eine Zeichenkette in doppelten Anführungszeichen erwartet (z.B. "Hallo Welt").

Ausgeben einer Festkommazahl mit einstellbarer Formatierung

Datentyp der Funktion: void print_number(signed short value, unsigned char sign, unsigned char vorkommastellen, unsigned char nachkommastellen)
Diese Funktion zeigt eine Integer-Zahl vom Typ signed short an. Diese Zahl wird als erstes Argument übergeben. Das zweite Argument legt fest, wie das Vorzeichen dargestellt werden soll: Bei 0 wird kein Vorzeichen angezeigt, 1 zeigt nur ein negatives Vorzeichen an, bei einer positiven Zahl wird ein Leerzeichen angezeigt, bei 2 wird sowohl ein positives als auch ein negatives Vorzeichen angezeigt. Das dritte Argument der Funktion legt die Anzahl der anzuzeigenden Stellen vor dem Komma fest und das vierte Argument die Anzahl der Nachkommastellen.

Funktionen zum Anzeigen von großen Zahlen über alle 4 Display-Zeilen

Datentyp der Funktion zum Definieren der Sonderzeichen: void define_big_numbers(void)
Diese Funktion definiert die Zeichen 0 bis 7 der Display-Zeichentabelle. Diese sind Voraussetzung für die Funktion zum Anzeigen von großen Zahlen, die im Folgenden beschrieben wird.

Datentyp der Funktion zum Anzeigen der Zahlen: void print_big_number(unsigned char number, unsigned char spalte)
Das erste Argument erwartet die Ziffer, die angezeigt werden soll (0...9). Außerdem kann auch ein Doppelpunkt (z.B. für eine Uhrzeit-Anzeige) gesetzt werden. Dazu wird dem ersten Argument eine 10 übergeben. Das zweite Argument benötigt die Spalte, in der das Zeichen angezeigt werden soll (1...20). Hierbei ist zu beachten, dass Ziffern drei Spalten Platz benötigen, ein Doppelpunkt eine Spalte.

Es ist leider nicht möglich, gleichzeitig große Zahlen und einen Bargraph darzustellen.

Funktionen zum Anzeigen von Balkendiagrammen (Bargraph)

Datentyp der Funktion zum Definieren der Sonderzeichen: void define_bargraph(void)
Diese Funktion definiert die Zeichen 0 bis 7 der Display-Zeichentabelle. Diese sind Voraussetzung für die Funktion zum Anzeigen von Balkendiagrammen, die im Folgenden beschrieben wird.

Datentyp der Funktion zum Anzeigen eines Bargraphs: void print_bargraph(signed short value, unsigned char length, signed short min_value, signed short max_value)
Das erste Argument, value, ist der Wert, der grafisch angezeigt werden soll. Das zweite Argument, length, definiert, wie viele Spalten des Displays für den Bargraph verwendet werden sollen (3...20). Es wird nur eine Zeile benötigt, sodass mehrere Balkendiagramme gleichzeitig angezeigt werden können. Die Argumente min_value und max_value bestimmen, wie der anzuzeigende Wert gespreizt werden soll (z.B. von 0 bis 100 %). Liegt value unter min_value ist der Bargraph komplett leer, liegt value über max_value ist der Bargraph komplett ausgefüllt.

Es ist leider nicht möglich, gleichzeitig große Zahlen und einen Bargraph darzustellen.
© Sven Jordan Letzte Änderung: 01.10.2019, 08:16 1 Aufruf heute Druckansicht beenden