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 les chiffres de 0 à 9 et les lettres de A à F.
Composants nécessaires
Dans ce projet, nous avons besoin des composants suivants.
Il est très 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 montage
Connectez la broche ST_CP du 74HC595 au GPIO18 du Raspberry Pi, SH_CP au GPIO27, DS au GPIO17, les ports de sortie parallèle aux 8 segments de l’afficheur LED.
Entrez les données dans la broche DS vers le registre à décalage lorsque SH_CP (l’entrée d’horloge du registre à décalage) est à la montée, et vers le registre de mémoire lorsque ST_CP (l’entrée d’horloge de la mémoire) est à la montée.
Vous pouvez alors 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 de sauvegarder les GPIOs du Raspberry Pi et piloter l’afficheur.
Nom T-Board |
Physique |
BCM |
GPIO17 |
Pin 11 |
17 |
GPIO18 |
Pin 12 |
18 |
GPIO27 |
Pin 13 |
27 |
Procédures expérimentales
Étape 1 : Construire le circuit.
Étape 2 : Accéder au dossier du code.
cd ~/raphael-kit/python-pi5
Étape 3 : Exécuter.
sudo python3 1.1.4_7-Segment_zero.py
Après l’exécution du code, vous verrez l’afficheur 7 segments afficher 0-9, A-F.
Avertissement
Si vous recevez le message d’erreur 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 raphael-kit/python-pi5. 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.
#!/usr/bin/env python3
from gpiozero import OutputDevice
from time import sleep
# GPIO pins connected to 74HC595 shift register
SDI = OutputDevice(17) # Serial Data Input
RCLK = OutputDevice(18) # Memory Clock Input (Register Clock)
SRCLK = OutputDevice(27) # Shift Register Clock
# Hexadecimal digit codes for a common cathode 7-segment display
segCode = [
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
]
def hc595_shift(data):
# Shift 8 bits of data into the 74HC595
for bit in range(8):
# Set SDI high or low based on data bit
SDI.value = 0x80 & (data << bit)
# Trigger shift register clock
SRCLK.on()
sleep(0.001)
SRCLK.off()
# Latch data to output by triggering memory clock
RCLK.on()
sleep(0.001)
RCLK.off()
def display_all_on():
# Function to turn all segments on (for common cathode 7-segment display)
all_on_code = 0x3f
hc595_shift(all_on_code)
print("Displaying all segments on")
try:
while True:
# Display each hexadecimal digit on 7-segment display
for code in segCode:
hc595_shift(code) # Shift the code into 74HC595
# Print the displayed segment code
print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}")
sleep(0.5) # Pause between displaying each digit
except KeyboardInterrupt:
# Gracefully handle script interruption (e.g., Ctrl+C)
pass
Explication du Code
Ce snippet importe les classes nécessaires pour le projet.
OutputDevicedegpiozeroest utilisé pour contrôler les composants matériels connectés aux broches GPIO, etsleepdetimeest utilisé pour ajouter des délais.#!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep
SDI, RCLK, et SRCLK correspondent aux broches d’entrée de données série, d’entrée d’horloge de mémoire (horloge de registre) et d’horloge de registre à décalage du 74HC595.
# GPIO pins connected to 74HC595 shift register SDI = OutputDevice(17) # Serial Data Input RCLK = OutputDevice(18) # Memory Clock Input (Register Clock) SRCLK = OutputDevice(27) # Shift Register Clock
segCodeest un tableau contenant les codes hexadécimaux pour chaque chiffre à afficher sur l’afficheur 7 segments.# Hexadecimal digit codes for a common cathode 7-segment display segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ]
Cette fonction décale 8 bits de données dans le 74HC595. Elle saisit chaque bit en série dans
SDI, basculeSRCLKpour décaler le bit et utiliseRCLKpour verrouiller les données à la sortie.def hc595_shift(data): # Shift 8 bits of data into the 74HC595 for bit in range(8): # Set SDI high or low based on data bit SDI.value = 0x80 & (data << bit) # Trigger shift register clock SRCLK.on() sleep(0.001) SRCLK.off() # Latch data to output by triggering memory clock RCLK.on() sleep(0.001) RCLK.off()
Cette fonction allume tous les segments de l’afficheur en envoyant un code spécifique à
hc595_shift.def display_all_on(): # Function to turn all segments on (for common cathode 7-segment display) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on")
Dans la boucle principale, chaque code dans
segCodeest envoyé à l’afficheur en séquence, avec un délai entre chaque affichage.try: while True: # Display each hexadecimal digit on 7-segment display for code in segCode: hc595_shift(code) # Shift the code into 74HC595 # Print the displayed segment code print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pause between displaying each digit
Cette partie du code gère gracieusement l’interruption du script (comme Ctrl+C).
except KeyboardInterrupt: # Gracefully handle script interruption (e.g., Ctrl+C) pass