Zwei 7 Segment Displays mit dem Arduino und einem Schieberegister über drei Pins ansteuern

Sieben Segmentanzeigen eignen sich hervorragend zur Darstellung von Zahlen. In der herkömmlichen Verschaltung belegt jedoch schon ein Display acht Datenpins an einem Mikrocontroller. In dieser Anleitung wird gezeigt, wie sich mit nur drei Leitungen zwei Displays über ein SN74HC595N Schieberegister betreiben lassen.

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:

Und diesem Schaltplan:

Code für den Arduino UNO:

#define LATCH 4
#define CLK 3
#define DATA 2

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

byte digitOne[10]= {0x6F, 0x09, 0x73, 0x3B, 0x1D, 0x3E, 0x7C, 0x0B, 0x7F, 0x1F};
byte digitTwo[10]= {0x7B, 0x11, 0x67, 0x37, 0x1D, 0x3E, 0x7C, 0x13, 0x7F, 0x1F};

int i;

void setup(){
  pinMode(LATCH, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
}

void loop(){
  for(int i=0; i<10; i++){
    for(int j=0; j<10; j++){
      digitalWrite(LATCH, LOW);
      shiftOut(DATA, CLK, MSBFIRST, ~digitTwo[i]); // digitTwo
      shiftOut(DATA, CLK, MSBFIRST, ~digitOne[j]); // digitOne
      digitalWrite(LATCH, HIGH);
      delay(500);
    }
  }
}