Zweiter Teil: die Funktionen
Zunächst die User-Zeichen deklarieren:
Code:
void Set_Characters(void){
definierelcdsymbol(Symbol0, 0);
definierelcdsymbol(Symbol1, 1);
definierelcdsymbol(Symbol2, 2);
definierelcdsymbol(Symbol3, 3);
definierelcdsymbol(Symbol4, 4);
definierelcdsymbol(Symbol5, 5);
definierelcdsymbol(Symbol6, 6);
definierelcdsymbol(Symbol7, 7);
}
und als "printf-Ersatz" eine Funktion, die eine Char-Variable als 3-Stellige Zahl mit unterdrückten 0-en ausgibt:
Code:
void Ausgabe_3s2z(unsigned char Zahl, unsigned char Pos)
{ unsigned char Hunni, Zehner, Einer;
Hunni = Zahl / 100;
Einer = Zahl % 100;
Zehner = Einer / 10;
Einer = Einer % 10;
cursorpos(Pos + 0);
if (Hunni==0) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Hunni] /16); // High-Nibble
if (Zahl <= 9) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Zehner]/16); // High-Nibble
charlcd(Ziffer[Einer] /16); // High-Nibble
cursorpos(Pos + 0x40); // Zweite Zeile
if (Hunni==0) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Hunni] &0X0F); // Low-Nibble
if (Zahl <= 9) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Zehner]&0X0F); // Low-Nibble
charlcd(Ziffer[Einer] &0X0F); // Low-Nibble
}
und zum Schluß noch eine Funktion, die eine Int-Variable (bei mir Geschwindigkeit in 1/10 km/h) als 3.1-Stellige Zalh ausgibt. Der Dezimalpunkt ist leider nicht mehr definierbar, so dass ich auf ein Zeichen aus dem Erweiterten Zeichensatz des LCD zurückgegriffen habe...
Code:
void Ausgabe_3s1_2z(unsigned int Zahl, unsigned char Pos)
{ unsigned char Hunni, Zehner, Einer, Nachkomma;
unsigned int Rest;
Hunni = Zahl / 1000;
Rest = Zahl % 1000;
Zehner = Rest / 100;
Rest = Zahl % 100;
Einer = Rest / 10;
Nachkomma = Rest % 10;
cursorpos(Pos + 0);
if (Hunni==0) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Hunni] /16); // High-Nibble
if (Zahl <= 99) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Zehner]/16); // High-Nibble
charlcd(Ziffer[Einer] /16); // High-Nibble
charlcd(0x20);
charlcd(Ziffer[Nachkomma] /16); // High-Nibble
cursorpos(Pos + 0x40); // Zweite Zeile
if (Hunni==0) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Hunni] &0X0F); // Low-Nibble
if (Zahl <= 99) charlcd(0x20); // führende 0 unterdrücken
else charlcd(Ziffer[Zehner]&0X0F); // Low-Nibble
charlcd(Ziffer[Einer] &0X0F); // Low-Nibble
// Komma Symbolisieren
charlcd(0xa5);
charlcd(Ziffer[Nachkomma] &0X0F); // Low-Nibble
}
unn tschuess
Bernhard
Lesezeichen