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.

../_images/list_7_segment1.png

Il est définitivement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION AUX COMPOSANTS

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

Affichage à 7 segments

ACHETER

74HC595

ACHETER

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.

../_images/schematic_7_segment1.png

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/image731.png

É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

../_images/image741.jpeg