.. note:: Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez dans l'univers du Raspberry Pi, d'Arduino et d'ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez vos problèmes après-vente et surmontez vos défis techniques grâce à l’aide de notre communauté et de notre équipe. - **Apprendre & Partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Obtenez un accès anticipé aux annonces de nouveaux produits et à des avant-premières. - **Réductions spéciales** : Profitez de remises exclusives sur nos derniers produits. - **Promotions festives et cadeaux** : Participez à des concours et à des promotions pendant les fêtes. 👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! Afficheur à 7 segments ========================= Introduction -------------- Dans ce projet, nous allons contrôler un afficheur 7 segments pour afficher des chiffres de 0 à 9 ainsi que les lettres de A à F. Composants ------------ .. image:: img/list_7_segment.png Schéma de câblage -------------------- Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27 et DS au GPIO17. Les ports de sortie parallèle sont connectés aux 8 segments de l'afficheur à 7 segments. Les données d'entrée sont envoyées à la broche DS du registre à décalage lorsque SH_CP (l'entrée d'horloge du registre à décalage) est sur front montant, et envoyées au registre de mémoire lorsque ST_CP (l'entrée d'horloge du registre de mémoire) est sur front montant. Ainsi, en contrôlant les états de SH_CP et ST_CP via les GPIO du Raspberry Pi, vous pouvez transformer les données d'entrée série en sortie parallèle, économiser des GPIO et piloter l'afficheur. .. image:: img/schematic_7_segment.png Procédures expérimentales ---------------------------- **Étape 1 :** Construire le circuit. .. image:: img/image73.png **Étape 2 :** Accéder au dossier du code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/nodejs/ **Étape 3 :** Exécuter le code. .. raw:: html .. code-block:: sudo node 7-segment_display.js Après l'exécution du code, vous verrez l'afficheur 7 segments afficher 0-9, puis A-F. **Code** .. code-block:: js 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** .. code-block:: js const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]; Définir un tableau de segments hexadécimaux (cathode commune) de 0 à F. .. code-block:: js 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 aux constantes ``SDI``, ``RCLK`` et ``SRCLK``. .. code-block:: js 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 valeurs du tableau ``segCode`` en signaux à afficher sur l'afficheur 7 segments. .. code-block:: js let code = 0x80 & (dat << j); if (code != 0) { code = 1; } SDI.digitalWrite(code); Attribuer les données de ``dat`` à SDI(DS) bit par bit. Supposons que dat=0x3f (0011 1111), lorsqu'on déplace ``j=2``, 0x3f se déplace de 2 bits vers la gauche. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, ce qui est vrai. À ce moment-là, 1 est écrit dans SDI. .. code-block:: js SRCLK.trigger(1,1); Générer une impulsion montante et déplacer les données DS vers le registre à décalage. ``trigger(pulseLen, level)`` * pulseLen - pulse length in microseconds (1 - 100) * level - 0 or 1 Envoie une impulsion de déclenchement au GPIO. Le GPIO est défini à ``level`` pendant ``pulseLen`` microsecondes, puis réinitialisé au niveau opposé. .. code-block:: js RCLK.trigger(1,1); Générer une impulsion montante et déplacer les données du registre de décalage au registre de mémoire. .. code-block:: js let index = -1; setInterval(() => { index = (index+1)%16; hc595_shift(segCode[index]); }, 1000); Enfin, utilisez la fonction ``hc595_shift()`` pour convertir les valeurs de ``segCode`` et les afficher à travers l'afficheur numérique. Image du résultat -------------------- .. image:: img/image74.jpeg