Utiliser un afficheur 7 segments : afficher des nombres avec Arduino, anode ou cathode commune
Comment fonctionne un afficheur 7 segments ? Lettres des segments (a–g, dp), cathode et anode communes, brochage et résistances, code pour compter de 0 à 9, afficheurs à 4 chiffres et multiplexage, module TM1637, ESP32 et Pico.
Un afficheur 7 segments est un indicateur simple composé de sept LED en forme de barre disposées comme le chiffre « 8 », plus un petit point. On le trouve sur les horloges numériques, les minuteurs de micro-ondes, les tableaux de score et les pompes à essence. Il est bon marché, très lumineux et se lit facilement de loin. Dans les projets Arduino, c'est l'une des sorties classiques pour réaliser compteurs, dés, chronomètres et horloges.

Comment fonctionne un afficheur 7 segments ?
Les segments portent des lettres : on commence par a en haut puis, dans le sens horaire, b (en haut à droite), c (en bas à droite), d (en bas), e (en bas à gauche) et f (en haut à gauche) ; la barre du milieu est g et le point dp. Chaque segment est en fait une LED distincte, et selon ceux qui s'allument, on forme les différents chiffres. Pour le « 1 », par exemple, seuls b et c s'allument ; pour le « 8 », les sept.
| Chiffre | Segments allumés |
|---|---|
| 0 | a, b, c, d, e, f |
| 1 | b, c |
| 2 | a, b, d, e, g |
| 3 | a, b, c, d, g |
| 4 | b, c, f, g |
| 5 | a, c, d, f, g |
| 6 | a, c, d, e, f, g |
| 7 | a, b, c |
| 8 | a, b, c, d, e, f, g |
| 9 | a, b, c, d, f, g |
Cathode commune ou anode commune ?
Comme sur une LED RGB, une extrémité de tous les segments est reliée à une broche commune. Sur un afficheur à cathode commune, la broche commune va à GND et un segment s'allume quand on lui envoie HIGH. Sur un afficheur à anode commune, la broche commune va au 5V et le segment s'allume avec LOW. De l'extérieur, ils sont identiques ; pour savoir lequel tu as, relie la broche commune à GND et touche le 5V avec une broche de segment via une résistance de 220 Ω. Si le segment s'allume, c'est une cathode commune ; sinon, inverse le branchement et réessaie.
| Caractéristique | Cathode commune (CC) | Anode commune (CA) |
|---|---|---|
| Broche commune (3 et 8) | GND | 5V |
| Pour allumer un segment | HIGH | LOW |
| Dans le code | digitalWrite(pin, allumé) | digitalWrite(pin, !allumé) |
Brochage et câblage sur Arduino
Sur les afficheurs courants à un chiffre et 10 broches, face avant tournée vers toi, les broches sont numérotées dans le sens antihoraire en partant d'en bas à gauche. Les deux broches centrales (3 et 8) sont la borne commune et sont reliées à l'intérieur. Le tableau indique les broches de l'afficheur et celles de l'Arduino utilisées par le code de cet article :
| Broche de l'afficheur | Segment | Broche Arduino |
|---|---|---|
| 7 | a | D2 |
| 6 | b | D3 |
| 4 | c | D4 |
| 2 | d | D5 |
| 1 | e | D6 |
| 9 | f | D7 |
| 10 | g | D8 |
| 5 | dp | D9 |
| 3 et 8 | Commune | GND (cathode commune) ou 5V (anode commune) |
Compter de 0 à 9 avec Arduino
Mémoriser dans un tableau, sous forme de bits, les segments allumés pour chaque chiffre raccourcit beaucoup le code. Dans l'exemple ci-dessous, le bit de gauche de chaque octet correspond au segment a et celui de droite au segment g. La fonction showDigit() lit ces bits un à un et les écrit sur les broches ; si ton afficheur est à anode commune, il suffit de passer COMMON_ANODE à true.
1const int SEG_PINS[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
2const bool COMMON_ANODE = false; // ortak anotsa true / true for common anode
3
4// her rakam için a–g segmentleri (1 = yanar) / a–g segments per digit (1 = on)
5const byte DIGITS[10] = {
6 0b1111110, // 0
7 0b0110000, // 1
8 0b1101101, // 2
9 0b1111001, // 3
10 0b0110011, // 4
11 0b1011011, // 5
12 0b1011111, // 6
13 0b1110000, // 7
14 0b1111111, // 8
15 0b1111011 // 9
16};
17
18void showDigit(int n) {
19 for (int i = 0; i < 7; i++) {
20 bool on = DIGITS[n] & (1 << (6 - i)); // a en soldaki bit / a is the leftmost bit
21 digitalWrite(SEG_PINS[i], COMMON_ANODE ? !on : on);
22 }
23}
24
25void setup() {
26 for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
27}
28
29void loop() {
30 for (int n = 0; n <= 9; n++) {
31 showDigit(n);
32 delay(1000);
33 }
34}Afficheur à 4 chiffres et multiplexage

Un afficheur à quatre chiffres n'a pas 32 broches de segments, mais seulement 12 broches : 8 lignes de segments (a–g et dp) partagées par tous les chiffres et 4 broches qui choisissent quel chiffre s'allume. Comme les lignes de segments sont partagées, on ne peut pas afficher des chiffres différents sur chaque position au même instant. La solution, c'est le multiplexage : on allume seulement le 1er chiffre quelques millisecondes, puis le 2e, le 3e et le 4e. Quand ce cycle se répète plus de 50 fois par seconde, l'œil voit les quatre chiffres allumés en même temps. Plutôt que d'écrire ce balayage à la main, il est bien plus simple d'utiliser la bibliothèque SevSeg :
1#include "SevSeg.h"
2
3SevSeg sevseg;
4
5void setup() {
6 byte digitPins[] = {2, 3, 4, 5}; // hane seçme pinleri / digit select pins
7 byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // a, b, c, d, e, f, g, dp
8 sevseg.begin(COMMON_CATHODE, 4, digitPins, segmentPins, true); // dirençler segmentlerde / resistors on segments
9 sevseg.setBrightness(90);
10}
11
12void loop() {
13 sevseg.setNumber(millis() / 1000); // geçen saniye / elapsed seconds
14 sevseg.refreshDisplay(); // sürekli çağrılmalı / must be called continuously
15}Le module TM1637 : 4 chiffres avec seulement 2 fils

Si 12 fils et un balayage permanent te semblent fastidieux, le module TM1637 est fait pour toi. Sa puce de commande gère elle-même le multiplexage ; l'Arduino lui indique seulement quel nombre afficher via les broches CLK et DIO. La plupart des versions ont aussi deux points (:) au milieu pour faire des horloges. Installe la bibliothèque TM1637 d'Avishay Orpaz depuis le gestionnaire de bibliothèques ; le code ci-dessous affiche minutes et secondes avec les deux points :
1#include <TM1637Display.h>
2
3TM1637Display display(2, 3); // CLK, DIO
4
5void setup() {
6 display.setBrightness(5); // 0–7
7}
8
9void loop() {
10 int minutes = (millis() / 60000) % 60;
11 int seconds = (millis() / 1000) % 60;
12 // ortadaki iki noktayla dakika:saniye / minutes:seconds with the colon
13 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
14 delay(200);
15}Afficheur 7 segments avec l'ESP32 et le Raspberry Pi Pico
Tu peux brancher un afficheur à un chiffre directement sur un ESP32 ou un Pico ; comme les broches délivrent 3,3 V, les segments éclairent un peu moins, alors utilise des résistances plus faibles, de 100 à 150 Ω. Le module TM1637 fonctionne aussi en 3,3 V et s'utilise sur l'ESP32 avec la même bibliothèque Arduino. Pour MicroPython sur le Pico, il suffit de copier le fichier tm1637.py (la bibliothèque de mcauser) sur le Pico :
1import tm1637
2from machine import Pin
3import time
4
5tm = tm1637.TM1637(clk=Pin(16), dio=Pin(17)) # tm1637.py Pico'da olmalı / tm1637.py must be on the Pico
6tm.brightness(4) # 0–7
7
8count = 0
9while True:
10 tm.number(count) # -999 … 9999
11 count += 1
12 time.sleep(1)7 segments, LCD ou OLED ?
| Caractéristique | 7 segments | LCD 16x2 | OLED |
|---|---|---|---|
| Ce qu'il affiche | Chiffres et quelques lettres | Lettres, chiffres, caractères personnalisés | Texte, graphiques, icônes |
| Lisibilité | Très lumineux, lisible de loin | Bonne avec le rétroéclairage | Très contrasté mais petit |
| Broches nécessaires | 8 ou plus (2 avec un TM1637) | 2 (I2C) | 2 (I2C) |
| Idéal pour | Horloges, compteurs, tableaux de score | Menus, texte de mesures | Graphiques, icônes, petits appareils |
Si tu dois seulement afficher des nombres et que la lisibilité à distance compte, l'afficheur 7 segments est imbattable. Pour du texte, des unités et des menus, jette un œil à Utiliser un écran LCD I2C.
Idées de projets avec un afficheur 7 segments
- Dé électronique : affiche un nombre au hasard entre 1 et 6 à l'appui sur un bouton.
- Compteur à boutons : un compteur qui augmente avec un bouton et se remet à zéro avec un autre.
- Horloge numérique : une horloge avec TM1637 et module RTC qui garde l'heure même en cas de coupure de courant.
- Compte à rebours : un minuteur réglable pour les jeux de société ou les expériences.
- Affichage de température : montre en grands chiffres la température mesurée par un DHT11.
- Test de réflexes : affiche en millisecondes la rapidité avec laquelle tu appuies sur le bouton après l'allumage d'une LED.
Erreurs fréquentes et solutions
- Aucun segment ne s'allume : la broche commune est mal reliée ; tu as peut-être branché à GND un afficheur à anode commune.
- Les chiffres s'affichent mal : la correspondance entre segments et broches Arduino est fausse ; vérifie en allumant chaque segment séparément.
- Certains chiffres sont faibles : une seule résistance est placée sur la broche commune ; utilise une résistance par segment.
- Sur un 4 chiffres, un seul chiffre s'allume ou tout scintille : il y a un delay() dans loop(), ou le balayage n'est pas assez fréquent.
- Les segments qui devraient s'allumer sont éteints et les autres allumés : anode et cathode communes ont été confondues ; change COMMON_ANODE.
- Pas assez de broches : réduis le nombre de broches avec un module TM1637, un driver MAX7219 ou un registre à décalage 74HC595.
Savoir que chaque segment est en réalité une LED, c'est la clé pour comprendre les afficheurs 7 segments ; pour les bases, jette un œil à Qu'est-ce qu'une LED ? Dans l'application BlueGrays, tu trouveras des projets de comptage de 0 à 9, compteur à bouton, dé, horloge numérique à 4 chiffres et animation de bombe, pas à pas avec schémas et code.
Questions fréquentes
Quelle résistance utiliser avec un afficheur 7 segments ?
Sous 5 V, 220 à 330 Ω par segment conviennent ; 220 Ω donne plus de lumière, 330 Ω consomme moins. Sur les cartes en 3,3 V comme l'ESP32 et le Pico, tu peux utiliser 100 à 150 Ω. Place les résistances sur chaque ligne de segment séparément, pas sur la broche commune.
Comment savoir si mon afficheur 7 segments est à anode ou à cathode commune ?
Relie la broche commune (3 ou 8) à GND et touche le 5V avec une broche de segment via 220 Ω ; si le segment s'allume, c'est une cathode commune. Sinon, relie la broche commune au 5V et la broche de segment à GND via la résistance ; s'il s'allume maintenant, c'est une anode commune. La référence du composant indique aussi souvent CC ou CA.
Combien de broches a un afficheur 7 segments ?
Les afficheurs à un chiffre ont 10 broches : 7 segments, 1 point et 2 broches communes. Les afficheurs à quatre chiffres en ont 12 : 8 lignes de segments partagées et 4 broches de sélection. Les modules comme le TM1637 se branchent avec seulement 4 broches (CLK, DIO, VCC, GND).
Pourquoi un seul chiffre s'allume-t-il sur mon afficheur à 4 chiffres ?
Les afficheurs à quatre chiffres fonctionnent par multiplexage : les chiffres doivent être balayés l'un après l'autre en permanence. Si tu utilises delay() dans loop(), le balayage s'arrête et seul le dernier chiffre reste allumé. Utilise une bibliothèque comme SevSeg, appelle refreshDisplay() en continu et gère le temps avec millis().
Peut-on afficher des lettres sur un afficheur 7 segments ?
Certaines, oui : A, b, C, d, E, F, H, L, P, U et o restent reconnaissables. Des lettres comme K, M, W et X ne peuvent pas être dessinées correctement avec sept segments. Pour afficher du texte, un écran LCD ou OLED convient mieux.
Comment piloter un afficheur 7 segments avec moins de broches ?
Le plus simple est un module avec puce de commande : le TM1637 pilote quatre chiffres avec 2 fils et le MAX7219 huit chiffres avec 3. Si tu veux faire ton propre montage, un registre à décalage 74HC595 permet de commander 8 segments avec seulement 3 broches de l'Arduino.
Projets à réaliser après cet article
Voir tous les projets
Impression des chiffres de 0 à 9 avec un affichage à 7 segments
Projet montrant les nombres de 0 à 9 en séquence sur un écran à 7 segments. Il enseigne la logique de la création de nombres en contrôlant les broches des segments.

Impression des nombres de 0 à 99 avec un affichage à 7 segments
Projet montrant les nombres de 0 à 99 avec un affichage à deux chiffres sur 7 segments. Il enseigne les opérations sur les bits (bitRead) et la logique de décomposition des chiffres de 10.

Afficheur et compteur à 7 segments avec bouton
Projet de compteur qui augmente, diminue et remet à zéro le nombre sur l'affichage à 7 segments à l'aide de 3 boutons. Enseigne le contrôle des limites et la logique des compteurs interactifs pour l'u

Projet Dice
Projet de dé qui génère un nombre aléatoire entre 1 et 6 à chaque pression sur le bouton et l'affiche sur un écran à 7 segments. Grâce au mécanisme de rebond, un seul résultat est produit en une seule

Impression des numéros 0-9999 sur l'écran à 4 7 segments
Projet qui affiche les nombres de 0 à 9999 sur un écran à 4 7 segments avec la bibliothèque SevSeg. Il enseigne la logique de l'affichage à plusieurs chiffres avec la méthode de multiplexage (balayage

Horloge digitale avec affichage 4 7 segments
Projet d'horloge numérique affichant les heures et les minutes avec le module RTC DS1302 et l'affichage 4 segments 7 segments. Il combine les données de l'horloge en temps réel et l'affichage des segm

Animation de la bombe avec 4 7 segments d'affichage
Projet d'animation à la bombe qui effectue un compte à rebours sur un écran à 4 7 segments, qui peut être accéléré à l'aide d'un potentiomètre et annulé à l'aide de boutons. Enseigne l'utilisation du

ESP32 TM1637 Affichage à 7 segments à 4 chiffres
Nous contrôlons un module d'affichage à 7 segments à 4 chiffres équipé d'un pilote TM1637 à l'aide d'un ESP32. En utilisant seulement 2 GPIO (CLK et DIO), nous faisons fonctionner un compteur de 0 à 9999, réglons le niveau de luminosité et affichons le caractère « : » au milieu sous forme d'horloge. Grâce à la bibliothèque TM1637Display, le contrôle des nombres, des valeurs hexadécimales, des segments et des chaînes de caractères est très simple.
Autres articles
Découvre les segments et le brochage d'un afficheur 7 segments, apprends à distinguer anode et cathode communes, à compter de 0 à 9 avec Arduino, à multiplexer un afficheur à 4 chiffres et à faire une horloge à deux fils avec un TM1637.

