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 以及 8 顆 LED
- 接上 8 顆 LED,將每顆 LED 短腳 (陰極) 直接接到 GND,然後將每顆 LED 的長腳 (陽極) 個別接至 74HC595 的輸出腳位 D0 ~ D7 並串接一顆 220 ohm 電阻
- 74HC595 接線其一:
- Vcc (pin 16) 與 MR (pin 10) 接 5V
- GND (pin 8) 與 OE (pin 13) 接地
- 74HC595 接線其二:
- DS (pin 14) 接 Arduino pin 11 (下圖藍線)
- ST_CP (pin 12, latch pin) 接 Arduino pin 8 (下圖綠線)
- SH_CP (pin 11, clock pin) 接 Arduino pin 12 (下圖黃線)
- 假如發現 LED 有震動閃爍的現象,可以在 ST_CP (pin 12, latch pin) 上接一顆 0.1uF 電容以去除閃爍現象
步驟二:加上第二顆 74HC595,第二顆移位暫存器一樣要接線連到電源與接地
- Vcc (pin 16) 與 MR (pin 10) 接 5V
- GND (pin 8) 與 OE (pin 13) 接地
步驟三:把兩顆 74HC595 連接起來
只要把第一顆 74HC595 的 SH_CP (Clock Pin) 和 ST_CP (Latch Pin) 兩支腳位接到第二顆 74HC595 上 (下圖中的綠線以及黃線),接著把第一顆 74HC595 的 Q7’ (序列輸出腳) 接到第二顆 74HC595 的 DS (序列資料輸入) 就可以了 (下圖中的藍線)。
步驟四:加上第二組 LED
電路圖
程式碼
12 | pinMode(latchPin, OUTPUT); |
13 | pinMode(clockPin, OUTPUT); |
14 | pinMode(dataPin, OUTPUT); |
18 | for ( int led = 0; led < 16; led++) { |
19 | int numberToDisplay = 1 << led; |
20 | byte high_Byte = highByte(numberToDisplay); |
21 | byte low_Byte = lowByte(numberToDisplay); |
24 | digitalWrite(latchPin, LOW); |
27 | shiftOut(dataPin, clockPin, MSBFIRST, high_Byte); |
29 | shiftOut(dataPin, clockPin, MSBFIRST, low_Byte); |
32 | digitalWrite(latchPin, HIGH); |
因為 shiftOut() 函式一次只能送一個位元組,所以必須將 numberDisplay 拆成兩個位元組分兩次傳送:
2 | shiftOut(dataPin, clockPin, MSBFIRST, high_Byte); |
4 | shiftOut(dataPin, clockPin, MSBFIRST, low_Byte); |
再次提醒:在送資料前,記得要先把 latchPin 拉成低電位,緊接著使用 shiftOut() 函式送出資料,送完資料後還要把 latchPin 拉回高電位。
shiftOut()shiftOut()
Description
Shifts out a byte of data one bit at a time. Starts from either the most (i.e. the leftmost) or least (rightmost) significant bit. Each bit is written in turn to a data pin, after which a clock pin is pulsed (taken high, then low) to indicate that the bit is available.
Note: if you're interfacing with a device that's clocked by rising edges, you'll need to make sure that the clock pin is low before the call to shiftOut(), e.g. with a call to digitalWrite(clockPin, LOW).
This is a software implementation; see also the
SPI library, which provides a hardware implementation that is faster but works only on specific pins.
Syntax
shiftOut(dataPin, clockPin, bitOrder, value)
沒有留言:
張貼留言