Note

Bonjour, bienvenue dans la communauté SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans le monde du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et relevez les défis techniques grâce à notre communauté et notre équipe.

  • Apprendre & Partager : Échangez des astuces et des tutoriels pour développer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux nouvelles annonces de produits.

  • Réductions spéciales : Bénéficiez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des promotions spéciales et à des tirages au sort.

👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

1.1.4 Affichage 7 segments

Introduction

Nous allons essayer de contrôler un afficheur 7 segments pour afficher des chiffres de 0 à 9 et des lettres de A à F.

Composants nécessaires

Pour ce projet, nous aurons besoin des composants suivants.

../_images/1.1.4_7_segment_list.png

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 sorties parallèles aux 8 segments de l’afficheur 7 segments.

Les données sont entrées sur la broche DS du registre à décalage lorsque SH_CP (l’entrée d’horloge du registre) est en montée, et sont envoyées au registre de mémoire lorsque ST_CP (l’entrée d’horloge de la mémoire) est en montée.

Vous pouvez ensuite contrôler les états de SH_CP et ST_CP via les GPIO du Raspberry Pi pour transformer l’entrée de données série en sortie de données parallèles, afin d’économiser les GPIO du Raspberry Pi et piloter l’afficheur.

T-Board Name

physical

BCM

GPIO17

Pin 11

17

GPIO18

Pin 12

18

GPIO27

Pin 13

27

../_images/1.1.4_7_segment_schematic.png

Procédure expérimentale

Étape 1 : Construisez le circuit.

../_images/1.1.4_7-Segment_circuit.png

Étape 2 : Accédez au dossier contenant le code.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Étape 3 : Exécutez le programme.

sudo python3 1.1.4_7-Segment.py

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

Avertissement

Si un message d’erreur apparaît tel que RuntimeError: Cannot determine SOC peripheral base address, veuillez consulter Si gpiozero ne fonctionne pas..

Code

Note

Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez accéder au chemin source du code comme davinci-kit-for-raspberry-pi/python-pi5. Après modification, vous pouvez l’exécuter directement pour observer le résultat. Une fois vérifié qu’il n’y a pas de problème, utilisez le bouton Copier pour copier le code modifié, puis ouvrez le code source dans le Terminal via la commande nano et collez-le.

#!/usr/bin/env python3
from gpiozero import OutputDevice
from time import sleep

# Broches GPIO connectées au registre à décalage 74HC595
SDI = OutputDevice(17)   # Entrée de données série
RCLK = OutputDevice(18)  # Entrée d'horloge de la mémoire (registre)
SRCLK = OutputDevice(27) # Horloge de décalage du registre

# Codes hexadécimaux pour un afficheur 7 segments à cathode commune
segCode = [
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
    0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
]

def hc595_shift(data):
    # Décale 8 bits de données dans le 74HC595
    for bit in range(8):
        # Définit SDI à haut ou bas selon le bit de donnée
        SDI.value = 0x80 & (data << bit)
        # Déclenche l'horloge du registre de décalage
        SRCLK.on()
        sleep(0.001)
        SRCLK.off()
    # Verrouille les données en déclenchant l'horloge de mémoire
    RCLK.on()
    sleep(0.001)
    RCLK.off()

def display_all_on():
    # Fonction pour allumer tous les segments (afficheur 7 segments à cathode commune)
    all_on_code = 0x3f
    hc595_shift(all_on_code)
    print("Displaying all segments on")

try:
    while True:
        # Affiche chaque chiffre hexadécimal sur l'afficheur 7 segments
        for code in segCode:
            hc595_shift(code)  # Transfère le code dans le 74HC595
            # Affiche le code segmenté
            print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}")
            sleep(0.5)  # Pause entre chaque affichage

except KeyboardInterrupt:
    # Gère proprement l'interruption du script (ex. Ctrl+C)
    pass

Explication du code

  1. Ce snippet importe les classes nécessaires au projet. OutputDevice de gpiozero est utilisé pour contrôler les composants matériels connectés aux broches GPIO, et sleep de time est utilisé pour ajouter des délais.

    #!/usr/bin/env python3
    from gpiozero import OutputDevice
    from time import sleep
    
  2. SDI, RCLK et SRCLK correspondent respectivement aux broches d’entrée de données série, d’horloge mémoire et d’horloge de décalage du 74HC595.

    # Broches GPIO connectées au registre à décalage 74HC595
    SDI = OutputDevice(17)   # Entrée de données série
    RCLK = OutputDevice(18)  # Entrée d'horloge de la mémoire (registre)
    SRCLK = OutputDevice(27) # Horloge de décalage du registre
    
  3. segCode est un tableau contenant les codes hexadécimaux pour chaque chiffre à afficher sur l’afficheur 7 segments.

    # Codes hexadécimaux pour un afficheur 7 segments à cathode commune
    segCode = [
        0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
        0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
    ]
    
  4. Cette fonction décale 8 bits de données dans le 74HC595. Elle entre chaque bit dans SDI, déclenche SRCLK pour décaler le bit, puis utilise RCLK pour verrouiller les données.

    def hc595_shift(data):
        # Décale 8 bits de données dans le 74HC595
        for bit in range(8):
            # Définit SDI à haut ou bas selon le bit de donnée
            SDI.value = 0x80 & (data << bit)
            # Déclenche l'horloge du registre de décalage
            SRCLK.on()
            sleep(0.001)
            SRCLK.off()
        # Verrouille les données en déclenchant l'horloge de mémoire
        RCLK.on()
        sleep(0.001)
        RCLK.off()
    
  5. Cette fonction allume tous les segments de l’afficheur en envoyant un code spécifique à hc595_shift.

    def display_all_on():
        # Fonction pour allumer tous les segments (afficheur 7 segments à cathode commune)
        all_on_code = 0x3f
        hc595_shift(all_on_code)
        print("Displaying all segments on")
    
  6. La boucle principale envoie chaque code de segCode à l’afficheur, avec un délai entre chaque affichage.

    try:
        while True:
            # Affiche chaque chiffre hexadécimal sur l'afficheur 7 segments
            for code in segCode:
                hc595_shift(code)  # Transfère le code dans le 74HC595
                # Affiche le code segmenté
                print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}")
                sleep(0.5)  # Pause entre chaque affichage
    
  7. Cette partie du code gère proprement l’interruption du script (ex. Ctrl+C).

    except KeyboardInterrupt:
        # Gère proprement l'interruption du script (ex. Ctrl+C)
        pass