ASURO Library  2.80
Funktionen
lcd.c-Dateireferenz

Funktionen zur Ansteurung eines LCD Moduls ueber die I2C Schnittstelle. Diese Bibliothek unterstützt HD44870 kompatible LCD Module mit einem I2C Port Expander Chip PCF8574P
Die Pinbelegung des I2C Portexpanders ist folgende:
P0-P3 - BD4-DB7
P4 - RS
P4 - R/W
P6 - Backlight (optional)
P7 - EN
Es wird zudem die I2C Emulations Bibliothek benötigt.
. Mehr ...

#include "asuro.h"
#include "lcd.h"
#include "i2c.h"
Include-Abhängigkeitsdiagramm für lcd.c:

gehe zum Quellcode dieser Datei

Funktionen

void InitLCD (void)
 LCD Initialisierung.
 
void BacklightLCD (unsigned char state)
 LCD Backlight an oder ausschalten.
 
void SetDataLCD (unsigned char data)
 LCD Daten schreiben.
 
void SetIOLCD (unsigned char setCommand, unsigned char bits)
 LCD IO Ports schreiben.
 
unsigned char GetIOLCD (void)
 LCD IO Ports lesen.
 
void SetCursorLCD (unsigned char cursor, unsigned char line)
 LCD Cursor setzen.
 
void CommandLCD (unsigned char command)
 LCD Kommando ausgeben.
 
void ClearLCD (void)
 LCD loeschen und Cursor auf 1 Postion der ersten Zeile.
 
void WriteLCD (unsigned char data)
 LCD Daten schreiben.
 
void PrintLCD (char *string, unsigned char wrap)
 LCD String ausgeben optional mit Zeilenumbruch.
 
void PrintSetLCD (unsigned char cursor, unsigned char line, char *string)
 LCD String ausgeben an bestimmter Position.
 
void PrintIntLCD (int value)
 LCD Integer Wert ausgeben.
 
void PrintAlignLCD (unsigned char alignment, unsigned char line, char *string)
 LCD Stringausgabe mit Ausrichtung (links, mitte, rechts)
 
void PrintLCD_p (const char *progmem_s)
 LCD Stringausgabe aus dem Program Memory (Flash)
 
void SetCharLCD_p (unsigned char AsciiCode, const char *progmem_s)
 Sonderzeichen an das Display senden.
 
int PollSwitchLCD (void)
 Abfrage der Taserdes Arexx LCD Moduls.
 

Ausführliche Beschreibung

Funktionen zur Ansteurung eines LCD Moduls ueber die I2C Schnittstelle. Diese Bibliothek unterstützt HD44870 kompatible LCD Module mit einem I2C Port Expander Chip PCF8574P
Die Pinbelegung des I2C Portexpanders ist folgende:
P0-P3 - BD4-DB7
P4 - RS
P4 - R/W
P6 - Backlight (optional)
P7 - EN
Es wird zudem die I2C Emulations Bibliothek benötigt.
.

Autor
Rizqi Ahmad (raid_ox)
Version
V001 - 17-02-2007 - Rizqi Ahmad (raid_ox) Erste Version
V002 - 08.04.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)
V003 - 21.01.2008 - m.a.r.v.i.n
Anpassung an ATmega168 neue Funktion PrintLCD_p zur Ausgabe von Strings aus dem Programmspeicher
neue Funktion SetCharLCD zum Setzen von Sonderzeichen
neue Funktion PollSwitchLCD zur Abfrage der Tasten des Arexx LCD Moduls

Definiert in Datei lcd.c.

Dokumentation der Funktionen

void BacklightLCD ( unsigned char  state)

LCD Backlight an oder ausschalten.

Parameter
stateBacklight an oder aus

Definiert in Zeile 100 der Datei lcd.c.

{
SetIOLCD(state, LCD_BL);
}
void ClearLCD ( void  )

LCD loeschen und Cursor auf 1 Postion der ersten Zeile.

Definiert in Zeile 228 der Datei lcd.c.

void CommandLCD ( unsigned char  command)

LCD Kommando ausgeben.

Parameter
commandauszugebendes Kommando

