Funktion zur Umrechnung einer Zahl in 7 Segment?
-
Hallo,
bin am Verzweifeln,brauch ne Funktion "long int dec(short int bin)", die eine Zahl im Bereich
0 ... 9999 in eine 4-stellige Dezimalzahl in 7-Segment-Codierung umwandelt.
Parameter:(bin: Umzuwandelnde Zahl; der Aufrufer ist dafuer verantwortlich,
den Bereich 0 ... 9999 einzuhalten, es wird keine weitere
Pruefung vorgenommenRueckgabewert: 4-stelliger 7-Segment-Code).
Wär cool,wenn mir jemand helfen könnt und zeigen wie der code ausschaut,hab scho alles versucht.
danke
-
wo hast du denn probleme?
zeig mal was du schon hast.
-
ich hab mír erstmal überlegt wie ich anfangen kann,
und zwar:
-zur Codierung der 10 Ziffern ein Array mit 10 Komponenten:unsigned char komponenten[10];
Dieses Array soll in der Weise initialisiert werden, dass in
komponenten[i]
genau die Bits gesetzt sind, die zur Darstellung der Ziffer i in der 7-Segment-Anzeige benötigt werden. hoff ich etz mal:P Beispiel für Null:
Komponenten[0] = 0x3f;
Umwandlung der Zahl bin in den Funktionswert:
Division bin / 1000 sagt mir wie gross die Tausenderstelle ist.nun muss ich dies modifizieren um die Tausenderstelle wegzubekommen: bin = bin % 1000;
nun geh ich weiter,mach es aber mit der 100 stelle,und dann noch mit 10 und dann bleibt ja nur noch die Einserstelle.
für die Tausender-, Hunderter-, Zehner- und Einserstelle das gesuchte Bitmuster aus der Tabelle "Komponenten" ermitteln und daraus das Gesamtergebnis zusammensetzeb (mehrfaches Shiften und Addieren)ich weiss nur net wie ichs in "Code" ausdrück..
-
Wenn es reicht, dass die Bits für eine Anzeigestelle jeweils in einem char platziert werden, könntest du den folgenden Code nutzen. Du musst aber darauf achten, dass die Funktion der Einfachheit halber die Zahl von der Stelle mit der geringsten Wertigkeit zur Stelle mit der höchsten Wertigkeit abarbeitet, die Werte im Buffer also "verkehrt herum" vorliegen.
// 0 - 01111110 // 1 - 00110000 // 2 - 01101101 // 3 - 01111001 // 4 - 00110011 // 5 - 01011011 // 6 - 01011111 // 7 - 01110000 // 8 - 01111111 // 9 - 01111011 unsigned char bittable[] = {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; size_t intto7seg(unsigned int bin,char *buffer) { size_t len = 0; do { buffer[len++] = bittable[bin % 10]; //Der Wert der letzten Stelle wird als Index der Umsetzungstabelle genutzt bin /= 10; // Ganzzahlige Division, die letzte Stelle wird also "abgeschnitten" } while(bin!=0); return len; } int main() { char *ballo = malloc(20); size_t len = intto7seg(1234567890,ballo); for (size_t i=(len-1);i>=0;i--) { printf("%X ",ballo[i]); } free(ballo); return 0; }