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
würd ich eher abkürzen:Code:while (*number) { if(i == 0) { zahl1 = (uint8_t) *number; } if(i == 1) { dotpoint = *number; } if(i == 2) { zahl2 = (uint8_t) *number; } number++; i++; }
Beseitigt auch die Gefahr, dass die While-Schleife mal hängen bleibt.Code:zahl1 = number[0]; dotpoint = number[1]; zahl2 = number[2];
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.







Zitieren

Lesezeichen