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 Affichage à 7 segments

Introduction

Essayons de piloter un afficheur à 7 segments pour afficher un chiffre de 0 à 9 et de A à F.

Composants nécessaires

Dans ce projet, nous avons besoin des composants suivants.

../_images/list_7_segment.png

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

Nom

ÉLÉMENTS 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 connexion

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èles aux 8 segments de l’afficheur LED. Les données d’entrée dans la broche DS sont envoyées au registre de décalage lorsque SH_CP (l’entrée d’horloge du registre de décalage) est sur le front montant, et au registre de 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 de ST_CP via les GPIOs du Raspberry Pi pour transformer l’entrée de données série en sortie de données parallèles afin d’économiser les GPIOs du Raspberry Pi et de piloter l’affichage.

Nom T-Board

Physique

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

../_images/schematic_7_segment.png

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/image73.png

Étape 2 : Accédez au dossier du code.

cd ~/raphael-kit/python/

Étape 3 : Exécutez.

sudo python3 1.1.4_7-Segment.py

Après l’exécution du code, vous verrez l’affichage à 7 segments afficher les chiffres de 0 à 9, puis de A à F.

Code

Note

Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme raphael-kit/python. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet. Après avoir confirmé qu’il n’y a pas de problèmes, vous pouvez utiliser le bouton Copier pour copier le code modifié, puis ouvrir le code source dans Terminal via la commande nano et le coller.

import RPi.GPIO as GPIO
import time

# Configuration des broches
SDI   = 17
RCLK  = 18
SRCLK = 27

# Define a segment code from 0 to F in Hexadecimal
segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW)

# Shift the data to 74HC595
def hc595_shift(dat):
    for bit in range(0, 8):
        GPIO.output(SDI, 0x80 & (dat << bit))
        GPIO.output(SRCLK, GPIO.HIGH)
        time.sleep(0.001)
        GPIO.output(SRCLK, GPIO.LOW)
    GPIO.output(RCLK, GPIO.HIGH)
    time.sleep(0.001)
    GPIO.output(RCLK, GPIO.LOW)

def main():
    while True:
            # Shift the code one by one from segCode list
        for code in segCode:
            hc595_shift(code)
                print ("segCode[%s]: 0x%02X"%(segCode.index(code), code)) # %02X means double digit HEX to print
            time.sleep(0.5)

def destroy():
    GPIO.cleanup()

if __name__ == '__main__':
    setup()
    try:
        main()
    except KeyboardInterrupt:
        destroy()

Explication du Code

segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]

Un tableau de codes de segments de 0 à F en Hexadécimal (Cathode commune).

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW)

Définissez les trois broches ds, st_cp, sh_cp en sortie et l’état initial à un niveau bas.

GPIO.output(SDI, 0x80 & (dat << bit))

Attribue les données dat à SDI(DS) par bits. Supposons ici que dat=0x3f(0011 1111), lorsque bit=2, 0x3f se décalera vers la droite (<<) de 2 bits. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, est vrai.

GPIO.output(SRCLK, GPIO.HIGH)

La valeur initiale de SRCLK a été définie à LOW, et ici elle est définie à HIGH, ce qui permet de générer une impulsion de front montant, puis de décaler les données DS vers le registre de décalage.

GPIO.output(RCLK, GPIO.HIGH)

La valeur initiale de RCLK a été définie à LOW, et ici elle est définie à HIGH, ce qui permet de générer un front montant, puis de transférer les données du registre de décalage au registre de stockage.

Note

Le format hexadécimal des chiffres 0~15 est (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)

Image du Phénomène

../_images/image74.jpeg