Note
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !
1.1.4 Afficheur à 7 segments
Introduction
Essayons de piloter un afficheur à 7 segments pour afficher des chiffres de 0 à 9 et des lettres de A à F.
Composants requis
Pour ce projet, nous avons besoin des composants suivants.
Il est définitivement pratique d’acheter un kit complet, voici le lien :
Nom |
ARTICLES DANS CE KIT |
LIEN |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément via les liens ci-dessous.
INTRODUCTION AUX COMPOSANTS |
LIEN D’ACHAT |
|---|---|
Schéma de câblage
Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27, DS au GPIO17, et les ports de sortie parallèle aux 8 segments de l’afficheur à 7 segments. Entrez les données dans la broche DS pour le registre à décalage lorsque SH_CP (l’entrée d’horloge du registre à décalage) est sur le front montant, et pour le registre mémoire lorsque ST_CP (l’entrée d’horloge de la mémoire) est sur le front montant. Ensuite, vous pouvez contrôler les états de SH_CP et ST_CP via les GPIOs du Raspberry Pi pour transformer l’entrée de données série en sortie de données parallèle afin d’économiser les GPIOs du Raspberry Pi et piloter l’afficheur.
Procédures expérimentales
Étape 1 : Construisez le circuit.
Étape 2 : Accédez au dossier contenant le code.
cd ~/raphael-kit/nodejs/
Étape 3 : Exécutez le code.
sudo node 7-segment_display.js
Après l’exécution du code, vous verrez l’afficheur 7 segments afficher de 0 à 9 et de A à F.
Code
const Gpio = require('pigpio').Gpio;
const segCode = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71];
const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });
function hc595_shift(dat) {
for (let j = 0; j < 8; j++) {
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
SRCLK.trigger(1,1);
}
RCLK.trigger(1,1);
}
let index = -1;
setInterval(() => {
index = (index+1)%16;
hc595_shift(segCode[index]);
}, 1000);
Explication du Code
const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71];
Définir un tableau de codes hexadécimaux (cathode commune) pour les segments de 0 à F.
const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });
Initialiser les broches 17, 18 et 27 en mode sortie, et les assigner respectivement à SDI, RCLK et SRCLK.
function hc595_shift(dat) {
for (let j = 0; j < 8; j++) {
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
SRCLK.trigger(1,1);
}
RCLK.trigger(1,1);
}
Implémenter une fonction hc595_shift pour convertir les champs du tableau segCode en nombres et les afficher sur le tube numérique.
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
Assigner les données de dat à SDI(DS) par bits. Supposons que dat=0x3f (0011 1111, quand j=2, 0x3f sera décalé vers la droite (<<) de 2 bits. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, ce qui est vrai. À ce moment, 1 est écrit dans SDI.
SRCLK.trigger(1,1);
Générer une impulsion montante et déplacer les données DS vers le registre de décalage.
trigger(pulseLen, level)pulseLen - longueur de l’impulsion en microsecondes (1 - 100)
level - 0 ou 1
Envoyer une impulsion de déclenchement au GPIO. Le GPIO est réglé sur level pendant pulseLen microsecondes, puis réinitialisé à non level.
RCLK.trigger(1,1);
Générer une impulsion montante et déplacer les données du registre de décalage vers le registre de stockage.
let index = -1;
setInterval(() => {
index = (index+1)%16;
hc595_shift(segCode[index]);
}, 1000);
Enfin, utiliser la fonction hc595_shift() pour convertir les champs dans segCode et les afficher via le tube numérique.
Image du Phénomène