Zweiter Teil: die Funktionen
Zunächst die User-Zeichen deklarieren:
und als "printf-Ersatz" eine Funktion, die eine Char-Variable als 3-Stellige Zahl mit unterdrückten 0-en ausgibt: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 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_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 }
unn tschuessCode: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 }
Bernhard







Zitieren

Lesezeichen