Ein Sieben-Segment Display direkt mit dem Arduino ansteuern

7-Segmentanzeigen werden häufig eingesetzt um Zähler. Uhrzeiten oder Zahlen darzustellen. Wie man die Anzeige direkt über den Arduino UNO zur Darstellung von Zahlen nutzen kann wird im folgenden beschrieben. Die einzelnen LED-Segmente müssen bei 5V mit Vowiderständen zwischen 180 Ohm bis 1kOhm betrieben werden. Die Segmentanzeigen existieren in zwei Bauarten, (gemeinsame Anode und gemeinsame Kathode). Hier wird die Variante mit der gemeinsamen Kathode (GND) verwendet. Der Aufbau der Segmentanzeige ist dabei wie folgt:

Für die darzustellenden Zahlen ergibt sich dabei folgende Codierung der LEDs:

Aktive Segmente (mit Pin) aktive Pincodierung
als Hexwert
Darzustellende Zahl Dot(5) A(7) B(6) C(4) D(2) E(1) F(9) G(10)
0 0 1 1 1 1 1 1 0 7E
1 0 0 1 1 0 0 0 0 30
2 0 1 1 0 1 1 0 1 6D
3 0 1 1 1 1 0 0 1 79
4 0 0 1 1 0 0 1 1 33
5 0 1 0 1 1 0 1 1 5B
6 0 1 0 1 1 1 1 1 5F
7 0 1 1 1 0 0 0 0 70
8 0 1 1 1 1 1 1 1 7F
9 0 1 1 1 1 0 1 1 7B
Punkt 1 0 0 0 0 0 0 0 80

Die Verschaltung mit dem Arduino UNO ist dabei wie abgebildet vorzunehmen:

Pins des 7 Segment Dispaly Pins Arduino Kabelfarbe
1(E) 6 orange
2(D) 5 grün
3,8(GND) GND schwarz
4(C) 4 gelb
5(Punkt) 9 grau
6(B) 3 blau
7(A) 2 lila
9(F) 7 pink
10(G) 8 braun

Code für den Arduino UNO:

// Array zur Ablage der Zahlencoierung für die LED-Beschaltung

int num_array[11][8] = {  { 1,1,1,1,1,1,0,0 },  // 0
                          { 0,1,1,0,0,0,0,0 },  // 1
                          { 1,1,0,1,1,0,1,0 },  // 2
                          { 1,1,1,1,0,0,1,0 },  // 3
                          { 0,1,1,0,0,1,1,0 },  // 4
                          { 1,0,1,1,0,1,1,0 },  // 5
                          { 1,0,1,1,1,1,1,0 },  // 6
                          { 1,1,1,0,0,0,0,0 },  // 7
                          { 1,1,1,1,1,1,1,0 },  // 8
                          { 1,1,1,0,0,1,1,0 },  // 9
                          { 0,0,0,0,0,0,0,1}};  // Punkt
                   
                                       
void Num_Write(int);

void setup() 
{ 
  pinMode(2, OUTPUT);   
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop() 
{
  for (int counter = 10; counter > 0; --counter) // Die Darstellung des Punktes counter auf 11 setzen 
  {
   delay(1000);
   Num_Write(counter-1); 
  }
  delay(3000);
}

// Diese Funktion steuert die jeweis für die Nummer benötigten Pins an 
void Num_Write(int number) 
{
  int pin= 2;
  for (int j=0; j < 8; j++) {
   digitalWrite(pin, num_array[number][j]);
   pin++;
  }
}

Alternativ ist in dieser Anleitung beschrieben, wie man mit einem Schieberegister pins zur Ansteuerung der Segmente einsparen kann.