Definiert in Zeile 215 der Datei lcd.c.

{
if (command == LCD_HOME)
lineLCD = cursorLCD = 0x00;
SetDataLCD(command);
}
unsigned char GetIOLCD ( void  )

LCD IO Ports lesen.

Rückgabe
LCD IO Port

Definiert in Zeile 168 der Datei lcd.c.

{
unsigned char data = 0x00;
data = ReadI2C(0);
return data;
}
void InitLCD ( void  )

LCD Initialisierung.

Definiert in Zeile 67 der Datei lcd.c.

{
unsigned char init[] = LCD_INIT;
unsigned char i = 0;
SetIOLCD(OFF, LCD_EN); // Start LCD Control, EN=0
Msleep(1); // Wait LCD Ready
// Initialize LCD
while (init[i] != 0x00)
{
CommandLCD(init[i]);
i++;
}
CommandLCD( LCD_DISPLAYON ); // Display on/off Control (Entry Display,Cursor off,Cursor not Blink)
CommandLCD( LCD_INCREASE ); // Entry Mode Set (I/D=1 Increment,S=0 Cursor Shift)
CommandLCD( LCD_CLEAR ); // Clear Display
CommandLCD( LCD_HOME ); // Home Cursor
Msleep(1); // Wait Initial Complete
}
int PollSwitchLCD ( void  )

Abfrage der Taserdes Arexx LCD Moduls.

Rückgabe
gibt den Wert aller gedrueckten Tasten zurueck
bit kodiert

Definiert in Zeile 373 der Datei lcd.c.

{
int key = 0;
//taster pins auf input schalten
// OC2 PIN deaktivieren, aber 36kHz Timer weiterlaufen lassen (z.B. für Sleep(void) )
#if defined(__AVR_ATmega168__)
TCCR2A = _BV(WGM21);
TCCR2B = _BV(CS20);
#else
TCCR2 = (1 << WGM21) | (1 << CS20);
#endif
DDRD &= ~((1<<PD2)|(1<<PD6)); // roten und gelben Taster als Eingang definieren
DDRB &= ~(1<<PB3); // blauen Taster als Eingang definieren
//taster abfragen
key |= (PIND&LCD_KEY_YELLOW);
key |= (PIND&LCD_KEY_RED);
key |= (PINB&LCD_KEY_BLUE);
//taster pins auf output schalten
#if defined(__AVR_ATmega168__)
TCCR2A = _BV(WGM20) | _BV(WGM21) | _BV(COM2A0) | _BV(COM2A1);
TCCR2B = _BV(CS20);
#else
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
#endif
DDRD |= ((1<<PD2)|(1<<PD6)); // roten und gelben Taster als ausgang definieren
DDRB |= (1<<PB3); // blauen Taster als ausgang definieren
//tasterwert zurückgeben
return key;
}
void PrintAlignLCD ( unsigned char  alignment,
unsigned char  line,
char *  string 
)

LCD Stringausgabe mit Ausrichtung (links, mitte, rechts)

Parameter
alignmentAusrichtung (links, mitte, rechts)
lineZeilennummer
stringauszugebender String

Definiert in Zeile 308 der Datei lcd.c.

{
unsigned char i = 0;
while (string[i] != 0x00)
i++;
if (alignment == RIGHT)
PrintSetLCD(LCD_CHARS-i, line, string);
else if (alignment == CENTER)
PrintSetLCD((LCD_CHARS-i)/2, line, string);
else
PrintSetLCD(0, line, string);
}
void PrintIntLCD ( int  value)

LCD Integer Wert ausgeben.

Parameter
valueauszugebender Integer Wert

Definiert in Zeile 292 der Datei lcd.c.

{
char text[6];
itoa(value,text,10);
PrintLCD(text, OFF);
}
void PrintLCD ( char *  string,
unsigned char  wrap 
)

LCD String ausgeben optional mit Zeilenumbruch.

Parameter
stringauszugebender String
wrapZeilenumbruch ja oder nein

Definiert in Zeile 255 der Datei lcd.c.

