Bài 8 : Điều khiển Ma trận led Mục đích: Ứng dụng quét Led để điều khiển Ma trận led 2 màu.. 8.1 Nguyên lý điều khiển ma trận led Ma trận led 2 màu được cấu tạo gồm những điểm sáng, mỗ
Trang 1Bài 8 : Điều khiển Ma trận led
Mục đích:
Ứng dụng quét Led để điều khiển Ma trận led 2 màu
Yêu cầu:
Viết chương trình định kì 1s xuất các chữ cái in hoa từ A-Z ra ma trận led
8.1 Nguyên lý điều khiển ma trận led
Ma trận led 2 màu được cấu tạo gồm những điểm sáng, mỗi điểm sáng có 2 bóng đèn đỏ và xanh lá bên trong Khi cả 2 đèn này cùng sáng cho ta cảm giác màu vàng
Nguyên lý điều khiển ma trận led cũng tương tự như led 7 đoạn, ta dùng Port1 để chọn cột, Port0 và Port2 dùng để gửi dữ liệu đỏ và xanh cho hàng đó Các kĩ thuật điều khiển ở ma trận led hoàn toàn tương tự như led 7 đoạn
8.2 Kết nối phần cứng
Gạt switch 3 lên ON để kích hoạt ma trận led
8.3 Viết chương trình
Chương trình được tổ chức gồm 3 module : MAIN để chứa file main.c, TIMER
để gọi hàm quét ma trận led và LED MATRIX để chứa các hàm liên quan đến ma trận led
Các hàm về ma trận led như sau :
void init_led_matrix(); //Khởi tạo ma trận led void scan_led_matrix(); //Quét ma trận led, hàm này được gọi trong timer
void update_display_led_matrix(); //Cập nhật buffer hiển thị
Trang 28.3.1 Hàm init_led_matrix()
void init_led_matrix() {
P0 = 0x00; //red data P2 = 0x00; //green data index_led_matrix = 0; //index use to scan led alphabet_index = 208;// in the initial, led matrix doesn't display anything
}
Trong đó :
P0 : Port để xuất dữ liệu đỏ cho ma trận led
P2 : Port để xuất dữ liệu xanh cho ma trận led
index_led_matrix : biến dùng để quét dữ liệu hiển thị trên ma trận led, ta dùng
biến này để lấy dữ liệu trong 2 buffer (mỗi buffer 8 phần tử) để hiển thị và chọn cột
alphabet_index : biến dùng để lấy dữ liệu cần hiển thị, bỏ vào 2 buffer đỏ và xanh Mảng dữ liệu này thường khá lớn và được khai báo trong file table_led_matrix.h
8.3.2 Hàm scan_led_matrix()
Hàm này được gọi trong timer, có nhiệm vụ xuất buffer hiển thị ra ma trận led, định kì xuất từng phần tử của buffer ra cột tương ứng
void scan_led_matrix() {
P1 = 0; //remove noise P0 = red_buff[index_led_matrix];
P2 = green_buff[index_led_matrix];
P1 = 1 << index_led_matrix;
index_led_matrix = (index_led_matrix + 1) % 8; //next column }
8.3.3 Hàm update_display_led_matrix()
Hàm này dùng để thay đổi nội dung hiển thị, các ứng dụng của người dùng chủ yếu là thay đổi code ở hàm này
void update_display_led_matrix() {
char i;
for(i = 0; i < 8; i++) {
red_buff[i]=alphabet_upcase_led_matrix[i+alphabet_index ];
green_buff[i]=alphabet_upcase_led_matrix[i+alphabet_index];
} }
Hàm main chỉ việc thay đổi alphabet_index (dữ liệu của chữ cái kế tiếp) rồi gọi hàm update_display_led_matrix(), định kì 1s sau đó thay đổi chữ kế tiếp:
Trang 3while(1) {
alphabet_index = (alphabet_index + 8) % 216;
update_display_led_matrix();
}