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
Druckbare Version
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?
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
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