{
unsigned char i = 0;
while (string[i] != 0x00)
{
{
if (wrap)
else
break;
}
WriteLCD(string[i]);
i++;
}
}
void PrintLCD_p ( const char *  progmem_s)

LCD Stringausgabe aus dem Program Memory (Flash)

Parameter
progmem_sauszugebender String

Definiert in Zeile 330 der Datei lcd.c.

{
register char c;
while ( (c = pgm_read_byte(progmem_s++)) )
{
}
}
void PrintSetLCD ( unsigned char  cursor,
unsigned char  line,
char *  string 
)

LCD String ausgeben an bestimmter Position.

Parameter
cursorCursor Position
lineZeilen Nummer
stringauszugebender String

Definiert in Zeile 280 der Datei lcd.c.

{
SetCursorLCD(cursor, line);
PrintLCD(string, OFF);
}
void SetCharLCD_p ( unsigned char  AsciiCode,
const char *  progmem_s 
)

Sonderzeichen an das Display senden.

Parameter
progmem_sauszugebender String
AsciiCodeAscii Code des zu erzeugenden Sonderzeichens

Definiert in Zeile 353 der Datei lcd.c.

{
unsigned char i;
CommandLCD( 0x40|(AsciiCode<<3));
for(i=0;i<=7;i++)
{
WriteLCD(pgm_read_byte(progmem_s++));
}
}
void SetCursorLCD ( unsigned char  cursor,
unsigned char  line 
)

LCD Cursor setzen.

Parameter
cursorCursor Position
lineZeilen Nummer

Definiert in Zeile 184 der Datei lcd.c.

{
cursorLCD = cursor;
lineLCD = line;
if (line == 0)
line = LCD_LINE1;
#if LCD_LINES>=2
else if (line == 1)
line = LCD_LINE2;
#endif
#if LCD_LINES>=3
else if (line == 2)
line = LCD_LINE3;
#endif
#if LCD_LINES>=4
else if (line == 3)
line = LCD_LINE4;
#endif
else
line = LCD_LINE1;
CommandLCD(LCD_DDRAM | (line+cursor));
}
void SetDataLCD ( unsigned char  data)

LCD Daten schreiben.

Parameter
dataauszugebende Date

Definiert in Zeile 111 der Datei lcd.c.

{
unsigned char dataPins; // Pin Compatibility
// Set First Nibble Data to DataPins on PCF8574
dataPins &= 0x00;
dataPins |= ((data & 0x80) >> 7) << LD7;
dataPins |= ((data & 0x40) >> 6) << LD6;
dataPins |= ((data & 0x20) >> 5) << LD5;
dataPins |= ((data & 0x10) >> 4) << LD4;
SetIOLCD(OFF, LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7); // Clear old LCD Data (Bit[7..4])
SetIOLCD(ON, dataPins); // Strobe High Nibble Command
SetIOLCD(ON, LCD_EN); // Enable ON
Msleep(1);
SetIOLCD(OFF, LCD_EN); // Enable OFF
// Set Second Nibble Data to DataPins on PCF8574
dataPins &= 0x00;
dataPins |= ((data & 0x08) >> 3) << LD7;
dataPins |= ((data & 0x04) >> 2) << LD6;
dataPins |= ((data & 0x02) >> 1) << LD5;
dataPins |= ((data & 0x01) >> 0) << LD4;
SetIOLCD(OFF, LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7); // Clear old LCD Data (Bit[7..4])
SetIOLCD(ON, dataPins); // Strobe Low Nibble Command
SetIOLCD(ON, LCD_EN); // Enable ON
Msleep(1);
SetIOLCD(OFF, LCD_EN); // Enable OFF
Msleep(1); // Wait LCD Busy
}
void SetIOLCD ( unsigned char  setCommand,
unsigned char  bits 
)

LCD IO Ports schreiben.

Parameter
setCommandan - oder auschalten
bitszu setzende bits

Definiert in Zeile 151 der Datei lcd.c.

{
if (setCommand == ON)
portLCD |= bits;
else
portLCD &= ~bits;
}
void WriteLCD ( unsigned char  data)

LCD Daten schreiben.

Parameter
dataauszugebende Date

Definiert in Zeile 241 der Datei lcd.c.