Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Verkauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezielle Rabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Promotionen und Giveaways: Nehmen Sie an Giveaways und Feiertagsaktionen teil.
👉 Bereit, mit uns zu erkunden und zu kreieren? Klicken Sie auf [hier] und treten Sie heute bei!
5.2 Zahlen anzeigen
In dieser Lektion lernen wir, wie man ein 7-Segment-Display verwendet, um Zahlen mit dem Raspberry Pi Pico 2 und einem 74HC595-Schieberegister darzustellen. Das 7-Segment-Display ist eine häufig verwendete elektronische Komponente in digitalen Uhren, Taschenrechnern und Haushaltsgeräten zur Anzeige numerischer Informationen.
Durch die Kombination des 74HC595-Schieberegisters mit dem 7-Segment-Display können wir alle Segmente mit nur wenigen GPIO-Pins des Pico steuern und so wertvolle I/O-Ressourcen für andere Komponenten sparen.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ENTHALTENE KOMPONENTEN |
LINK |
|---|---|---|
Newton Lab Kit |
450+ |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
SN |
KOMPONENTE |
MENGE |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 (220Ω) |
||
6 |
1 |
||
7 |
1 |
Funktionsweise des 7-Segment-Displays
Ein 7-Segment-Display besteht aus 7 LEDs (Segmenten), die in einer Acht-Form angeordnet sind, um Ziffern von 0 bis 9 darzustellen. Zusätzlich gibt es eine achte LED für den Dezimalpunkt. Jedes Segment ist von a bis g beschriftet, und der Dezimalpunkt wird als dp gekennzeichnet.
Hier ist die Segmentbeschriftung:
In einem gemeinsamen Kathoden-7-Segment-Display sind alle Kathoden (negative Anschlüsse) der LEDs miteinander verbunden und an eine gemeinsame Masse angeschlossen.
Schaltplan
Das Verdrahtungsprinzip ist im Wesentlichen dasselbe wie bei 5.1 Verwendung des 74HC595-Schieberegisters, der einzige Unterschied besteht darin, dass Q0-Q7 mit den a ~ g Pins des 7-Segment-Displays verbunden sind.
74HC595 |
LED-Segment-Display |
|---|---|
Q0 |
a |
Q1 |
b |
Q2 |
c |
Q3 |
d |
Q4 |
e |
Q5 |
f |
Q6 |
g |
Q7 |
dp |
Verdrahtungsdiagramm
Code schreiben
Nun schreiben wir ein MicroPython-Programm, um die Ziffern 0 bis 9 auf dem 7-Segment-Display anzuzeigen.
Bemerkung
Öffnen Sie
5.2_number_display.pyausnewton-lab-kit/micropythonoder kopieren Sie den Code in Thonny, dann klicken Sie auf „Ausführen“ oder drücken Sie F5.Stellen Sie sicher, dass der richtige Interpreter ausgewählt ist: MicroPython (Raspberry Pi Pico).COMxx.
import machine
import utime
# Definieren der Binärcodes für jede Ziffer (0-9)
SEGMENT_CODES = [
0x3F, # 0
0x06, # 1
0x5B, # 2
0x4F, # 3
0x66, # 4
0x6D, # 5
0x7D, # 6
0x07, # 7
0x7F, # 8
0x6F # 9
]
# Initialisieren der Steuerpins für 74HC595
SDI = machine.Pin(0, machine.Pin.OUT) # Serieller Dateneingang (DS)
RCLK = machine.Pin(1, machine.Pin.OUT) # Register-Takt (STCP)
SRCLK = machine.Pin(2, machine.Pin.OUT) # Schieberegister-Takt (SHCP)
# Funktion zum Senden von Daten an 74HC595
def shift_out(data):
RCLK.low()
for bit in range(7, -1, -1):
SRCLK.low()
bit_val = (data >> bit) & 0x01
SDI.value(bit_val)
SRCLK.high()
RCLK.high()
# Hauptschleife zum Anzeigen der Zahlen 0-9
while True:
for num in range(10):
shift_out(SEGMENT_CODES[num])
utime.sleep(0.5)
Wenn Sie diesen Code ausführen, zeigt das 7-Segment-Display nacheinander die Ziffern 0 bis 9 an und wechselt alle 0,5 Sekunden. Dadurch entsteht ein zyklischer Zählereffekt, bei dem sich die Zahlen der Reihe nach erhöhen und nach der 9 wieder bei 0 beginnen.
Erklärung des Codes
Module importieren:
machine: Ermöglicht den Zugriff auf GPIO-Pins und Hardwarefunktionen.utime: Enthält Zeitfunktionen für Verzögerungen.
Segmentcodes definieren:
Jeder Eintrag entspricht den Segmenten, die aktiviert werden müssen, um eine Ziffer darzustellen. Die Werte sind zur besseren Lesbarkeit im Hexadezimalformat angegeben.
SEGMENT_CODES = [ 0x3F, # 0 0x06, # 1 0x5B, # 2 0x4F, # 3 0x66, # 4 0x6D, # 5 0x7D, # 6 0x07, # 7 0x7F, # 8 0x6F # 9 ]
Angenommen, das 7-Segment-Display soll die Zahl „1“ anzeigen. Dafür müssen die Segmente b und c auf HIGH gesetzt werden, während a, d, e, f, g und dp auf LOW bleiben.
Das bedeutet, dass das Binärmuster „00000110“ geschrieben werden muss. Zur besseren Lesbarkeit verwenden wir die hexadezimale Darstellung „0x06“.
Steuerpins initialisieren:
Weist die GPIO-Pins des Pico zur Steuerung des 74HC595-Schieberegisters zu.
SDI = machine.Pin(0, machine.Pin.OUT) RCLK = machine.Pin(1, machine.Pin.OUT) SRCLK = machine.Pin(2, machine.Pin.OUT)
Die Funktion
shift_outdefinieren:Sendet 8 Bit an das 74HC595-Schieberegister.
Überträgt die Daten beginnend mit dem höchstwertigen Bit (MSB).
Pulsiert die Schieberegister- und Register-Taktleitungen entsprechend.
def shift_out(data): RCLK.low() for bit in range(7, -1, -1): SRCLK.low() bit_val = (data >> bit) & 0x01 SDI.value(bit_val) SRCLK.high() RCLK.high()
Hauptschleife zur Anzeige der Zahlen:
Durchläuft die Zahlen 0 bis 9.
Ruft shift_out mit dem entsprechenden Segmentcode auf.
Fügt eine Verzögerung von 0,5 Sekunden zwischen den Zahlen hinzu.
while True: for num in range(10): shift_out(SEGMENT_CODES[num]) utime.sleep(0.5)
Verständnis der Segmentcodes
Jeder Segmentcode entspricht den zu beleuchtenden Segmenten für eine bestimmte Ziffer. Hier ist die Zuordnung der Segmente zu den einzelnen Ziffern:
0: Segments a, b, c, d, e, f (code 0x3F)
1: Segments b, c (code 0x06)
2: Segments a, b, g, e, d (code 0x5B)
3: Segments a, b, c, d, g (code 0x4F)
4: Segments b, c, f, g (code 0x66)
5: Segments a, c, d, f, g (code 0x6D)
6: Segments a, c, d, e, f, g (code 0x7D)
7: Segments a, b, c (code 0x07)
8: Segments a, b, c, d, e, f, g (code 0x7F)
9: Segments a, b, c, d, f, g (code 0x6F)
Weitere Experimente
Hexadezimale Zeichen anzeigen:
Erweitern Sie die
SEGMENT_CODES-Liste um die Buchstaben A-F für die hexadezimale Darstellung. Zum Beispiel hat der Buchstabe ‚A‘ den Segmentcode 0x77.Einen Zähler erstellen:
Ändern Sie den Code so, dass ein Zähler hoch- oder herunterzählt. Verwenden Sie Tasten, um die angezeigte Zahl zu erhöhen oder zu verringern.
Mehrere Anzeigen steuern:
Nutzen Sie zusätzliche 74HC595-Schieberegister, um mehrere 7-Segment-Anzeigen zu steuern. Implementieren Sie Multiplexing, um mehrere Anzeigen mit minimalem GPIO-Aufwand zu verwalten.
Fazit
In dieser Lektion haben Sie gelernt, wie Sie ein 7-Segment-Display mit einem 74HC595-Schieberegister verwenden, um Zahlen mit dem Raspberry Pi Pico 2 darzustellen. Durch das Verständnis der Steuerung der einzelnen Segmente über Binärcodes und die Nutzung des Schieberegisters können Sie effizient mehrere Ausgaben mit einer begrenzten Anzahl an GPIO-Pins verwalten.



