Bemerkung
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 [hier] und treten Sie heute bei!
1.1.4 7-Segment-Anzeige
Einführung
Lassen Sie uns versuchen, eine 7-Segment-Anzeige zu steuern, um eine Zahl von 0 bis 9 und A bis F anzuzeigen.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
Schaltplan
Verbinden Sie den ST_CP-Pin des 74HC595 mit dem Raspberry Pi GPIO18, SH_CP mit GPIO27, DS mit GPIO17 und die parallelen Ausgangsports mit den 8 Segmenten der LED-Segmentanzeige. Geben Sie Daten im DS-Pin in das Schieberegister ein, wenn SH_CP (der Takteingang des Schieberegisters) an der steigenden Flanke ist, und in das Speicherregister, wenn ST_CP (der Takteingang des Speichers) an der steigenden Flanke ist. Dann können Sie die Zustände von SH_CP und ST_CP über die Raspberry Pi GPIOs steuern, um die serielle Dateneingabe in parallele Datenausgabe zu transformieren, um so Raspberry Pi GPIOs zu sparen und die Anzeige zu steuern.
Experimentelle Verfahren
Schritt 1: Bauen Sie den Schaltkreis.
Schritt 2: Navigieren Sie zum Ordner mit dem Code.
cd ~/raphael-kit/nodejs/
Schritt 3: Führen Sie den Code aus.
sudo node 7-segment_display.js
Nachdem der Code ausgeführt wurde, zeigt die 7-Segment-Anzeige 0-9, A-F an.
Code
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
const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71];
Definieren Sie ein Hexadezimal-Segment-Code-Array (gemeinsame Kathode) von 0 bis F.
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 kopieren Sie sie jeweils nach SDI, RCLK und SRCLK.
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 der Digitalröhre anzuzeigen.
let code = 0x80 & (dat << j);
if (code != 0) {
code = 1;
}
SDI.digitalWrite(code);
Weisen Sie die Daten von dat bitweise SDI(DS) zu. Hier nehmen wir an, dat=0x3f(0011 1111). Wenn j=2 ist, wird 0x3f 2 Bits nach rechts verschoben (<<). 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, ist wahr. Zu diesem Zeitpunkt wird 1 auf SDI geschrieben.
SRCLK.trigger(1,1);
Erzeugen Sie einen ansteigenden 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 das GPIO. Das GPIO wird für pulseLen Mikrosekunden auf das Level gesetzt und dann auf nicht-Level zurückgesetzt.
RCLK.trigger(1,1);
Erzeugen Sie einen ansteigenden Flankenimpuls und verschieben Sie die Daten vom Schieberegister in das Speicherregister.
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 durch die Digitalröhre anzuzeigen.
Phänomen-Bild