LCD Assemblerprogramme für 2*16 Zeichen Displays

Diese Seite ist jetzt auch für den GCC gültig!

Anschluss des LCD Modul an den SpartanMC

Die 3 Steuersignale und die 4 Datenbit werden mit einem Input/Output Port realisiert, da die Daten nicht nur in die LCD geschrieben sondern auch gelesen werden müssen. Die Zuordnung der LCD Signale zu den 7 Bits des Interfaces finden Sie in folgender Tabelle:

Bits des I/O Ports6543210
LCD SignaleRWRSEDB7DB6DB5DB4


Weitere Informationen zur Ansteuerung der LCD finden Sie hier.

Funktionen des Assembler Includes lcd.s die mit dem C Aufruf #include <lcd.h> nutzbar werden


1. lcd_init(lcd_port_addr, timer_port_addr, timer_vorteiler);

Funktion zur Initialisierung der LCD. Um die Funktionen 2 bis 5 nutzen zu können, muss zuvor diese Funktion einmal aufgerufen werden.
//

#define	LCD_VT     1                            // 1 fuer 2^1 bis 8 fuer 2^8 (bei 25 MHz = 1)
#define LCDTIBASE  (SB_TIMER_0_BASE_ADR)	// Fuer LCD Wartezyklen
#define LCDBASE    (SB_PORT_BI_0_LCD_BASE_ADR)	// Bidirektionales Port mit 7 Bit


	lcd_init(LCDBASE, LCDTIBASE, LCD_VT);
//



2. lcd_print(Zeichenkette);

Eine mit 0x00 abgeschlossene Zeichenkette an die LCD senden.
//
        lcd_print("\fZeichenkette\r\nanzeigen"); // Anzeige des Textes mit Steuerzeichen zwichen den Anführungszeichen.
//


//
        char    zeit[11]   = "00:00:00\r\0";
	lcd_print(zeit);         // Anzeige der in der Variablen zeit gespeicherten Zeichenkette
//


3. lcd_putchar(zeichen);

Ein Zeichen an die LCD senden.
//
        lcd_putchar('*');        // Anzeige des ASCII-Zeichen *

        char    zeichen = '#';
        lcd_putchar(zeichen);    // Anzeige des ASCII-Zeichen #
//

Bei einer fortlaufenden Ausgabe von Zeichen wird nach der Initialisierung oben links auf der Anzeige begonnen und beim Erreichen des Zeilenendes automatisch zum Anfang der 2. Zeile gesprungen. Wird das Ende der 2. Zeile erreicht, dann werden die Zeichen der 1. Zeile Überschrieben.
Es können aber auch die Steuerzeichen \f zum Löschen der Anzeige und Sprung zur Position 0 oder \r um an den Zeilenanfang zurück zu springen oder \n um eine Zeile nach unten zu springen verwendet werden. Der Befehl \n wird dabei in Abhängigkeit von der Zeile in der er ausgegeben wird unterschiedlich ausgeführt. Wird er in der 1. Zeile gesendet, den wird an der aktuellen Position nur in die untere Zeile gesprungen. Befindet man sich bereits in der unteren Zeile, dann wird die untere Zeile noch oben verschoben und die untere Zeile gelöscht und zum Schluss an den Zeilenanfang gesprungen.

4. lcd_cmds(bytefolge);

Wird wie lcd_print zum senden von Initialisierungsdaten an die LCD verwendet. Die Bytefolge muss mit einer 0x00 enden. Mögliche Kommandos können aus der Dokumentation zum Steuerschaltkreis von Hitachi HD44780U Seite 24 entnommen werden.

5. lcd_cmd(byte);

Wird wie lcd_putchar zum senden eines Kommandos an die LCD verwendet. Mögliche Kommandos können aus der Dokumentation zum Steuerschaltkreis von Hitachi HD44780U Seite 24 entnommen werden.
//
        unsigned int lcdzeit  = 0x84;  // Position der Zeit auf der LCD
        char         zeit[11] = "00:00:00\r\0";

        lcd_cmd(lcdzeit);       // LCD auf Zeile 0 Position 4 setzen
        lcd_print(zeit);        // Zeichenkette ab dieser Position anzeigen
//

Konsolenfunktionen zur long (36 Bit) Ausgabe mit dem Include "lcd_funktionen.c" und "lcd_funktionen.h"

Anzeigen von long Werten (36 Bit) hexadezimal auf auf der LCD. Mit dem 2. Parameter wird die Anzahl der Anzeigestellen festgelegt. Es sind Werte von 0 bis 9 möglich. Bei 9 werden immer alle Stellen angezeigt und bei 0 nur die Stellen ungleich 0. Bei 1 wird nur die Stelle 16° immer angezeigt.
#include <lcd_funktionen.h>
unsigned long out_value = 0x123456789;
lcd_print("\r\n 36 Bit Wert =\r\n0x");
lcd_print_lx(out_value, 1);


Anzeigen von long Werten (36 Bit) dezimal auf der LCD. Mit dem 3. Parameter wird die Anzahl der Anzeigestellen festgelegt. Es sind Werte von 0 bis 11 möglich. Bei 11 werden immer alle Stellen angezeigt und bei 0 nur die Stellen ungleich 0. Bei 1 wird nur die Stelle 10° immer angezeigt. Mit sig=0 wird wert ohne Vorzeichen angezeigt. Für ungleich 0 wird das Vorzeichen und der Betrag angezeigt.
#include <lcd_funktionen.h>
unsigned long out_value = ­34359738368;
lcd_print("\r\n 36 Bit Wert =\r\n");
lcd_print_ld(out_value, 1, 1);


Beispiele

1. Mit diesen Funktionen wurde ein Testprogramm in C geschrieben, welches im ersten Teil aller 4 Sekunden die Ausschrift auf der LCD ändert bis man an der Konsole eine beliebige Eingabe macht. Daraufhin wird die LCD gelöscht und alle Eingaben an der Konsole erscheinen auch auf der LCD bis zur Eingabe von ESC. Nach ESC zeigt das Programm wieder aller 4 Sekunden eine anderen Text an. In beiden Programmphasen wird durch den Sekunden Interrupt ein Wert auf den LEDs hoch gezählt.

Assembler Quelle lcd.s C-Header lcd.h Testprogramm lcd_test2.c

2. Die Uhrzeit wird auf dem LCD in der oberen Zeile angezeigt und kann mit dem Rotationstaster gestellt werden. Das Drehen am Rotationstaster bewegt einen Zeiger in der unteren Zeile.

3. Test des Watchdog Timer mit Ausgaben auf LCD.



SpartanMC