.. note:: Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten. **Warum beitreten?** - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft 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. - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte. - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil. 👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei! .. _1.1.5_py: 1.1.5 4-stellige 7-Segment-Anzeige ==================================== Einführung ----------------- Kommen Sie und lernen Sie mit mir, wie man die 4-stellige 7-Segment-Anzeige steuert. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: ../img/list_4_digit.png Es ist sicherlich praktisch, ein komplettes Set zu kaufen. Hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM SET - LINK * - Raphael Set - 337 - |link_Raphael_kit| Sie können die Teile auch einzeln über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_4_digit` - \- * - :ref:`cpn_74hc595` - |link_74hc595_buy| Schaltplan -------------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 SPIMOSI Pin 19 12 10 GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 ============ ======== ======== === .. image:: ../img/schmatic_4_digit.png Experimentelle Verfahren ----------------------------------- **Schritt 1**: Schaltung aufbauen. .. image:: ../img/image80.png **Schritt 2:** Zum Ordner des Codes navigieren. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Schritt 3:** Die ausführbare Datei starten. .. raw:: html .. code-block:: sudo python3 1.1.5_4-Digit.py Nachdem der Code ausgeführt wurde, startet das Programm einen Zähler, der jede Sekunde um 1 erhöht wird, und die 4-stellige Anzeige zeigt den Zählerstand an. **Code** .. note:: Sie können den untenstehenden Code **modifizieren/zurücksetzen/kopieren/ausführen/stoppen**. Aber zuerst müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` navigieren. Nach der Modifizierung können Sie ihn direkt ausführen, um das Ergebnis zu sehen. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time import threading SDI = 24 RCLK = 23 SRCLK = 18 placePin = (10, 22, 27, 17) number = (0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90) counter = 0 timer1 = 0 def clearDisplay(): for i in range(8): GPIO.output(SDI, 1) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def hc595_shift(data): for i in range(8): GPIO.output(SDI, 0x80 & (data << i)) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) def pickDigit(digit): for i in placePin: GPIO.output(i,GPIO.LOW) GPIO.output(placePin[digit], GPIO.HIGH) def timer(): global counter global timer1 timer1 = threading.Timer(1.0, timer) timer1.start() counter += 1 print("%d" % counter) def loop(): global counter while True: clearDisplay() pickDigit(0) hc595_shift(number[counter % 10]) clearDisplay() pickDigit(1) hc595_shift(number[counter % 100//10]) clearDisplay() pickDigit(2) hc595_shift(number[counter % 1000//100]) clearDisplay() pickDigit(3) hc595_shift(number[counter % 10000//1000]) def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT) GPIO.setup(RCLK, GPIO.OUT) GPIO.setup(SRCLK, GPIO.OUT) for i in placePin: GPIO.setup(i, GPIO.OUT) global timer1 timer1 = threading.Timer(1.0, timer) timer1.start() def destroy(): # When "Ctrl+C" is pressed, the function is executed. global timer1 GPIO.cleanup() timer1.cancel() # cancel the timer if __name__ == '__main__': setup() try: loop() except KeyboardInterrupt: destroy() **Code-Erklärung** .. code-block:: python placePin = (10, 22, 27, 17) Diese vier Pins steuern die gemeinsamen Anodenpins der vierstelligen 7-Segment-Anzeigen. .. code-block:: python number = (0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90) Ein Segment-Code-Array von 0 bis 9 in Hexadezimal (gemeinsame Anode). .. code-block:: python def clearDisplay(): for i in range(8): GPIO.output(SDI, 1) GPIO.output(SRCLK, GPIO.HIGH) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) GPIO.output(RCLK, GPIO.LOW) Schreibe "1" acht Mal in SDI, sodass die acht LEDs auf der 7-Segment-Anzeige erlöschen und der angezeigte Inhalt gelöscht wird. .. code-block:: python def pickDigit(digit): for i in placePin: GPIO.output(i,GPIO.LOW) GPIO.output(placePin[digit], GPIO.HIGH) Wähle die Position des Wertes aus. Es sollte jedes Mal nur eine Position aktiviert sein. Der aktivierte Ort wird auf "HIGH" geschrieben. .. code-block:: python def loop(): global counter while True: clearDisplay() pickDigit(0) hc595_shift(number[counter % 10]) clearDisplay() pickDigit(1) hc595_shift(number[counter % 100//10]) clearDisplay() pickDigit(2) hc595_shift(number[counter % 1000//100]) clearDisplay() pickDigit(3) hc595_shift(number[counter % 10000//1000]) Die Funktion wird verwendet, um die auf der vierstelligen 7-Segment-Anzeige angezeigte Nummer festzulegen. Zuerst wird das vierte Segment-Display gestartet und die einstellige Zahl geschrieben. Dann wird das dritte Segment-Display gestartet und die Zehnerstelle eingegeben. Danach werden nacheinander das zweite und das erste Segment-Display gestartet und die Hunderter- und Tausenderstellen eingegeben. Da die Aktualisierungsgeschwindigkeit sehr hoch ist, sehen wir eine komplette vierstellige Anzeige. .. code-block:: python timer1 = threading.Timer(1.0, timer) timer1.start() Das Modul threading ist das übliche Threading-Modul in Python, und Timer ist die Unterklasse davon. Der Prototyp des Codes lautet: .. code-block:: python class threading.Timer(interval, function, args=[], kwargs={}) Nach dem Intervall wird die Funktion ausgeführt. Hier beträgt das Intervall 1,0 und die Funktion ist timer(). start() bedeutet, dass der Timer an diesem Punkt startet. .. code-block:: python def timer(): global counter global timer1 timer1 = threading.Timer(1.0, timer) timer1.start() counter += 1 print("%d" % counter) Nachdem der Timer 1,0s erreicht hat, wird die Timer-Funktion aufgerufen; 1 wird zu counter hinzugefügt, und der Timer wird erneut verwendet, um sich jede Sekunde wiederholt auszuführen. Phänomen-Bild -------------------- .. image:: ../img/image81.jpeg