Nota
Ciao, benvenuto nella Community di Facebook dedicata agli appassionati di SunFounder Raspberry Pi, Arduino ed ESP32! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirsi a noi?
Supporto Esperto: Risolvi problematiche post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni speciali.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti subito!
1.1.4 Display a 7 Segmenti
Introduzione
Proviamo a gestire un display a 7 segmenti per visualizzare le cifre da 0 a 9 e le lettere da A a F.
Componenti Necessari
Per questo progetto, avremo bisogno dei seguenti componenti.
Schema a Blocchi
Collega il pin ST_CP del 74HC595 al GPIO18 del Raspberry Pi, SH_CP al GPIO27, DS al GPIO17 e le porte di uscita parallela agli 8 segmenti del display a 7 segmenti LED.
Invia i dati al pin DS per il registro a scorrimento quando SH_CP (l’ingresso di clock del registro a scorrimento) è al fronte di salita, e al registro di memoria quando ST_CP (l’ingresso di clock della memoria) è al fronte di salita.
In questo modo, puoi controllare gli stati di SH_CP e ST_CP tramite i GPIO del Raspberry Pi per convertire i dati di ingresso seriale in uscita parallela, risparmiando GPIO e guidando il display.
T-Board Name |
physical |
BCM |
GPIO17 |
Pin 11 |
17 |
GPIO18 |
Pin 12 |
18 |
GPIO27 |
Pin 13 |
27 |
Procedure Sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Accedi alla cartella del codice.
cd ~/davinci-kit-for-raspberry-pi/python-pi5
Passo 3: Esegui il programma.
sudo python3 1.1.4_7-Segment.py
Dopo l’esecuzione del codice, vedrai il display a 7 segmenti mostrare le cifre da 0 a 9 e da A a F.
Avvertimento
Se appare l’errore RuntimeError: Cannot determine SOC peripheral base address, consulta Se gpiozero non funziona.
Codice
Nota
Puoi Modificare/Reimpostare/Copiare/Eseguire/Arrestare il codice qui sotto. Ma prima, è necessario andare al percorso del codice sorgente, come davinci-kit-for-raspberry-pi/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto. Dopo aver verificato che non ci siano problemi, puoi usare il pulsante Copy per copiare il codice modificato, poi aprire il codice sorgente nel Terminale tramite il comando nano e incollarlo.
#!/usr/bin/env python3
from gpiozero import OutputDevice
from time import sleep
# Pin GPIO collegati al registro a scorrimento 74HC595
SDI = OutputDevice(17) # Ingresso dati seriali
RCLK = OutputDevice(18) # Ingresso clock della memoria (Clock del registro)
SRCLK = OutputDevice(27) # Clock del registro a scorrimento
# Codici esadecimali per visualizzare le cifre su un display a 7 segmenti a catodo comune
segCode = [
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
]
def hc595_shift(data):
# Scorrimento di 8 bit di dati nel 74HC595
for bit in range(8):
# Imposta SDI su alto o basso in base al bit di dati
SDI.value = 0x80 & (data << bit)
# Attiva il clock del registro a scorrimento
SRCLK.on()
sleep(0.001)
SRCLK.off()
# Blocca i dati sull’uscita attivando il clock della memoria
RCLK.on()
sleep(0.001)
RCLK.off()
def display_all_on():
# Funzione per accendere tutti i segmenti (per display a 7 segmenti a catodo comune)
all_on_code = 0x3f
hc595_shift(all_on_code)
print("Displaying all segments on")
try:
while True:
# Visualizza ciascuna cifra esadecimale sul display a 7 segmenti
for code in segCode:
hc595_shift(code) # Trasferisci il codice nel 74HC595
# Stampa il codice del segmento visualizzato
print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}")
sleep(0.5) # Pausa tra ogni cifra visualizzata
except KeyboardInterrupt:
# Gestisce l'interruzione dello script (ad es. Ctrl+C)
pass
Spiegazione del Codice
Questo snippet importa le classi necessarie per il progetto.
OutputDevicedagpiozeroè usato per controllare i componenti hardware collegati ai pin GPIO, esleepdatimeper aggiungere ritardi.#!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep
SDI, RCLK e SRCLK corrispondono rispettivamente all’Ingresso Dati Seriali, all’Ingresso Clock della Memoria (Clock del Registro) e al Clock del Registro a Scorrimento del 74HC595.
# Pin GPIO collegati al registro a scorrimento 74HC595 SDI = OutputDevice(17) # Ingresso dati seriali RCLK = OutputDevice(18) # Ingresso clock della memoria (Clock del registro) SRCLK = OutputDevice(27) # Clock del registro a scorrimento
segCodeè un array che contiene i codici esadecimali per ogni cifra da visualizzare sul display a 7 segmenti.# Codici esadecimali per visualizzare le cifre su un display a 7 segmenti a catodo comune segCode = [ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 ]
Questa funzione scorre 8 bit di dati nel 74HC595. Immette ciascun bit in
SDI, attivaSRCLKper scorrere il bit e utilizzaRCLKper bloccare i dati sull’uscita.def hc595_shift(data): # Scorrimento di 8 bit di dati nel 74HC595 for bit in range(8): # Imposta SDI su alto o basso in base al bit di dati SDI.value = 0x80 & (data << bit) # Attiva il clock del registro a scorrimento SRCLK.on() sleep(0.001) SRCLK.off() # Blocca i dati sull’uscita attivando il clock della memoria RCLK.on() sleep(0.001) RCLK.off()
Questa funzione accende tutti i segmenti del display inviando un codice specifico a
hc595_shift.def display_all_on(): # Funzione per accendere tutti i segmenti (per display a 7 segmenti a catodo comune) all_on_code = 0x3f hc595_shift(all_on_code) print("Displaying all segments on")
Nel ciclo principale, ogni codice in
segCodeviene inviato al display in sequenza, con una pausa tra ciascuno.try: while True: # Visualizza ciascuna cifra esadecimale sul display a 7 segmenti for code in segCode: hc595_shift(code) # Trasferisci il codice nel 74HC595 # Stampa il codice del segmento visualizzato print(f"Displaying segCode[{segCode.index(code)}]: 0x{code:02X}") sleep(0.5) # Pausa tra ogni cifra visualizzata
Questa parte del codice gestisce l’interruzione dello script (come Ctrl+C) in modo sicuro.
except KeyboardInterrupt: # Gestisce l'interruzione dello script (ad es. Ctrl+C) pass