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 Kommentare 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 ↓

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.