Le compteur BCD (Binary Coded Decimal) est un dispositif électronique qui permet de compter des valeurs numériques. Il est composé de 8 LEDs (Light Emitting Diodes) qui sont utilisées pour afficher des valeurs numériques. Les 8 LEDs sont disposées en forme de chiffres binaires, ce qui permet de compter jusqu’à 9. Dans cet article, nous allons examiner en détail le fonctionnement des 8 LEDs en compteur BCD et leurs applications.
8 LEDs en Compteur BCD
1. Présentation
Ce programme réalise un affichage en compteur BCD sur 8 LEDs : chaque groupe de 4 LED compte de 0 à 9. Chaque LED visualise directement l’état d’un bit de l’octet utilisé pour le comptage de chaque groupe BCD. Ce programme est à visée purement didactique afin de comprendre ce qui se passe à l’intérieur d’un octet du microcontrôleur lorsque l’on réalise un comptage BCD.
2. Note théorique
Pour des raisons techniques, on utilise pour l’affichage sur digits un comptage dit « BCD » qui est en fait un comptage binaire tronqué, de 0 à 9 selon :
Décimal | Binaire |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
0 | 0000 |
1 | 0001 |
- Remarquer que si on ajoute 1 à un compteur BCD dont la valeur est 9, sa valeur passe à 0.
- Concernant le comptage BCD voir : http://fr.wikipedia.org/wiki/Binary_coded_decimal
3. Matériel Nécessaire
3.1 L’espace de développement Arduino
- … pour éditer, compiler le programme et programmer la carte Arduino.

3.2 Le matériel suivant pour réaliser le montage associé
- une plaque d’essai pour montage sans soudures,

- des straps,

- 4 LEDs rouge 5mm,




- 4 LEDs vertes 5mm,




- 8 résistances 1/4w de 270 Ohms,








4. Instructions de montage
- Connecter sur la broche 4 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 5 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 6 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 7 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 8 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 9 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 10 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
- Connecter sur la broche 11 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
5. Le schéma théorique du montage

Le schéma théorique du montage
6. Le circuit du montage

