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+ |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
---|---|
- |
|
Verdrahtung¶
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.
Code¶
Bemerkung
Sie können die Datei
29-74hc595.ino
direkt im Pfadelite-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.