API – alphanumerisches Punktmatrix-LCD (HD44780), 4-bit Datenbus

API - alphanumerisches Punktmatrix-LCD (HD44780), 4-bit Datenbus

Diese API ermöglicht eine Ausgabe auf einem alphanumerischen LCD mit einem HD44780, oder einem kompatiblen Displaycontroller. Das LCD soll über einen 4-bit Datenbus mit dem Mikrocontroller verbunden sein.
  • Programmiersprache: ANSI C
  • Mikrocontroller: AT89C5131A - 8051 Mikrocontroller
  • IDE: µVision 4
  • Compiler: Cx51 V9.5

API Beschreibung

Diese API ermöglicht eine Ausgabe auf einem alphanumerischen LCD mit einem HD44780, oder einem kompatiblen Displaycontroller. Das LCD soll über einen 4-bit Datenbus mit dem Mikrocontroller verbunden sein.

Mit dieser API kann man das Display EA DIPS082 auf dem ZB-008 LCD Board und SB-004 Mikrocontroller Board ansteuern.

Programmiersprache: ANSI C
Mikrocontroller: AT89C5131A - 8051 MK
IDE: µVision 4
Compiler: Cx51 V9.5

Bilder der Module



Funktions-Deklarationen

// LCD Initialisierung
void LCD_Init(void);

// Hintergrundbeleuchtung EIN/AUS
void LCD_BackLight(unsigned char state);

// Loesche LCD Display
void LCD_ClearLCD(void);

// Setze Cursor auf Home-Position (oben links)
void LCD_ReturnHome(void);

// Gebe String auf dem LCD aus
errorCodeLCD_t LCD_PutString(unsigned char line, unsigned char column, unsigned char* pString);

Konstanten

Error Code errorCodeLCD_t
// Error Code LCD
typedef enum _errorCodeLCD {
LCD_SUCCESS = 0,
LCD_BUSY = 1,
LCD_TRANSMISSION_FAIL = 2
} errorCodeLCD_t;

Konfiguration

In lcd_config.h kann man die LCD Parameter ändern.

Die Einstellungen sind in zwei Gruppen unterteilt:

  • allgemeine Einstellungen, diese beschreiben das verwendete Display
  • Einstellungen der LCD Register.

Allgemeine Einstellungen
  • LCD_PORT - Mikrocontroller Port mit dem LCD verbunden ist
    • Standard Wert: Port 2 - LCD_PORT = 0x0A;
  • LCD_LINE_SIZE - Zeilenanzahl von LCD
    • Standard Wert: 2 Zeilen - LCD_LINE_SIZE 0x02
  • LCD_COLUMN_SIZE - Spaltenanzahl von LCD
    • Standard Wert: 8 Spalten - LCD_COLUMN_SIZE 0x08
  • LCD_ADDRESS_LINE_1 - Adresse der ersten Zeile
    • Standard Wert: 0x00 - LCD_ADDRESS_LINE_1 0x00
  • LCD_ADDRESS_LINE_2 - Adresse der zweiten Zeile
    • Standard Wert: 0x40 - LCD_ADDRESS_LINE_2 0x40
  • LCD_ADDRESS_LINE_3 - Adresse der dritten Zeile
    • Standard Wert: 0x14 - LCD_ADDRESS_LINE_3 0x14
  • LCD_ADDRESS_LINE_4 - Adresse der vierten Zeile
    • Standard Wert: 0x54 - LCD_ADDRESS_LINE_4 0x54

Einstellungen der LCD Register
Über folgende Konstanten kann man die LCD Register einstellen. Die genaue Beschreibung der Register und die Bedeutung der einzelnen Bits dieser Register entnehmen Sie bitte dem HD44780 Datenblatt.

  • Register ENTRY_MODE_SET - Einstellung der Bewegungsart des Cursors und der Shift-Art des Displays
    • Standard Wert: 0x06 - ENTRY_MODE_SET 0x06
  • Register DISPLAY_CONTROL - EIN/AUS des Displays, Cursors, Cursor-Blinkens
    • Standard Wert: 0x0D - DISPLAY_CONTROL 0x0D
  • Register CURSOR_DISPLAY_SHIFT - Einstellung der Bewegungsart des Cursors und der Shift-Art des Displays
    • Standard Wert: 0x14 - CURSOR_DISPLAY_SHIFT 0x14
  • Register FUNCTION_SET - Einstellung der Betriebsart des gesamten Displays
    • Standard Wert: 0x28 - FUNCTION_SET 0x28

