





| 手把手理解74HC595工作原理 & shiftOut指令 |
| 站長Blog文章單元 - Arduino擴充IO (PWM IC, LED Driver IC, Digital/Analo) | ||||||||||||||||||||||||||||||
| 作者是 xlinx | ||||||||||||||||||||||||||||||
| 週六, 29 五月 2010 22:46 | ||||||||||||||||||||||||||||||
|
擴充Digital IO應用74HC595移位暫存器工作原理說明。
74HC595_腳位說明:
74HC595重要的四個暫存器與狀態時序圖:
對於一個最簡單的74HC595應用來講,可以用Arduino的三個數位I/O埠分別控制DS、SH_CP和ST_CP,然後將MR和OE分別接VCC和地。下面是利用74HC595來控制8個LED。 shiftOut原始動作程式
#include "wiring_private.h"
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val)
{
int i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}
int latchPin = 8; //ST_CP 低電位鎖定資料並輸出Q0~Q7;高電位更新 int clockPin = 12; //SH_CP int dataPin = 11; //DATA void setup() { //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //count up routine for (int first8bits = 0; first8bits < 256; first8bits++) { for (int second8bits = 0; second8bits < 256; second8bits++) { //LATCH低電壓時Q0~Q7輸出 digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, first8bits); shiftOut(dataPin, clockPin, LSBFIRST, second8bits); //將DATA以左移方式更新 digitalWrite(latchPin, HIGH); //latch(ST_CP)高電位更新資料 delay(1000); } } }
|
||||||||||||||||||||||||||||||
| 最近更新在 週日, 04 七月 2010 13:13 |