Bemerkung
Hallo und herzlich willkommen in der SunFounder-Community für Raspberry Pi-, Arduino- und ESP32-Enthusiasten auf Facebook! Tauche gemeinsam mit anderen Technikbegeisterten tiefer in die Welt von Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Erhalte Unterstützung bei technischen Problemen und nach dem Kauf – von unserem Team und der Community.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Kenntnisse zu erweitern.
Exklusive Vorschauen: Erfahre frühzeitig von neuen Produktankündigungen und Einblicken.
Sonderrabatte: Profitiere von exklusiven Rabatten auf unsere neuesten Produkte.
Aktionen & Gewinnspiele: Nimm an festlichen Aktionen und Verlosungen teil.
👉 Bereit, gemeinsam mit uns zu entdecken und zu entwickeln? Klicke auf [hier] und mach noch heute mit!
5.2 Zahlen anzeigen
In dieser Lektion lernst du, wie man mit einem 7-Segment-Display und dem 74HC595-Schieberegister Zahlen auf dem Raspberry Pi Pico 2 W darstellen kann. Das 7-Segment-Display ist ein weit verbreitetes elektronisches Bauteil, das in Geräten wie digitalen Uhren, Taschenrechnern und Haushaltsgeräten zur Anzeige numerischer Informationen eingesetzt wird.
Durch die Kombination des 74HC595 mit dem 7-Segment-Display können alle Segmente mit nur wenigen GPIO-Pins gesteuert werden, wodurch wertvolle I/O-Ressourcen für andere Komponenten eingespart werden.
Benötigte Komponenten
Für dieses Projekt benötigen wir folgende Bauteile.
Ein komplettes Kit ist besonders praktisch – hier ist der Link:
Name |
ENTHALTENE TEILE |
LINK |
|---|---|---|
Pico 2 W Starter Kit |
450+ |
Die Bauteile können auch einzeln über folgende Links erworben werden:
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 Form einer Acht angeordnet sind, um Ziffern von 0 bis 9 anzuzeigen. Zusätzlich gibt es eine achte LED für den Dezimalpunkt. Jedes Segment ist mit a bis g und der Dezimalpunkt mit dp beschriftet.
Hier die Segmentbezeichnungen:
Bei einem gemeinsamen Kathoden-Display (common cathode) sind alle Kathoden der LEDs mit Masse verbunden.
Schaltplan
Die Verdrahtung erfolgt im Prinzip genauso wie bei 5.1 Verwendung des 74HC595-Schieberegisters, mit dem Unterschied, dass die Pins Q0–Q7 mit den Segmenten a bis g des 7-Segment-Displays verbunden werden.
LED Segmentanzeige |
|
|---|---|
Q0 |
a |
Q1 |
b |
Q2 |
c |
Q3 |
d |
Q4 |
e |
Q5 |
f |
Q6 |
g |
Q7 |
dp |
Verdrahtung
Code schreiben
Wir schreiben nun ein MicroPython-Programm, das die Ziffern 0 bis 9 auf dem 7-Segment-Display anzeigt.
Bemerkung
Öffne
5.2_number_display.pyauspico-2w-kit-main/micropythonoder kopiere den Code in Thonny und klicke auf „Run“ oder drücke F5.Stelle sicher, dass der richtige Interpreter ausgewählt ist: MicroPython (Raspberry Pi Pico).COMxx.
import machine
import utime
# Define the binary codes for each digit (0-9)
SEGMENT_CODES = [
0x3F, # 0
0x06, # 1
0x5B, # 2
0x4F, # 3
0x66, # 4
0x6D, # 5
0x7D, # 6
0x07, # 7
0x7F, # 8
0x6F # 9
]
# Initialize the control pins for 74HC595
SDI = machine.Pin(0, machine.Pin.OUT) # Serial Data Input (DS)
RCLK = machine.Pin(1, machine.Pin.OUT) # Register Clock (STCP)
SRCLK = machine.Pin(2, machine.Pin.OUT) # Shift Register Clock (SHCP)
# Function to send data to 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()
# Main loop to display numbers 0-9
while True:
for num in range(10):
shift_out(SEGMENT_CODES[num])
utime.sleep(0.5)
Beim Ausführen des Codes zeigt das 7-Segment-Display nacheinander die Ziffern 0 bis 9 im 0,5-Sekunden-Takt an. Nach der 9 beginnt die Anzeige wieder bei 0 und wiederholt sich endlos.
Code-Erklärung
Module importieren:
machine: Zugriff auf GPIOs und Hardware-Funktionen.utime: Zeitfunktionen und Delays.
Segment-Codes definieren:
Jeder Eintrag steht für die LEDs, die zur Darstellung einer Ziffer leuchten sollen. Zur besseren Lesbarkeit wird Hexadezimal verwendet.
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, dann müssen die Segmente b und c auf High gesetzt werden, während a, d, e, f, g und dp auf Low gesetzt werden.
Das bedeutet, dass die Binärzahl „00000110“ ausgegeben werden muss. Zur besseren Lesbarkeit verwenden wir die hexadezimale Schreibweise „0x06“.
Steuerpins initialisieren:
Weist den GPIO-Pins des Pico Steuerfunktionen für den 74HC595 zu.
SDI = machine.Pin(0, machine.Pin.OUT) RCLK = machine.Pin(1, machine.Pin.OUT) SRCLK = machine.Pin(2, machine.Pin.OUT)
Funktion
shift_outdefinieren:Sendet 8 Bits an den 74HC595.
Beginnt beim höchstwertigen Bit (MSB).
Steuert SRCLK und RCLK 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:
Zählt von 0 bis 9.
Ruft shift_out mit dem passenden Segmentcode auf.
Wartet 0,5 Sekunden zwischen den Zahlen.
while True: for num in range(10): shift_out(SEGMENT_CODES[num]) utime.sleep(0.5)
Segmentcodes verstehen
Jeder Code bestimmt, welche Segmente zur Anzeige der Ziffer aktiv sind:
0: a, b, c, d, e, f → 0x3F
1: b, c → 0x06
2: a, b, g, e, d → 0x5B
3: a, b, c, d, g → 0x4F
4: b, c, f, g → 0x66
5: a, c, d, f, g → 0x6D
6: a, c, d, e, f, g → 0x7D
7: a, b, c → 0x07
8: a, b, c, d, e, f, g → 0x7F
9: a, b, c, d, f, g → 0x6F
Weitere Experimente
Hexadezimal anzeigen:
Erweitere die
SEGMENT_CODES-Liste um Buchstaben A–F für hexadezimale Darstellung. Beispiel: ‚A‘ = 0x77Zähler implementieren:
Ändere den Code in einen Auf- oder Abwärtszähler. Nutze Taster als Eingabe zur Steuerung.
Mehrere Displays steuern:
Kaskadiere mehrere 74HC595, um mehrere Ziffern anzuzeigen. Verwende Multiplexing zur Anzeige mit minimalen GPIOs.
Fazit
In dieser Lektion hast du gelernt, wie man mit einem 7-Segment-Display und einem 74HC595-Schieberegister Zahlen mit dem Raspberry Pi Pico 2 W darstellt. Durch das gezielte Setzen binärer Segmentcodes und den Einsatz des Schieberegisters kannst du effizient Ausgänge mit wenigen Pins steuern.



