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!

Zahlenanzeige

In diesem Projekt verwenden wir Processing, um eine 7-Segment-Anzeige zu steuern, die eine Zahl von 0 bis 9 und einen Buchstaben von A bis F anzeigt.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein komplettes Set zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO-Erweiterungsplatine

BUY

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

7-Segment-Anzeige

BUY

74HC595

BUY

Verdrahtung

../_images/image1251.png

Skizze

import processing.io.*;

int SDI=17;   //serial data input
int RCLK=18;  //memory clock input(STCP)
int SRCLK =27;   //shift register clock input(SHCP)


int[] SegCode= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void hc595_shift(int dat){
  int i;

  for(i=0;i<8;i++){
        int n=(0x80 & (dat << i));
        if ( n==0){
          GPIO.digitalWrite(SDI, 0);
        } else {
          GPIO.digitalWrite(SDI, 1);
        }
        GPIO.digitalWrite(SRCLK, 1);
        delay(1);
        GPIO.digitalWrite(SRCLK, 0);
  }

        GPIO.digitalWrite(RCLK, 1);
        delay(1);
        GPIO.digitalWrite(RCLK, 0);
}

void setup() {
        size(400, 200);
        frameRate(10);

        GPIO.pinMode(SDI, GPIO.OUTPUT);
        GPIO.pinMode(RCLK, GPIO.OUTPUT);
        GPIO.pinMode(SRCLK, GPIO.OUTPUT);

        GPIO.digitalWrite(SDI, 0);
        GPIO.digitalWrite(RCLK, 0);
        GPIO.digitalWrite(SRCLK, 0);

        fill(0,25,88);
        textAlign(CENTER,CENTER);
        textSize(height*0.8);
}

void draw() {

        background(255);
        int number = (frameCount%100)/10;
        text(number, width/2, height/2);
        hc595_shift(SegCode[number]);
}

Wie funktioniert das?

Importieren Sie processing.io.* und verwenden Sie die GPIO-Funktionsbibliothek, um die Pins der Digitalröhre zu steuern.

Definieren Sie das Array SegCode = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}, welches ein Segment-Code-Array von 0 bis F im Hexadezimalformat (Gemeinsame Kathode) darstellt.

Die setup() Funktion legt die drei Pins SDI, RCLK und SRCLK als Ausgang fest und die Anfangsdaten als 0.

Die Funktion hc595_shift(int dat) wird verwendet, um das SegCode auf 74HC595 zu verschieben.

void hc595_shift(int dat){
  int i;

  for(i=0;i<8;i++){
        int n=(0x80 & (dat << i));
        if (n==0){
          GPIO.digitalWrite(SDI, 0);
        } else {
          GPIO.digitalWrite(SDI, 1);
        }
        GPIO.digitalWrite(SRCLK, 1);
        delay(1);
        GPIO.digitalWrite(SRCLK, 0);
  }

        GPIO.digitalWrite(RCLK, 1);
        delay(1);
        GPIO.digitalWrite(RCLK, 0);
}

n=(0x80 & (dat << i)) bedeutet, dass dat um i Bits nach links verschoben und dann mit 0x80 verknüpft wird.

Die Regel für die &-Operation ist, dass wenn beide Seiten von & 1 sind, das Ergebnis 1 ist, ansonsten ist das Ergebnis 0.

Zum Beispiel, nehmen wir an dat=0x3f,i=2 (0011 1111 << 2 wird verschoben zu 1111 1100), dann ergibt 1111 1100 & 1000 0000 (0x80) = 1000 0000.

Zuletzt werden die dat-Daten bitweise SDI(DS) zugewiesen.

digitalWrite(SRCLK, 1): Wenn SRCLK einen ansteigenden Puls von 0 auf 1 erzeugt, werden die Daten vom DS-Register ins Schieberegister übertragen;

digitalWrite(RCLK, 1): Wenn RCLK einen ansteigenden Puls von 0 auf 1 erzeugt, werden die Daten vom Schieberegister ins Speicherregister übertragen.

fill(0,25,88);
textAlign(CENTER,CENTER);
textSize(height*0.8);

Die in setup() verwendete Funktion fill() füllt die Textfarbe, textAlign(CENTER,CENTER) zentriert den Text, und textSize(height*0.8) ändert die Textgröße auf das 0,8-fache der Originalgröße. Mit diesen Funktionen kann der auf Processing angezeigte Textstil angepasst werden.

void draw() {

        background(255);
        int number = (frameCount%100)/10;
        text(number, width/2, height/2);
        hc595_shift(SegCode[number]);
}

frameCount ist ein Samen, der mit frameRate zusammenhängt. Standardmäßig beträgt frameRate 60, was bedeutet, dass frameCount 60 Mal pro Sekunde akkumuliert wird.

So können Processing und die 7-Segment-Anzeige gleichzeitig die Zahlen von 0 bis 9 und A bis F anzeigen.