串入並出的IC 74HC595補充說明:串聯多個74HC595 的Arduino程式示範

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

Arduino控制板串聯多個74HC595

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

串聯多個74HC595

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

Arduino的74HC595七段顯示器

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

Arduino的74HC595七段顯示器

在不改變書本「動手做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:

兩個七段顯示器的顯示變化

延伸閱讀

Posts created 483

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top