Problem ist eher andersrum... es werden 4 Zeichen geholt, aber nur 3 gespeichert. Das 4. Zeichen landet irgendwo, wo es nicht hinsoll.
Den Teil hier
Code:
while (*number)
{
if(i == 0)
{
zahl1 = (uint8_t) *number;
}
if(i == 1)
{
dotpoint = *number;
}
if(i == 2)
{
zahl2 = (uint8_t) *number;
}
number++;
i++;
}
würd ich eher abkürzen:
Code:
zahl1 = number[0];
dotpoint = number[1];
zahl2 = number[2];
Beseitigt auch die Gefahr, dass die While-Schleife mal hängen bleibt.
Die gesamte Bit-Zusammenbauerei könnte man natürlich noch weiter zusammenkürzen. Ich mach das z.B. nicht über einzelne Bits, sondern verwende pro Segment ein Byte. Sind ja 7 Segmente + 1 Punkt = 8 Bits.
Die Bitfolge sieht dann pro Byte so aus [DP][G][F][E][D][C][B][A].
Und dieses Byte schieb ich dann normal raus.
Könnte dann z.B. so aussehen:
case 1: daten = 0x06; // Bits: 0000 0110
case 2: daten = 0x5B; // Bits: 0101 1011
...
Soll der Punkt der jeweiligen Ziffer gesetzt werden:
data |= 0x80.
Lesezeichen