7-Segment-Anzeige

Was ist eine 7-Segment-Anzeige? Wie programmiert man sie? Wie lässt sie sich in Ihr Projekt integrieren?

Einführung

Die 7-Segment-Anzeige ist eine segmentbasierte Anzeigetechnik. Sie wird hauptsächlich zur Anzeige von Zahlen verwendet. Für die Anzeige von Buchstaben eignet sich besser ein LCD-Bildschirm. Die 7-Segment-Anzeige wird häufig in Taschenrechnern und Weckern verwendet.

Die 7-Segment-Anzeige besteht, wie der Name schon sagt, aus 7 Segmenten. Ein Segment ist der Teil der Anzeige, der die Zahl anzeigt. Je nachdem, welche Segmente leuchten, werden die Zahlen angezeigt. Mit dieser Anzeige können Sie die Zahlen von 1 bis 9 anzeigen. Die 7-Segment-Anzeige ist auf 8 Bit kodiert.

Wie werden die Zahlen dargestellt?

  • Das Display

Die Anzeige besteht aus 4 vertikalen und 3 horizontalen Segmenten. Die Segmente sind häufig in Form eines Sechsecks wie hier angeordnet, aber auch Trapeze und Rechtecke sind möglich. Zusätzlich gibt es einen Punkt, der die Anzeige von Dezimalzahlen ermöglicht.

Hier ist die Liste der Zahlen, die auf einer 7-Segment-Anzeige codiert werden können:

Nombre/Segment A B C D E F G Affichage
0 0 0 0 0 0 0 1
1 1 0 0 1 1 1 1
2 0 0 1 0 0 1 0
3 0 0 0 0 1 1 0
4 1 0 0 1 1 0 0
5 0 1 0 0 1 0 0
6 0 1 0 0 0 0 0
7 0 0 0 1 1 1 1
8 0 0 0 0 0 0 0
9 0 0 0 0 1 0 0
  • Die Anzeigestifte

Die mit den Pins verbundenen Buchstaben müssen mit dem 74HC595-Chip verbunden werden. Das – muss mit der Masse der Arduino-Platine verbunden werden.

Hier sehen wir ein Beispiel für den Anschluss einer 7-Segment-Anzeige mit je 6 Pins auf jeder Seite. Buchstaben werden mit dem 74HC595-Chip verbunden, ein Dezimalpin für Zahlen mit Komma. Die Pins D1 bis D3 werden mit der Arduino-Platine verbunden.

  • Der CD4511-Chip

    Der CD4511-Decoder verbindet das Arduino-Board mit der 7-Segment-Anzeige. Er ist in Ihren Schaltungen nicht erforderlich, kann diese aber vereinfachen. Deshalb finden Sie ihn in den Diagrammen dieses Kurses.

Damit können Sie Zahlen auf 7-Segment-Anzeigen anzeigen, ohne den Status jedes einzelnen Segments selbst bestimmen zu müssen. Sie geben den Wert der Ziffer im Binärformat (4 Bit) ein und die Anzeige erfolgt.

Wie Sie sehen, gibt es Buchstaben, die den Verbindungen zur Anzeige entsprechen.

Gemeinsame Kathode oder Anode?

Es gibt zwei Arten von Anzeigen: gemeinsame Anode und gemeinsame Kathode. Wichtig zu wissen: Damit Strom fließen kann, muss zwischen den beiden Pins eine Potentialdifferenz bestehen. Damit beispielsweise eine LED leuchtet, muss die Anode an 5 V und die Kathode an GND angeschlossen sein. Diese Spannungsdifferenz zwischen den beiden Pins erzeugt den Strom.

Genau dasselbe gilt hier.

a) Gemeinsame Anode

Bei dieser Anzeigeart ist die Anode an 5 V angeschlossen. Das bedeutet: Damit Strom fließen kann, müssen die anderen Pins auf Low-Pegel liegen.

b) Gemeinsame Kathode

Bei Anzeigen mit gemeinsamer Kathode ist die Kathode mit Masse verbunden. Das bedeutet: Damit Strom fließen kann, müssen die vom Arduino gesteuerten Pins auf High-Pegel liegen.

Für unsere Schaltungen haben wir 7-Segment-Anzeigen mit gemeinsamer Kathode gewählt.

Zahlen auf einer 7-Segment-Anzeige anzeigen

a) Einfache 7-Segment-Anzeige

Wir sehen uns nun an, wie man eine Zahl auf einer 7-Segment-Anzeige mit gemeinsamer Kathode darstellt.

