本文旨在補充《超圖解Arduino互動設計入門》第7章「序列連接七段顯示器」。74HC595具有一個串聯輸出腳位(第9腳),將它接在下一個74HC595的序列輸入腳,即可串聯成一組多重並列輸出埠。

串聯在一起的74HC595,就像相連的生產線,自前一條生產線推移出來的物品,會接續出現在下一條生產線:

底下是書本7-14頁的Arduino接74HC595七段顯示器麵包板電路圖:

所有串聯的74HC595的序列時脈(第11腳)和暫存器時脈線(第12腳),都要接在一起,才能同步運作,像這樣:

在不改變書本「動手做7-2」程式碼的情況下測試上面的電路:第一秒鐘,七段顯示器A將顯示“0”,七段顯示器B沒有顯示;第二秒鐘,第二個74HC595將接收從前一個IC的序列資料,在七段顯示器B顯示0,而顯示器A則呈現1…

若要在兩個顯示器上分別呈現不同的數字,需要一次移入16位元的資料,再開啟閘門。
底下的Arduino範例程式定義兩個陣列,分別叫做LED_A(此即原範例程式的LEDs)和LED_B。重點在於,每一次迴圈(loop)執行時,程式都要先推入“LED_B”,再送入“LED_A”:
// 修改自7-13頁「動手做7-2」的序列連接七段顯示器程式
const byte dataPin = 2; // 74HC595 序列腳接「數位 2」
const byte latchPin = 3; // 74HC595 暫存器時脈腳接「數位 3」
const byte clockPin = 4; // 74HC595 序列時脈腳接「數位 4」
byte index = 0; // 七段顯示器的數字索引
const byte LED_A[10] = { // 記錄0~9的七段數字
B01111110,
B00110000,
B01101101,
B01111001,
B00110011,
B01011011,
B01011111,
B01110000,
B01111111,
B01110011
};
const byte LED_B[10] = { // 記錄9~0的七段數字
B01110011,
B01111111,
B01110000,
B01011111,
B01011011,
B00110011,
B01111001,
B01101101,
B00110000,
B01111110
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW); // 關上閘門
// 先推入「陣列B」
shiftOut(dataPin, clockPin, LSBFIRST, LED_B[index]);
// 再推入「陣列A」
shiftOut(dataPin, clockPin, LSBFIRST, LED_A[index]);
digitalWrite(latchPin, HIGH); // 開啟閘門
delay(1000); // 暫停一秒
index ++;
if (index == 10) {
index = 0;
}
}
測試執行上面的程式,第一個七段顯示器將逐秒顯示0~9,第二個顯示器則依序顯示9~0:

