Arduino UNO學習530.74HC595N移位暫存器
Arduino UNO的輸出接口不多,可利用其他晶片如74HC595/N,
來減少腳位的使用,以下為腳位圖,並依說明接上硬體↓
晶片腳位
|
名稱
|
功能
|
硬體對應
|
1~7
|
Q1~Q7
|
輸出
|
各電阻接燈正腳
|
8
|
GND
|
接地
|
GND
|
9
|
Q7S
|
串接輸出
|
|
10
|
MR
|
低電位清除資料
|
+5V
|
11
|
SHCP
|
clock移位時脈
|
D5
|
12
|
STCP
|
latch暫存時脈
|
D4
|
13
|
OE
|
低電輸出
|
|
14
|
DS
|
data資料輸入
|
D2
|
15
|
Q0
|
輸出
|
各電阻接燈正腳
|
16
|
VCC
|
輸入電壓
|
+5V
|
直接引用晶片時脈0~256,作內存8位元資料的閃燈測試↓
int clockPin = 5;
int latchPin = 4;
int dataPin = 2;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int numb = 0; numb < 256; numb++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, numb);
digitalWrite(latchPin, HIGH);
delay(50);
}
}
在實作時經常會有失敗的情形,多半是接錯或晶片腳與麵包板的接觸問題,
請確認接腳或手壓觸動晶片,或另接外部電源6V1A~9V2A使用,
若上面的程式沒問題,再來用陣列方式來指定控制亮燈↓
int clockPin = 5;
int latchPin = 4;
int dataPin = 2;
byte index = 0;
const byte LED_A[10] = {
B11111111,
B00000001,
B00000011,
B00000110,
B00001100,
B00011000,
B00110000,
B01100000,
B11000000,
B10000000,
}; // 8顆10種亮燈方式可自行修改測試
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, LED_A[index]);
digitalWrite(latchPin, HIGH);
delay(100);
index ++;
if
(index == 10) {
index = 0; // 10種亮燈後歸0
}
沒有留言:
張貼留言