Le schéma du montage à réaliser
7. Explication du programme
7.1 Structure globale du programme
Ce programme simple comprend :
- une entête déclarative
- une partie « configuration » qui ne sera exécutée qu’une fois (fonction setup( ) )
- une partie constituée d’une boucle sans fin que le programme répètera à l’infini ( fonction loop( ) ) : c’est le coeur du programme.
7.2 Déroulement du programme
Le programme se déroule de la façon suivante :
- Après avoir pris en compte les instructions de la partie déclarative,
- puis après avoir exécuté la partie configuration ( fonction setup( ) ),
- le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme
8. Au niveau de la partie déclarative :
Déclaration des constantes de broches
- Déclaration des constantes pour les broches utilisées dans le programme : on déclare ici un tableau de constantes dont chaque valeur correspond aux broches utilisées.
Il est pratique d’utiliser un tableau dès lors que l’on va utiliser une action répétée sur plusieurs broches. Chaque broche sera ainsi accessible à l’aide de l’index du tableau, avec l’index 0 pour la première valeur. Un truc de programmation qui vous fera écrire des programmes propres.
const int LED[8]={4,5,6,7,8,9,10,11}; // déclare un tableau de 8 constantes de broches // la broche 4 correspond au bit de poids faible (index 0 du tableau) // la broche 11 correspond au bit de poids fort (index 8 du tableau)
Déclaration des variables globales
- Déclaration des variables globales du programmes : on déclare une variable pour le comptage.
int compteur1=0; //variable de comptage BCD n°1 int compteur2=0; //variable de comptage BCD n°2
Déclarations des objets utiles pour les fonctionnalités utilisées
- Déclaration des objets utiles pour les fonctionnalités utilisées :
9. Au niveau de la fonction d’initialisation setup( ) :
configuration des broches utilisées :
- Configuration des broches en sortie : on met les 8 broches en sortie à l’aide d’une boucle for :
// met les 8 broches en sortie for (int i=0; i<=7; i++) { // boucle de défilement des 8 broches pinMode(LED[i], OUTPUT); //met la broche en sortie }
10. Au niveau de la boucle principale, la fonction loop ( ) :
- Au sein d’une boucle, on passe en revue les 4 bits de la variable de comptage n°1 à l’aide de l’instruction bitRead et on met la broche correspondante dans le même état à l’aide de l’instruction digitalWrite. On fait la même chose pour la variable de comptage n°2.
for (int i=0; i<=3; i++) { // boucle de défilement des 4 bits BCD de poids faible // met la broche LED[i] dans l'état du bit de rang i de la variable compteur 1 digitalWrite(LED[i],bitRead(compteur1,i)); } for (int j=4; j<=7; j++) { // boucle de défilement des 4 bits BCD de poids fort // met la broche LED[j] dans l'état du bit de rang j-4 de la variable compteur 2 digitalWrite(LED[j],bitRead(compteur2,j-4)); }
- On incrémente la variable de comptage n°1, que l’on remet à 0 lorsqu’elle vaut 9, ce qui correspond au comportement d’un comptage BCD. On incrémente le compteur n°2 à chaque remise à zéro du compteur n°1. On met à 0 le compteur n°2 lorsqu’il vaut 10.
- Une instruction delay vient assurer un pause entre chaque incrémentation.
- L’ensemble aboutit à un comptage BCD de 0 à 9 sur chaque groupe de 4 bits.
// --- chaque compteur compte de 0 à 9 puis RAZ --- compteur1=compteur1+1; //incrémente le 1er compteur if (compteur1==10) { compteur1=0; // RAZ compteur n°1 compteur2=compteur2+1; // incrémente compteur n°2 if (compteur2==10) compteur2=0; // RAZ compteur 2 } delay (250); // pause fixant la vitesse du comptage
- Le programme recommence en boucle les instructions de la fonction loop( ).
Se reporter aux commentaires présents dans le programme pour plus de détails.
11. Mise en oeuvre du programme
11.1 Préparation du montage et programmation de la carte Arduino :
- Commencer par réaliser le montage indiqué sur plaque d’expérimentation
- Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle
11.2 Fonctionnement
- Les LEDs affichent un comptage BCD (soit de 0000 à 1001) sur chaque groupe de 4 bits.
12. Le programme complet en langage Arduino :
A copier/coller directement dans l’éditeur Arduino
// --- Programme Arduino --- // Copyright X. HINAULT - Créé le 08/05/2010 // www.mon-club-elec.fr // Code sous licence GNU GPL : // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // // --- Que fait ce programme ? --- /* 8 LEDs en compteur BCD à à 99 . */ // --- Fonctionnalités utilisées --- // --- Circuit à réaliser --- // Connecter sur la broche 4 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 5 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 6 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 7 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 8 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 9 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 10 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V // Connecter sur la broche 11 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V //**************** Entête déclarative ******* // A ce niveau sont déclarées les librairies incluses, les constantes, les variables... // --- Inclusion des librairies utilisées --- // --- Déclaration des constantes --- // --- constantes des broches --- const int LED[8]={4,5,6,7,8,9,10,11}; // déclare un tableau de 8 constantes de broches // la broche 4 correspond au bit de poids faible (index 0 du tableau) // la broche 11 correspond au bit de poids fort (index 8 du tableau) // --- Déclaration des variables globales --- int compteur1=0; //variable de comptage BCD n°1 int compteur2=0; //variable de comptage BCD n°2 // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- //**************** FONCTION SETUP = Code d'initialisation ***** // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme void setup() { // debut de la fonction setup() // --- ici instructions à exécuter au démarrage --- // ------- Broches en sortie ------- // met les 8 broches en sortie for (int i=0; i<=7; i++) { // boucle de défilement des 8 broches pinMode(LED[i], OUTPUT); //met la broche en sortie } } // fin de la fonction setup() // ******************************************************************************** //*************** FONCTION LOOP = Boucle sans fin = coeur du programme ************* // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension void loop(){ // debut de la fonction loop() for (int i=0; i<=3; i++) { // boucle de défilement des 4 bits BCD de poids faible // met la broche LED[i] dans l'état du bit de rang i de la variable compteur 1 digitalWrite(LED[i],bitRead(compteur1,i)); } for (int j=4; j<=7; j++) { // boucle de défilement des 4 bits BCD de poids fort // met la broche LED[j] dans l'état du bit de rang j-4 de la variable compteur 2 digitalWrite(LED[j],bitRead(compteur2,j-4)); } // --- chaque compteur compte de 0 à 9 puis RAZ --- compteur1=compteur1+1; //incrémente le 1er compteur if (compteur1==10) { compteur1=0; // RAZ compteur n°1 compteur2=compteur2+1; // incrémente compteur n°2 if (compteur2==10) compteur2=0; // RAZ compteur 2 } delay (250); // pause fixant la vitesse du comptage } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // ******************************************************************************** //*************** Autres Fonctions du programme ************* // --- Fin programme ---
Articles similaires:
- 8 LEDs en Compteur binaire
- Jeux de lumières sur 8 LEDs
- Tester les segments d’un digit à cathode commune
- Afficher les chiffres 0 à 9 sur un digit à cathode commune
- Les feux de circulation (6 Leds)
Articles Liés
- Faire clignoter une LED
Le clignotement d'une LED est un moyen simple et efficace pour ajouter une touche de…
- Les feux de circulation (6 Leds)
Les feux de circulation sont des dispositifs de signalisation routière qui permettent aux conducteurs de…
- Simulateur d'un compteur de "pompe à essence"
Le simulateur d'un compteur de "pompe à essence" est un outil pratique qui permet aux…