Arduino基礎入門篇22—74HC595擴展IO

Arduino開發板的普通IO引腳是有限的,必要時要對IO口進行擴展,才能滿足外部設備對IO口的需求。本篇介紹74HC595芯片,使用它來擴展Arduino的IO口,用3個IO來控制8路LED燈。

1. 74HC595介紹

74HC595芯片是一個串行輸入,並行輸出設備。其內部包括一個8位移位寄存器、一個存儲器以及三態輸出門電路,其中移位寄存器和存儲器都有相互獨立的時鐘。

74HC595芯片

1. 引腳說明

74HC595芯片引腳定義說明如下所示:

管腳定義
  • VCC、GND爲芯片供電管腳,工作電壓5V。

  • Q0~Q7這8個引腳是芯片的輸出引腳。

  • DS引腳爲串行輸入引腳。我們需要將數據一位一位的寫入該引腳。

  • STCP引腳爲鎖存引腳。當移位寄存器的8位數據全部傳輸完畢後,通過控制此引腳將數據複製到鎖存器準備並行輸出。

  • SHCP引腳爲時鐘引腳。通過控制此引腳將數據寫入移位寄存器。

  • OE引腳爲輸出使能。其作用是控制鎖存器裏的數據是否最終輸出到Q0-Q7輸出引腳上。低電平時輸出,高電平時不輸出,本實驗直接接在GND使其一直保持低電平輸出數據。

  • MR是用來重置內部寄存器的引腳。低電平時重置內部寄存器。本實驗直接連接在VCC上一直保持高電平。

  • Q7S引腳爲串行輸出引腳,專門用於芯片級聯。

2. 操作說明

根據74HC595引腳說明,有三個重要的引腳:數據引腳(data)、鎖存引腳(latch)、時鐘引腳(clock)。

74HC595操作步驟 操作說明
latch = LOW 只有爲low時纔可以輸入數據
data 通過data傳輸數據第一位,HIGH/LOW
clock = HIGH 數據鎖存
clock = LOW 準備下一個
data… 繼續上面步驟,直到傳輸完成
clock = HIGH 儲存全部的數據
clock = LOW 禁止數據再進行傳輸
latch = HIGH 並行送出數據

2. 實驗材料

  • Uno R3開發板
  • 配套USB數據線
  • 麪包板及配套連接線
  • 74HC595芯片
  • 8個220Ω限流電阻
  • 8個LED發光二極管

3. 實驗步驟

1. 根據原理圖搭建電路。

8個LED發光二極管的負極接開發板GND,正極分別接入220Ω限流電阻,電阻另一端分別接入74HC595芯片的Q0~Q7輸出引腳。

74HC595的VCC、MR引腳接入開發板5V,OE、GND引腳接入開發板的GND。DS、SHCP、STCP這三個控制引腳分別接入開發板的8、9、10數字引腳。

實驗原理圖如下圖所示:

實驗原理圖

實物連接圖如下圖所示:

實物連接圖

2. 新建sketch,拷貝如下代碼替換自動生成的代碼並進行保存。

/*
   Shift
   74HC595擴展IO,串行驅動8路LED燈
*/
int latchPin = 10;//鎖存引腳
int clockPin = 9; //時鐘引腳
int dataPin = 8; //數據引腳

void setup ()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); //讓三個腳都是輸出狀態
}
void loop()
{
  for (int data = 0; data < 255; data++)
  {
    digitalWrite(latchPin, LOW); //將ST_CP口上加低電平讓芯片準備好接收數據
    shiftOut(dataPin, clockPin, LSBFIRST, data);
    digitalWrite(latchPin, HIGH); //將ST_CP這個針腳恢復到高電平
    delay(1000); //暫停1秒鐘觀看顯示效果
  }
}

3. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。

程序下載

4. 實驗現象

8個LED燈移位進行亮滅顯示。

實驗現象

5. 函數介紹

shiftOut()

  • 描述:將數據在時鐘引腳脈衝控制下按位移出寫入到數字引腳。
  • 函數原型:
    shiftOut(dataPin, clockPin, bitOrder, value)
  • 參數:
    • dataPin: 數據輸入引腳。
    • clockPin: 時鐘引腳。
    • bitOrder: 移位順序。MSBFIRST(高位在前)、LSBFIRST(低位在前)。
    • value: 需要移位的數據。
  • 返回值:沒有。

6. 實驗分析

程序中將74HC595三個控制引腳設置爲輸出模式,然後使用shiftOut()函數將數據進行移位寫入74HC595的移位寄存器,然後通過控制鎖存引腳將數據進行鎖存輸出。shiftOut()函數的value參數是一個字節長度,即每執行一次會將一個字節(最大值255)進行移位輸出。如果移位的數據大於一個字節,需要執行兩次shiftOut()函數,例如:

//Do this for MSBFIRST serial
int data = 500;
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// shift out lowbyte
shiftOut(dataPin, clock, MSBFIRST, data);

// Or do this for LSBFIRST serial
data = 500;
// shift out lowbyte
shiftOut(dataPin, clock, LSBFIRST, data);
// shift out highbyte
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章