Điều khiển Ma trận led

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 56 - 59)

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.

BKIT HARDWARE CLUB www.bkit4u.com 57 8.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

while(1) { alphabet_index = (alphabet_index + 8) % 216; update_display_led_matrix(); delay_ms(1000); }

BKIT HARDWARE CLUB www.bkit4u.com 59

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 56 - 59)