.. note::
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Vorschauen.
- **Spezielle Rabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und festlichen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicken Sie auf [|link_sf_facebook|] und treten Sie noch heute bei!
1.1.4 7-Segment-Anzeige
=============================
Einführung
--------------
Versuchen wir, eine 7-Segment-Anzeige zu steuern, um eine Zahl von 0 bis 9 und
A bis F anzuzeigen.
Komponenten
----------------
.. image:: img/list_7_segment.png
Schaltplan
---------------------
Verbinden Sie den Pin ST_CP des 74HC595 mit dem Raspberry Pi GPIO18, SH_CP mit GPIO27, DS
mit GPIO17, die parallelen Ausgangsports mit den 8 Segmenten der LED-Segmentanzeige.
Geben Sie Daten in den DS-Pin des Schieberegisters ein, wenn SH_CP (der Takteingang des Schieberegisters) an der steigenden Flanke liegt, und in das Speicheregister, wenn ST_CP (der Takteingang des Speichers) an der steigenden Flanke liegt. Dann können Sie die Zustände von SH_CP und ST_CP über die
GPIOs des Raspberry Pi steuern, um serielle Dateneingaben in parallele Datenausgaben umzuwandeln, um so GPIOs des Raspberry Pi zu sparen und die Anzeige zu steuern.
.. image:: img/schematic_7_segment.png
Experimentelle Vorgehensweise
---------------------------------------
**Schritt 1:** Bauen Sie die Schaltung auf.
.. image:: img/image73.png
**Schritt 2:** Gehen Sie zum Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/nodejs/
**Schritt 3:** Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo node 7-segment_display.js
Nachdem der Code ausgeführt wurde, sehen Sie, dass die 7-Segment-Anzeige die Zahlen 0-9 und die Buchstaben A-F anzeigt.
**Code**
.. code-block:: js
const Gpio = require('pigpio').Gpio;
const segCode = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71];
const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });
function hc595_shift(dat) {
for (let j = 0; j < 8; j++) {
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
SRCLK.trigger(1,1);
}
RCLK.trigger(1,1);
}
let index = -1;
setInterval(() => {
index = (index+1)%16;
hc595_shift(segCode[index]);
}, 1000);
**Code Erklärung**
.. code-block:: js
const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71];
Definieren Sie ein hexadezimales (gemeinsame Kathode) Segmentcode-Array von 0 bis F.
.. code-block:: js
const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });
Initialisieren Sie die Pins 17, 18 und 27 im Ausgabemodus und weisen Sie sie den Konstanten ``SDI``, ``RCLK`` und ``SRCLK`` zu.
.. code-block:: js
function hc595_shift(dat) {
for (let j = 0; j < 8; j++) {
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
SRCLK.trigger(1,1);
}
RCLK.trigger(1,1);
}
Implementieren Sie eine ``hc595_shift``-Funktion, um die Felder im Array ``segCode`` in Zahlen umzuwandeln
und sie auf dem digitalen Display anzuzeigen.
.. code-block:: js
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
Weisen Sie die Daten ``dat`` bitweise dem SDI(DS) zu.
Hier nehmen wir an, dat=0x3f (0011 1111), wenn j=2, wird 0x3f um 2 Bits nach rechts verschoben (<<).
1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, ist wahr.
Zu diesem Zeitpunkt wird eine 1 an SDI geschrieben.
.. code-block:: js
SRCLK.trigger(1,1);
Erzeugen Sie einen steigenden Flankenimpuls und verschieben Sie die DS-Daten in das Schieberegister.
``trigger(pulseLen, level)``
* pulseLen - Impulslänge in Mikrosekunden (1 - 100)
* level - 0 oder 1
Sendet einen Triggerimpuls an den GPIO.
Der GPIO wird für pulseLen Mikrosekunden auf level gesetzt und dann auf nicht level zurückgesetzt.
.. code-block:: js
RCLK.trigger(1,1);
Erzeugen Sie einen steigenden Flankenimpuls und verschieben Sie die Daten vom Schieberegister in das Speicherregister.
.. code-block:: js
let index = -1;
setInterval(() => {
index = (index+1)%16;
hc595_shift(segCode[index]);
}, 1000);
Verwenden Sie schließlich die Funktion ``hc595_shift()`` um die Felder in ``segCode`` umzuwandeln
und sie über das digitale Display anzuzeigen.
Phänomenbild
---------------------------
.. image:: img/image74.jpeg