1. 程式人生 > >基於arduino的74HC595模組的原理與使用

基於arduino的74HC595模組的原理與使用

為什麼使用74HC595:因為開發板上的IO口不夠用,所以採用74HC595來拓展IO口,用3個開發板上的IO口資源,就可以拓展出8個IO口。

74HC595就是二進位制移位暫存器。

595有三條重要的線:資料線(data),鎖存線(latch),時鐘線(clock)

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

引腳接線方法

14腳DS資料引腳data                微控制器引腳

12腳ST_CP鎖存線LATCH            微控制器引腳

11腳SH_CP時鐘線引腳clock           微控制器引腳

最後上例項程式:
/*********************************
arduino連線74HC595,595上各個輸出IO
口上連線一個LED,指定某個燈亮或者滅

*********************************/
int clockPin = 5;//時鐘引腳設定
int dataPin = 2;//資料引腳設定
int latchPin = 4;//鎖存引腳設定

//將三個引腳全部設定為輸出
void setup() {
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT); 
  pinMode(latchPin,OUTPUT);
}

void loop() {
  int led_state = 5;//將要點亮或者關閉的LED個數或者位置  
  HC595(led_state);  
}
//設定led變化函式
void HC595(byte led_state)
{
  boolean ledPin;//led的狀態變數,0或者1
  digitalWrite(latchPin,LOW);//開始輸入資料
  for(int i = 0; i <= 7;i++){
    //將1按位左移,&上led_state可以判斷led_state的各位是1或者0,從而決定ledPin的HIGH或者LOW
    if(led_state &(1<<i)){
      ledPin = HIGH;
      }
    else
      ledPin = LOW;
    digitalWrite(dataPin,ledPin);//往data裡存入資料
    digitalWrite(clockPin,HIGH);//鎖存資料
    digitalWrite(clockPin,LOW);//準備輸入下一個資料
        }
  digitalWrite(clockPin,LOW);//全部輸入完畢
  digitalWrite(latchPin,HIGH);//送出資料
  /*
  送出資料之後,你可能發現,你輸入的數字和實際亮的燈的順序不對,首先,你要將燈按照D0-D7順序排好,
  最重要的是,你要知道74HC595的資料時怎樣輸入的。
  */
  }

文章中的595晶片管腳圖及內容參考來自《Arduino從基礎到實踐》。

至於資料到底是從低位輸入595,還是高位輸入到595,建議瀏覽https://blog.csdn.net/jbh18401/article/details/75334562