Eine 7-Segment Anzeige direkt vom Arduino ansteuern

Die 7-Segmentanzeige soll direkt vom Arduino Uno angesteuert werden.

Dazu werden die einzelnen Segmente jeweils mit einem 200 Ohm Widerstand an die digitalen Ausgänge D2 bis D9 des Arduino angeschlossen.

Die 7-Segment Anzeige besteht aus 7 Dioden a-g und einer Diode für den Punkt h. Die Segmente sind so angeordnet:

7 Segmente

Die einzelnen Segment werden mit je einem 200 Ohm Widerstand an die folgenden digitalen Ausgänge des Arduino angeschlossen:

a > D2
b > D3
c > D4
d > D5
e > D6
f > D7
g > D8
h > D9 (zusätzlich ein Punkt unten rechts)
Die beiden gemeinsamen Kathoden Pins werden an GND gelegt.

Der Aufbau

7 Segment Anzeige

Bei der Ziffer 0 sollen die Segmente a-f leuchten und die Segmente g und h sollen aus sein. Das lässt sich in 8 Bit binär darstellen als 11111100 und entsprechend in einem byte Array für alle 10 Ziffern von 0 bis 9 ablegen.

//            0           1          2          3          4          5          6          7          8          9
byte z[10]={B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110}; 

Dann werden die Pins 2 bis 9 als Ausgänge geschaltet.

void setup() {
  for (int i=2; i <= 9; i++) // 2-9 sind Ausgänge
    pinMode(i,OUTPUT);
}

Die Segmente werden angesteuert indem n bitweise UND verknüpft wird. Wenn das Ergebnis größer als 0 ist, muss dieses Segment leuchten, ansonsten muss es aus sein. Danach wird n um eine Stelle nach links verschoben. Dann kann die selbe Routine prüfen ob das nächste Segment an sein soll oder nicht. Nach 8 Durchläufen sind alle Segmente im richtigen Zustand, das heisst alle Pins 2 bis 9 sind dann richtig geschaltet.

void segmente(byte n) {
// alle 7 Segmente ansteuern

  for(int k=2; k <= 9; k++) {
    if((n & B10000000) > 0)
      digitalWrite(k, HIGH);
    else 
      digitalWrite(k, LOW);
    n = n << 1;
  }  
}

Und hier nun das komplette Programm.

// Eine 7-Segment Anzeige ansteuern
//
// Matthias Busse Version 1.0 vom 30.11.2014

// 7-Segment a-f und der Punk h
//  -a-
// f   b
//  -g-
// e   c
//  -d-   h

// a > D2
// b > D3
// c > D4
// d > D5
// e > D6
// f > D7
// g > D8
// h > D9 

//            0           1          2          3          4          5          6          7          8          9
byte z[10]={B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110}; 

void setup() {
  for (int i=2; i <= 9; i++) // 2-9 sind Ausgänge
    pinMode(i,OUTPUT);
}

void loop() {
  for(int j=0; j <= 9; j++) {
    segmente(z[j]);
    delay(1000);
  }
}

void segmente(byte n) {
// alle 7 Segmente ansteuern

  for(int k=2; k <= 9; k++) {
    if((n & B10000000) > 0)
      digitalWrite(k, HIGH);
    else 
      digitalWrite(k, LOW);
    n = n << 1;
  }  
}

Weitere Infos zu Segmentanzeigen.

von Matthias Busse

2 Gedanken zu „Eine 7-Segment Anzeige direkt vom Arduino ansteuern

  1. HUZEtm

    Sehr Gut erklärt! Allerdings ist der Binärcode bei meinem Arduino Negativ!!! das bedeutet 0=1 und 1=0… hat etwas gedauert bis ich darauf gekommen bin hab es aber trotzdem hin bekommen und einen schönen Countdown Sketch basierend auf dieser Grundlage geschrieben! Vielen Dank!!! Weiter so!

    Antworten
    1. admin Beitragsautor

      Dann sind Deine LEDs anders verschaltet. Er gibt die 7-Segment Anzeigen mit gemeinsamer Anode (+) oder gemeinsamer Kathode (-).

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.