Lập trình điều khiển nhiều led bằng IC HC595 với board mạch Arduino

Đây là bài 9/17 bài của series môn học Lập trình Arduino cơ bản

1. Sơ đồ chân của IC HC595

Arduino chỉ cần dùng 3 chân digital giao tiếp với IC HC595 để điều khiển 8 led. Bên dưới là hình của IC HC595.

IC HC595

IC HC595 có sơ đồ chân như hình bên dưới.

Sơ đồ chân IC HC595
PINS 15, 1-7Q0 đến Q7Các chân xuất tín hiệu, giống như các chân digital được cài đặt là OUTPUT trên Arduino
PIN 8GNDChân Ground (cực âm)
PIN 9Q7′Chân xuất ra tín hiệu Serial
PIN 10MRViết tắt là master reclear, nối cực dương để bật IC hoạt động
PIN 11SH_CPShift register clock pin
PIN 12ST_CPStorage register clock pin (latch pin)
PIN 13OEOutput enable, nối cực âm để các đèn LED có thể sáng được.
PIN 14DSSerial data input
PIN 16VCCCấp nguồn cho IC và LED.

2. Thiết kế mạch điều khiển 8 led với IC HC595

Bên dưới là sơ đồ mạch điều khiển 8 led với IC HC595 được thiết kế với Proteus.

Thiết kế mạch IC HC595 điều khiển 8 led với Proteus

Chân MR của IC HC595 được gắn nguồn, chân OE gắn GND. Chân ST_CP nối chân 8 của Arduino, chân SH_CP nối chân 12, chân DS nối chân 11. Các chân tín hiệu Q0-Q7 nối với 8 đèn led.

3. Viết chương trình điều khiển 8 led với IC HC595

Chương trình bên dưới điều khiển 8 led sáng tuần tự rồi tắt tuần tự với IC HC595.

//chân ST_CP của 74HC595
int latchPin = 8;
//chân SH_CP của 74HC595
int clockPin = 12;
//Chân DS của 74HC595
int dataPin = 11;

//Trạng thái của LED là byte mà sẽ gửi qua shiftOut
byte ledStatus;
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //Sáng tuần tự
  ledStatus = 0;//mặc định không đèn nào sáng (0 = 0b00000000)
  for (int i = 0; i < 8; i++) {
    ledStatus = (ledStatus << 1) | 1;  
    digitalWrite(latchPin, LOW);//các đèn LED không sáng khi digital LOW
    //ShiftOut ra IC
    shiftOut(dataPin, clockPin, MSBFIRST, ledStatus);  
    digitalWrite(latchPin, HIGH);//các đèn LED sẽ sáng với trạng thái vừa được cập nhập
    delay(500);//Dừng khoảng 500 mili giây để thấy các hiệu ứng của đèn LED
  }
  
  //Tắt tuần tự
  for (int i = 0;i<8;i++) {
    ledStatus <<= 1;
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, ledStatus);  
    digitalWrite(latchPin, HIGH);
    delay(500);
  }
}
Kết quả
5/5 - (2 bình chọn)
Bài trước và bài sau trong môn học<< Lập trình điều khiển led bằng nút bấm với board mạch ArduinoLập trình giao tiếp màn hình LCD với board mạch Arduino >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.