2016年2月25日 星期四

Arduino UNO學習530.74HC595N移位暫存器


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
  }

沒有留言:

張貼留言