74HC595

Überblick

Im Allgemeinen gibt es zwei Möglichkeiten, eine einzelne 7-Segment-Anzeige anzusteuern. Eine Möglichkeit besteht darin, ihre 8 Pins direkt an acht Ports des Uno-Boards anzuschließen, was wir bereits getan haben. Oder Sie können den 74HC595 an drei Ports des UNO-Boards anschließen und dann die 7-Segment-Anzeige an den 74HC595. In diesem Experiment werden wir Letzteres verwenden. Auf diese Weise können wir fünf Ports sparen – in Anbetracht der begrenzten Ports des Uno-Boards ist das sehr wichtig. Lassen Sie uns jetzt beginnen!

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

Elite Explorer Kit

300+

Elite Explorer Kit

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

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Steckbrett

BUY

Jumperkabel

BUY

Widerstand

BUY

7-Segment-Anzeige

BUY

74HC595

BUY

Verdrahtung

../_images/29-74hc595_bb.png

Schaltplan

Im Experiment ist MR (Pin 10) mit 5V (HIGH Level) verbunden und OE (Pin 1) mit GND (LOW Level). Daher werden die Daten in die steigende Flanke von SHcp eingegeben und durch die steigende Flanke in das Speicherregister übertragen. Wir verwenden die Funktion shiftout(), um ein 8-Bit-Datum an das Schieberegister über DS auszugeben. In der steigenden Flanke des SHcp bewegen sich die Daten im Schieberegister sukzessive um ein Bit, d.h. die Daten in Q1 bewegen sich nach Q2 und so weiter. In der steigenden Flanke von STcp bewegen sich die Daten im Schieberegister in das Speicherregister. Alle Daten werden nach 8 Durchgängen in das Speicherregister verschoben. Dann werden die Daten im Speicherregister auf den Bus (Q0-Q7) ausgegeben. So werden die 16 Zeichen nacheinander in der 7-Segment-Anzeige angezeigt.

../_images/29_74hc595_schematic.png

Code

Bemerkung

  • Sie können die Datei 29-74hc595.ino direkt im Pfad elite-explorer-kit-main\basic_project\29-74hc595 öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

Nachdem die Codes auf das Uno-Board hochgeladen wurden, sollten Sie jetzt die 7-Segment-Anzeige von 0 bis 9 und A bis F sehen.

Code-Analyse

Setzen der Array-Elemente

int datArray[16] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};

Dieses Array speichert die Daten der 16 Zeichen von 0 bis F. 252 steht für 0, was Sie selbst berechnen können. Um 0 anzuzeigen, muss das Segment g (das mittlere) der 7-Segment-Anzeige auf niedrigem Niveau (dunkel) sein.

Da das Segment g mit Q1 des 74HC595 verbunden ist, setzen Sie sowohl Q1 als auch DP (den Punkt) auf niedriges Niveau und lassen Sie die restlichen Pins auf hohem Niveau. Daher sind die Werte von Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 1 1 1 1 1 1 0 0.

Ändern Sie die Binärzahlen in Dezimalzahlen: 1x27+1x26+1x25+1x24+1x23+1x22+0x21+1x20=252.

So ist das der Wert für die Anzeige der Zahl 0. Sie können andere Zeichen ähnlich berechnen.

Anzeigen von 0-F in der 7-Segment-Anzeige

for(int num = 0; num < 16; num++)

{

  digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting

  shiftOut(DS,SHcp,MSBFIRST,datArray[num]);

  //return the latch pin high to signal chip that it

  //no longer needs to listen for information

  digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data

  delay(1000); //wait for a second

}

Setzen Sie zuerst STcp auf niedriges und dann auf hohes Niveau. Es erzeugt einen steigenden Flankenimpuls von STcp.

shiftOut() wird verwendet, um ein Byte Daten bitweise auszugeben, was bedeutet, ein Byte Daten in dataArray[num] mit dem DS-Pin in das Schieberegister zu verschieben. MSBFIRST bedeutet, von hohen Bits zu verschieben.

Nachdem digitalWrite(STcp,HIGH) ausgeführt wurde, wird STcp an der steigenden Flanke sein. Zu diesem Zeitpunkt werden die Daten im Schieberegister in das Speicherregister verschoben.

Ein Byte Daten wird nach 8 Mal in das Speicherregister übertragen. Dann werden die Daten des Speicherregisters auf den Bus (Q0-Q7) ausgegeben. Sie sehen ein Zeichen auf der 7-Segment-Anzeige. Dann warten Sie 1000 ms. Danach geht es zurück zur for()-Schleife. Die Schleife wiederholt sich, bis alle Zeichen nacheinander in der 7-Segment-Anzeige nach 16 Mal angezeigt werden.