基於arduino的74HC595模組的原理與使用
阿新 • • 發佈:2018-12-31
為什麼使用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