/* On assigne chaque LED à une broche de l'arduino */unsigned const int A = 13;
unsigned const int B = 12;
unsigned const int C = 11;
unsigned const int D = 10;
unsigned const int E = 9;
unsigned const int F = 8;
unsigned const int G = 7;
unsigned const int H = 6;


void setup(void){
   // définition des broches en sortie
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(H, OUTPUT);
}

//On a ensuite fait différente fonction pour chaque chiffre

void zero() {
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void un() {
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, LOW);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void deux() {
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(G, LOW);
  digitalWrite(H, LOW);
}

void trois() {
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void quatre() {
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, LOW);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void cinq() {
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, LOW);
  digitalWrite(E, LOW);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void six() {
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, LOW);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void sept() {
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, LOW);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void huit() {
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

void neuf() {
  digitalWrite(A, HIGH);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, HIGH);
  digitalWrite(G, HIGH);
  digitalWrite(H, LOW);
}

// On appelle maintenant les fonctions une à une
void loop(void)
{
  zero();
  delay(1000);// pause pour voir le nombre affiché avant de passer au suivant
  
  un();
  delay(1000);
  
  deux();
  delay(1000);
  
  trois();
  delay(1000);
  
  quatre();
  delay(1000);
  
  cinq();
  delay(1000);
  
  six();
  delay(1000);
  
  sept();
  delay(1000);
  
  huit();
  delay(1000);
  
  neuf();
  delay(1000);
}

b) Mit dem CD4511-Chip

Wir betrachten nun die gleiche Schaltung mit dem CD4511-Chip.

const int bit_A = 2;
const int bit_B = 3;
const int bit_C = 4;
const int bit_D = 5;

void setup() {
    // on met les broches en sorties
    pinMode(bit_A, OUTPUT);
    pinMode(bit_B, OUTPUT);
    pinMode(bit_C, OUTPUT);
    pinMode(bit_D, OUTPUT);

    // on commence par écrire le chiffre 0, donc toutes les sorties à l'état bas
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);
}

void loop() {
    char i=0; // variable "compteur"
    for(i=0; i<10; i++) {
        afficher(i); // on appel la fonction d'affichage
        delay(500); // on attend une demi seconde
    }
}

// fonction pour afficher les chiffres
void afficher(char chiffre) {
    // on met à zéro tout les bits du décodeur
    digitalWrite(bit_A, LOW);
    digitalWrite(bit_B, LOW);
    digitalWrite(bit_C, LOW);
    digitalWrite(bit_D, LOW);

    // On allume les bits nécessaires
    if(chiffre >= 8){
        digitalWrite(bit_D, HIGH);
        chiffre = chiffre - 8;
    }
    if(chiffre >= 4){
        digitalWrite(bit_C, HIGH);
        chiffre = chiffre - 4;
    }
    if(chiffre >= 2){
        digitalWrite(bit_B, HIGH);
        chiffre = chiffre - 2;
    }
    if(chiffre >= 1){
        digitalWrite(bit_A, HIGH);
        chiffre = chiffre - 1;
    }
}

4 7-Segment-Anzeigen

Wir schauen uns nun die einfache 4-stellige 7-Segment-Anzeige an:

Um den folgenden Code auszuführen, benötigen Sie eine Bibliothek für die 7-Segment-Anzeige: site.

Zur Installation empfehlen wir unseren Kurs zu Bibliotheken.

#include "SevSeg.h" // La librairie 7 segments
SevSeg sept_segments; // On appel la librairie

void setup(){
  byte nombre_chiffre_7_segments = 4; // Nombre de digit de votre 7 segments
  // Les broches de votre 7 segments
  byte Broche_pins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};

  bool resistance_sur_Segments = true; // On applique une résistance sur chaque segment 
  bool pause_entre_mise_a_jour = true; // On fait une mini pause entre chaque segment
  byte configuration_materiel = COMMON_CATHODE; // On fait un 7 segments a cathode commune
  sept_segments.begin(configuration_materiel, nombre_chiffre_7_segments, Broche_pins, segmentPins, resistance_sur_Segments); // On initialize l'afficheur 7 segments
  sept_segments.setBrightness(90); // On initialize la luminosité de l'afficheur
}

void loop(){
    sept_segments.setNumber(16); // On assigne le nombre 16 à l'afficheur 7 segments
    sept_segments.refreshDisplay(); // On rafraichit l'affichage pour que le nouveau nombre soit pris en compte
}

Mit diesem Programm zeigen Sie die Zahl 16 an. Sie können dies jedoch ändern, indem Sie Zeile 18 des Codes ändern.