KẾT NỐI LED MA TRẬN 8x8 VỚI ARDUINO
Màn hình ma trận LED có thể được sử dụng để hiển thị hầu hết các ký tự và hình vẽ. Hầu hết các bảng hiệu LED hiện đại sử dụng các loại bảng ma trận khác nhau được lập trình bằng vi điều khiển. Trong hướng dẫn này, chúng ta sẽ kết nối để giao tiếp một ma trận LED 8 × 8 màu duy nhất với Arduino và hiển thị một vài ký tự trong đó. Ma trận 8 × 8 bao gồm 64 chấm led ( có thể gọi 64 chấm điểm ảnh này là các pixel). Mỗi đèn LED là mỗi pixel và các đèn LED này được kết nối với tổng số 16 chân. Bạn có thể xác định sơ đồ chân và sơ đồ mạch của nó bằng hình dưới đây.
C1 đến C8 là các chân cột
R 1 đến R8 - là chân hàng
Ta có thể thấy ở sơ đồ bên phải các chân Anode (chân cực dương của led) trên cùng 1 hàng được nối chung với nhau, tương tự các chân Cathode (chân cực âm của led) trên cùng một cột được nối chung với nhau. Đó là các chân của led ma tran 8x8 (8 hàng x 8 cột). Nếu một điện áp dương được đặt vào chân R1 và âm cho C1, chúng ta có thể thấy pixel (hay led) đầu tiên sáng. Nếu chúng ta đặt điện áp mức thấp cho C2 thì pixel thứ hai (led thứ 2 hàng 1) sẽ bật. Với cách này này, chúng ta có thể bật sáng các pixel tuỳ ý. Để làm việc này dễ dàng hơn, chúng ta sẽ sử dụng Arduino để điều khiển các chân của ma trận led 8x8.
Sơ đồ kết nối led ma trận 8x8 với Arduino
Như bạn có thể thấy trong sơ đồ, mỗi chân cột được kết nối với chân Arduino thông qua điện trở 220Ω. Tất cả các chân hàng được kết nối với một trong các chân đầu ra của IC 74HC595N (được sử dụng như một thanh ghi dịch). Các ký tự được hiển thị bằng cách sử dụng các kỹ thuật ghép kênh. Thanh ghi dịch được kết nối với Arduino qua 3 chân dữ liệu (SER), chân chốt (RCLK) và chân xung clock (SRCLK).
Chương trình điều khiển
int latchPin = 4; // khai báo các chân kết nối thanh ghi dịch
int clockPin = 5;
int dataPin = 3;
int pins [8] = {6, 7, 8, 9, 10, 11, 12, 13}; // các chân cathode chung
byte A[8] = { B00000000, // mã để hiển thị ký tự tương ứng lên led ma trận
B00011000,// các mã này bạn có thể tự viết tuỳ nhu cầu ký tự hiển thị trông như thế nào
B00100100,
B01000010,
B01111110,
B01000010,
B01000010,
B00000000
};
byte B[8] = { B00000000,
B11111100,
B10000010,
B10000010,
B11111100,
B10000010,
B10000010,
B11111110
};
byte blank[8] = { B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000
};
byte R[8] = { B00000000,
B01111000,
B01000100,
B01000100,
B01111000,
B01010000,
B01001000,
B01000100
};
void setup() {
Serial.begin(9600); // dữ liệu code đã lập trình từ máy tính nạp vào Arduino với tốc độ 9600 baud rate
pinMode(latchPin, OUTPUT); // cấu hình các chân là ngõ ra
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for (int i = 0; i < 8; i++) { // vòng lặp để cấu hình các chân cathode chung
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], HIGH);
}
}
void loop() {
for (int k = 0; k < 1000; k++) { // hiển thị mỗi ký tự A là ký tự đã lập trình ở trên trong 1 giây
display_char(A);
}
for (int k = 0; k < 1000; k++) {
display_char(B);
}
for (int k = 0; k < 1000; k++) {
display_char(R);
}
}
void display_char(byte ch[8]) { // phương pháp ghép kênh
for (int j = 0; j < 8; j++) {
digitalWrite(latchPin, LOW);
digitalWrite(pins[j], LOW);
shiftOut(dataPin, clockPin, LSBFIRST, ch[j]);
digitalWrite(latchPin, HIGH);
//delay(1);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B00000000); //tắt hết led trước khi hiển thị ký tự tiếp theo
digitalWrite(latchPin, HIGH);
digitalWrite(pins[j], HIGH);
}
}
Hotline: 0979 466 469