源自於
http://coopermaa2nd.blogspot.tw/2010/12/arduino-lab12-74hc595-16-led.html
// Lab12 使用2顆 74HC595 和三支腳位控制 16 顆 LED
//static const uint8_t D0 = 16;
//static const uint8_t D1 = 5;
//static const uint8_t D2 = 4;
//static const uint8_t D3 = 0;
//static const uint8_t D4 = 2;
//static const uint8_t D5 = 14;
//static const uint8_t D6 = 12;
//static const uint8_t D7 = 13;
//static const uint8_t D8 = 15;
//static const uint8_t D9 = 3;
//static const uint8_t D10 = 1;
// 接 74HC595 的 ST_CP (pin 12,latch pin)
int latchPin = 5;
// 接 74HC595 的 SH_CP (pin 11, clock pin)
int clockPin = 4;
// 接 74HC595 的 DS (pin 14)
int dataPin = 16;
void setup() {
// 將 latchPin, clockPin, dataPin 設置為輸出
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int led = 0; led < 16; led++) {
int numberToDisplay = 1 << led;
byte high_Byte = ~ (highByte(numberToDisplay)); //經過反相處理
byte low_Byte = ~ (lowByte(numberToDisplay)); //經過反相處理
// 送資料前要先把 latchPin 拉成低電位
digitalWrite(latchPin, LOW);
// 先送高位元組 (Hight Byte), 給離 Arduino 較遠的那顆 74HC595
shiftOut(dataPin, clockPin, MSBFIRST, high_Byte);
// 再送低位元組 (Low Byte), 給離 Arduino 較近的那顆 74HC595
shiftOut(dataPin, clockPin, MSBFIRST, low_Byte);
// 送完資料後要把 latchPin 拉回成高電位
digitalWrite(latchPin, HIGH);
delay(40);
}
}
74HC595 是一顆八位元的移位暫存器,同時可以控制八個輸出,我們可以把多顆移位暫存器串接 (Daisy chain) 在一起以擴充腳位,例如: 如果串接兩顆 74HC595 移位暫存器,便可以同時控制 16 個輸出。
74HC595 總共有 16 支接腳,底下這 16 支接腳的圖表說明:
腳位編號 | 名稱 | 說明 |
1-7, 15 | Q0 ~ Q7 | 輸出腳位 |
8 | GND | 接地 |
7 | Q7’ | 序列輸出 (Serial Out) |
10 | MR | Master Reset, 清除所有資料, 低電位有效 (Active low) |
11 | SH_CP | SHift register clock pin (Clock Pin) |
12 | ST_CP | STorage register clock pin (Latch Pin) |
13 | OE | Output Enable, 允許輸出,低電位有效 (Active low) |
14 | DS | 序列資料輸入 (Serial data input) |
16 | Vcc | 供應電壓 |
要把兩顆 74HC595 串接起來,方法很簡單,只要把第一顆 74HC595 的 SH_CP (Clock Pin) 和 ST_CP (Latch Pin) 兩支腳位接到第二顆 74HC595 上,接著把第一顆 74HC595 的 Q7’ (序列輸出腳) 接到第二顆的 DS (序列資料輸入) 就可以了。
沒有留言:
張貼留言