Forum: Mikrocontroller und Digitale Elektronik dezimal to 7 Segment Funktion Problem


von Jonas E. (joenten)


Lesenswert?

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"

von Thomas B. (nichtessbar)


Lesenswert?

ohne die Defines und den Anschluss der SSG wird dir keiner helfen 
können...

Falls du das Programm noch verbessern willst: SSG-Werte in einem Array 
ablegen und dann nur noch über ssgWert[dezimalwert] zugreifen.

Sparst dir das if-Zeugs

von Lukas K. (carrotindustries)


Lesenswert?

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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.