Rudi01:
Das Prinzip habe ich grob verstanden , allerdings hapert es noch an der Umsetzung.
Leider konnte ich keine deutsche Beschreibung darüber finden.
Kennt eventuell jemand einen Link?
Ich habe zwar kein 20x4 Display, aber ich habe mal trotzdem versucht, Dir ein kleines Beispielprogramm für 4 Ziffern (0,1,2,3) zu machen, das mit nur zwei verschiedenen Zeichen auskommt (voller Block oder leerer Block), und das daher binär mit Nullen und Einsen codiert werden kann.
1 == voller Block
0 == leerer Block
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);
long digits[][4]={
{ // 0
0b11111111111111111111,
0b10000000000000000001,
0b10000000000000000001,
0b11111111111111111111,
},
{ // 1
0b00000000000000000000,
0b11111111111111111111,
0b00000000000000000000,
0b00000000000000000000,
},
{ // 2
0b11111111110000000001,
0b10000000010000000001,
0b10000000010000000001,
0b10000000011111111111,
},
{ // 3
0b11111111111111111111,
0b10000000010000000001,
0b10000000010000000001,
0b10000000010000000001,
},
};
void showDigit(byte d)
{
for (int i=0;i<4;i++) // print 4 lines
{
lcd.setCursor(0,i);
for (int j=19;j>=0;j--) // from high-bit to low-bit
{
byte bit=bitRead(digits[d][i],j);
if (bit)
{
lcd.print('\377');
Serial.print('X');
}
else
{
lcd.print(' ');
Serial.print(' ');
}
}
Serial.println();
}
Serial.println();
}
void setup()
{
Serial.begin(9600);
lcd.begin(20,4);
}
void loop()
{
for (int i=0;i<=3;i++)
{
showDigit(i);
delay(1000);
}
}
Ausgabe erfolgt dabei sowohl auf "Serial" als auch auf LCD.
Die Ziffern sind sowohl im Quelltext als auch auf LCD und auf dem seriellen Monitor "liegend von rechts" zu lesen.
Die Ziffern 4 bis 9 im Daten-Array "digits" zu definieren, überlasse ich Dir.