dezimal to 7 Segment Funktion Problem

OP #2622240
Hallo zusammen,
ich habe folgendes Problem.
Ich hab mir für meine 7 Segment Anzeige eine Funktion mit if-ANweisungen 
geschrieben, mit der ich mein eine Dezimalezahl in den Wert umwandeln 
kann den ich für meine 7-Segment-Anzeige braucht.
Das funktioniert auch wunderbar mit allen Zahlen, außer mit der 0.
Kann mir da jemand helfen.

1
int ausgabebin, ausgabe7seg;      //deklaration der Variablen ausgabebin und ausgabe7seg
2

3
void bin2seg(void);            //deklaration bin2seg
4

5
void bin2seg(void)            //definiert bin2seg Funktion
6
{
7
  if (ausgabebin == 0x0)
8
    {
9
      ausgabe7seg = SEG7_0;
10
    }
11
  if (ausgabebin == 0x1)
12
    {
13
      ausgabe7seg = SEG7_1;
14
    }
15
  if (ausgabebin == 0x2)
16
    {
17
      ausgabe7seg = SEG7_2;
18
    }
19
  if (ausgabebin == 0x3)
20
    {
21
      ausgabe7seg = SEG7_3;
22
    }
23
  if (ausgabebin == 0x4)
24
    {
25
      ausgabe7seg = SEG7_4;
26
    }  
27
  if (ausgabebin == 0x5)
28
    {
29
      ausgabe7seg = SEG7_5;
30
    }  
31
  if (ausgabebin == 0x6)
32
    {
33
      ausgabe7seg = SEG7_6;
34
    }
35
  if (ausgabebin == 0x7)
36
    {
37
      ausgabe7seg = SEG7_7;
38
    }
39
  if (ausgabebin == 0x8)
40
    {
41
      ausgabe7seg = SEG7_8;
42
    }
43
  if (ausgabebin == 0x9)
44
    {
45
      ausgabe7seg = SEG7_9;
46
    }
47
}
48

49
//Ich schreibe dann den Dezimalenwert in "ausgabebin" und nach dem Ausführen der Funktion hab ich dann den passenden Wert in "ausgabe7bin"
Dass Funktionen Parameter und Rückgabewerte haben, weißt du schon?
uint8_t bin2seg(uint8_t bin) wäre eine sinnvolle Deklaration.

Jonas Enderlin schrieb:
> Das funktioniert auch wunderbar mit allen Zahlen, außer mit der 0.
Was heißt hier 'funktioniert nicht' genau?

So oder so solltest du den Ansatz überdenken. Ich denke mal, wir 
befinden uns auf einem AVR.
Mach' ein array im Programmspeicher.
1
const PROGMEM uint8_t  segs[] = {SEG7_0, SEG7_1, .... ,SEG7_9};

dann reduziert sich deine bin2seg-Funktion auf;
1
uint8_t bin2seg(uint8_t bin) {
2
 return pgm_read_byte(&segs[bin]);
3
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.