2018年2月27日 星期二

利用 74HC595 控制 24 顆 LED 輸出


利用 74HC595 控制 24 顆 LED 輸出

源自於 http://blog.udn.com/awei0905/26967572




// Arduino 控制 24 顆 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 的第 12 支接腳
int latchPin = 5;
// 接 74HC595 的第 11 支接腳
int clockPin = 4;
// 接 74HC595 的第 14 支接腳
int dataPin = 16;

void setup() {
  // 初始化所有腳位
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  long val = 1;
  for (int led = 0; led < 24; led++) {
    digitalWrite(latchPin, LOW); // 送資料前須把 latchPin 設為 LOW
    shiftOut(dataPin, clockPin, MSBFIRST, ~(val / 65536)); // 送出第三位元組給最遠的 74HC595
    shiftOut(dataPin, clockPin, MSBFIRST, ~(val / 256)); // 送出第二位元組給中間的 74HC595
    shiftOut(dataPin, clockPin, MSBFIRST, ~(val)); // 送出第一位元組給最近的 74HC595
    digitalWrite(latchPin, HIGH); // 資料送完須把 latchPin 設為 HIGH
    delay(40); // 設定延遲時間,取自可變電阻分壓後的電壓值
    val <<= 1; // 將 val 的位元左移一次
  }
}

沒有留言:

張貼留言