LCD Einstellungen über Configuration Wizard
Es ist möglich, die Einstellungen über Configuration Wizard vorzunehemen.

Machen Sie die lcd_config.h in µVision 4 auf. Klicken Sie auf der unteren Leiste auf den „Configuration Wizard“. Es öffnet sich eine „GUI-likeOberfläche. Über diese Oberfläche können alle allgemeinen Einstellungen und Register Einstellungen auf einfachere Weise geändert werden. Die Standard Einstellungen kann man dem Bild unten entnehmen.


Funktionen

void LCD_Init (void);

Diese Funktion initialisiert LCD.

Funktionstyp
void

Übergabeparameter
void

Diese Funktion verwendet folgende globale Konstanten:

void LCD_BackLightt (unsigned char state);

Diese Funktion schaltet Hintergrundbeleuchtung ein und aus. Übergabe einer „1“ erzeugt LOW-Pegel am Port Pin der Hintergrundbeleuchtung.

Funktionstyp
void

Übergabeparameter
unsigned char state - EIN / AUS

Diese Funktion verwendet folgende globale Variable:
  • LCD_BACK_LIGHT (lcd_config.h)

void LCD_ClearLCD (void);

Diese Funktion schreibt eine 0x01 in den „dispaly clear“ Register. Die Display Anzeige wird gelöscht und der Cursor wird auf die Home-Position (oben links) gesetzt.

Funktionstyp
void

Übergabeparameter
void

void LCD_ReturnHome (void);

Diese Funktion schreibt eine 0x02 in den „cursor home“ Register. Der Cursor wird auf die Home-Position (oben links) gesetzt.

Funktionstyp
void

Übergabeparameter
void

errorCodeLCD_t LCD_PutString (unsigned char line, unsigned char column, unsigned char* pString);

Diese Funktion gibt einen String auf dem LCD aus.

An diese Funktion wird die Zeile (line) und die Spalte (column) für das erste Zeichen und ein String (pString) übergeben.

Die Zeilenanzahl kann je nach Display zwischen 1 und 4 sein. Die maximale Zeilenanzahl wird in der Konstanten LCD_LINE_SIZE (lcd_config.h) definiert. Bei line > LCD_LINE_SIZE wird ein Error vom Typ errorCodeLCD_t generiert und der String wird nicht ausgegeben.

Die Spaltenanzahl kann je nach Display zwischen 0 und 20 liegen. Die maximale Spaltenanzahl wird in der Konstanten LCD_COLUMN_SIZE(lcd_config.h) definiert. Bei column > LCD_COLUMN_SIZE wird ein Error vom Typ errorCodeLCD_t generiert und der String wird nicht ausgegeben.

Funktionstyp
errorCodeLCD_t - gibt den Status der Übertragung wieder. Mögliche Werte sind:

Konstanten Name Wert Beschreibung
LCD_SUCCESS 0x00 Übertragung erfolgreich
LCD_BUSY 0x01 Unbekannter Fehler
LCD_TRANSMISSION_FAIL 0x02 Übertragung fehlgeschlagen


Übergabeparameter
unsigned char line - Zeile für das erste Zeichen (1 bis LCD_LINE_SIZE (lcd_config.h))

unsigned char column - Spalte für das erste Zeichen (0 bis LCD_COLUMN_SIZE (lcd_config.h))

unsigned char* pString - String

Beispiel

#include "lcd.h"	// LCD Header
#include "lcd_config.h" // LCD Config

void main (void){
// LCD Initialisierung
LCD_Init();
// Hintergrundbeleuchtung an (8051 MK)
LCD_BackLight(1);

// Ausgabe "Hello" auf dem Display, Zeile 1, Spalte 1
LCD_PutString(1, 0,"Hello");
// Ausgabe "world" auf dem Display, Zeile 2 Spalte 3
LCD_PutString(2, 2,"world");
...
...
...
// Loesche Display
LCD_ClearLCD();

while(1);
}