Man braucht wahrscheinlich nur die Hexzahlen zwischen "call Char" für Bascom auf Dezimalzahlen wandeln. Wenn man das als Tabelle haben will, sollte mit "db" gehen. Z.B. Zeichen "0" als "db 3,3,3,3,3,3,3,3" usw.
MfG
Man braucht wahrscheinlich nur die Hexzahlen zwischen "call Char" für Bascom auf Dezimalzahlen wandeln. Wenn man das als Tabelle haben will, sollte mit "db" gehen. Z.B. Zeichen "0" als "db 3,3,3,3,3,3,3,3" usw.
MfG
Hallo
Ich hab's mal umgesetzt, Bascom-Programmierer mögen mir verzeihen:
Bild hier
Ein kleiner Bug in der oberen Zeile: Auch mein LCD hat nur 8 Sonderzeichen. Im Code ist das aber korrigiert:
GrußCode:' nibobee mit Bascom "Doppelthohe Ziffern" 6.5.10 mic ' Doppelthohe Ziffern: https://www.roboternetz.de/phpBB2/viewtopic.php?t=54147 ' nibobee mit 4bit-LCD: https://www.roboternetz.de/phpBB2/ze...ag.php?t=51821 ' Zeichensatz von PICture: https://www.roboternetz.de/phpBB2/vi...=437434#437434 $regfile = "m16def.dat" $crystal = 15000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1 Config Lcd = 20 * 4 Config Lcdbus = 4 ' oje Deflcdchar 0 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 ' Zeichensatz von PICture Deflcdchar 1 , &H1F , &H1F , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 Deflcdchar 2 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H1F , &H1F Deflcdchar 3 , &H1F , &H1F , &H03 , &H03 , &H03 , &H03 , &H1F , &H1F Deflcdchar 4 , &H1F , &H1F , &H18 , &H18 , &H18 , &H18 , &H1F , &H1F Deflcdchar 5 , &H1F , &H1F , &H1B , &H1B , &H1B , &H1B , &H1B , &H1B Deflcdchar 6 , &H1B , &H1B , &H1B , &H1B , &H1B , &H1B , &H1F , &H1F Deflcdchar 7 , &H1F , &H1F , &H1B , &H1B , &H1B , &H1B , &H1F , &H1F Dim Ziffer(10) As Byte Ziffer(1) = &H56 ' 0 Ziffer(2) = &H00 ' 1 Ziffer(3) = &H14 ' 2 Ziffer(4) = &H32 ' 3 Ziffer(5) = &H60 ' 4 Ziffer(6) = &H42 ' 5 Ziffer(7) = &H46 ' 6 Ziffer(8) = &H10 ' 7 Ziffer(9) = &H76 ' 8 Ziffer(10) = &H53 ' 9 Dim B As Byte , Temp As Byte Cls ' clear the LCD display Cursor Off Noblink Lcd "Nibobee mit LCD" ' display this at the top line Locate 3 , 1 Lcd "Doppelthohe Ziffern" Wait 2 Cls For B = 1 To 8 ' es sind nur 8 Userzeichen ;) Locate 1 , B Temp = B - 1 ' ächz Lcd Chr(temp) Locate 2 , B Lcd Temp Next Wait 2 For B = 1 To 10 Locate 3 , B Temp = Ziffer(b ) / 16 ' Bit 7-4 sind die obere Zifferhälfe Lcd Chr(temp) Locate 4 , B Temp = Ziffer(b) And &H0F ' und Bit 3-0 die Untere ;) Lcd Chr(temp) Next Do Loop End
mic
&H72 für die 9?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Wow! Das sieht auf deinem Display viel besser als auf meinem aus!
Es ist also mit jedem µC möglich wenn man sich dafür etwas bemüht...
Möglicherweise lassen sich mit z.B. 4x16 Zeichen noch grössere erzeugen.
MfG
Geändert von PICture (27.03.2011 um 16:13 Uhr)
Hallo zusammen,
ich habe das Projekt gerade gut gebrauchen können! Danke auch.
Ich programmiere in C auf dem AT89C5131 und AT89C4051 und habe dafür das Programm mal angepasst:
Erstmal die Deklaration der Arrays (wandern später vermutlich aus Platzgründen in EEPROM) im Programmspeicher (Schlüsselwort code)
und die Deklaration der Ziffern 0-9 (bei der 9 habe ich die Darstellung leicht geändert)Code:// 8 User-Definierte Zeichen zum zusammenbau der Ziffern static code char Symbol0[8]={0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03}; static code char Symbol1[8]={0x1f,0x1f,0x03,0x03,0x03,0x03,0x03,0x03}; static code char Symbol2[8]={0x03,0x03,0x03,0x03,0x03,0x03,0x1f,0x1f}; static code char Symbol3[8]={0x1f,0x1f,0x03,0x03,0x03,0x03,0x1f,0x1f}; static code char Symbol4[8]={0x1f,0x1f,0x18,0x18,0x18,0x18,0x1f,0x1f}; static code char Symbol5[8]={0x1f,0x1f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b}; static code char Symbol6[8]={0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1f,0x1f}; static code char Symbol7[8]={0x1f,0x1f,0x1b,0x1b,0x1b,0x1b,0x1f,0x1f};
So. erstmal das.Code:// 2-Zeilige Zusammensetzung der Ziffern aus den 8 User-Definierten Zeichen // High-Nibble für obere Zeile, Low-Nibble für untere Zeile code unsigned char Ziffer[10] = {0x56,0x00,0x14,0x32,0x60,0x42,0x46,0x10,0x76,0x72};// 9 war 53
tschuessle
Benrhard
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
Lesezeichen