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 có sơ đồ chân như hình bên dưới.
PINS 15, 1-7 | Q0 đến Q7 | Cá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 8 | GND | Chân Ground (cực âm) |
PIN 9 | Q7′ | Chân xuất ra tín hiệu Serial |
PIN 10 | MR | Viết tắt là master reclear, nối cực dương để bật IC hoạt động |
PIN 11 | SH_CP | Shift register clock pin |
PIN 12 | ST_CP | Storage register clock pin (latch pin) |
PIN 13 | OE | Output enable, nối cực âm để các đèn LED có thể sáng được. |
PIN 14 | DS | Serial data input |
PIN 16 | VCC | Cấ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.
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);
}
}