Chạy chữ trê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 59 - 62)

Mục đích:

Nắm vững nguyên lý điều khiển ma trận led. Xây dựng ứng dụng trên ma trận led.

Yêu cầu:

Viết chương trình chữ chạy trên ma trận led, cung cấp interface giúp người dùng có thể thay đổi dễ dàng.

9.1 Nguyên lý chạy chữ trên ma trận led

Để chạy 1 dòng chữ qua ma trận led, bạn sẽ có 1 buffer lưu tồn bộ dịng chữ đó. Buffer này thường là 1 mảng các byte. Chương trình sẽ định kì cắt 1 phần trong buffer này đổ dữ liệu vào buffer nhỏ hơn dùng để quét led. Chương trình quét led sẽ hiển thị ra led ma trận.

Tại thời điểm T1, dữ liệu đổ vào buffer quét led là chữ “H”. Tại thời điểm T2, 1 phần chữ H và E được đổ vào buffer này, và tại thời điểm T3 là chữ “E”. Nếu khoảng cách giữa các thời điểm nhỏ lại, bạn sẽ thấy hiệu ứng dòng chữu chạy qua ma trận led.

Để sinh ra được buffer chứa tồn bộ dịng chữ, bạn phải xử lý dữ liệu đã lưu sẵn (tạm gọi là font chữ), ghép nối chúng sao cho đẹp mắt. Chẳng hạn muốn hiện chữ “HELLO WORLD”,bạn phải làm như sau:

Ø Lấy font của chữ “H”, bỏ những cột trống ở đầu và cuối, phần còn lại bỏ vào buffer.

Ø Lấy font của chữ “E”, bỏ những cột trống ở đầu và cuối,thêm 1 byte 0x00 vào buffer (tạo 1 nét rời giữa H và E) rồi bỏ dữ liệu của E vào.

Ø Tương tự, hết chữ “O”, bạn thêm khoảng 3 byte 0x00.

Tuỳ vào tài nguyên của hệ thống, bạn định nghĩa ra độ dài tối đa của buffer này. Trong quá trình sinh ra buffer, chương trình sẽ cập nhật độ dài hiện tại và sẽ dừng việc ghép chữ nếu độ dài là quá mức cho phép.

9.2 Kết nối phần cứng

Gạt switch 3 lên ON để kích hoạt ma trận led.

9.3 Viết chương trình

Chương trình sẽ gồm 3 group là TIMER, LED MATRIX và MAIN. Các group TIMER và LED MATRIX được dùng lại. Trong file led_matrix.h ta khai báo thêm 1 hàm cung cấp cho người dùng:

void set_message(char strMsg[]);

Hàm này cho phép người dùng thay đổi nội dung chữ chạy qua ma trận led. Ví dụ gọi set_message(“HELLO WORLD”).

Để xử lý chuỗi trong KeilC, bạn include thêm 2 thư viện sau ở đầu file led_matrix.c:

#include <stdlib.h> #include <string.h>

Dữ liệu của buffer lớn gồm có 100 cột, biến total_length dùng để lưu độ dài hiện tại của mảng buffer này:

unsigned char data_buff[100]; int total_length;

Mảng alphabet_upcase_led_matrix là dữ liệu font của các chữ cái in hoa. Trong chương trình này chỉ hiển thị được các chữ cái in hoa, không bao gồm các chữ cái thường và các kí tự số. 9.3.1 Hàm set_message(char strMsg[]) void set_message(char strMsg[]) { int length; int i; int j; int index_char; length = strlen(strMsg); //fill data into data_buff for(i=0;i<length;i++) {

index_char = (strMsg[i] - 'A')*8; //position to get font data if(strMsg[i] != ' ') //is not blank character

{

for(j=index_char;;j++)//remove 0x00 at the begining {

if(alphabet_upcase_led_matrix[j] != 0x00) break;

}

BKIT HARDWARE CLUB www.bkit4u.com 61

data_buff[total_length++]= alphabet_upcase_led_matrix[j];

} }

else //blank character,add 3 bytes 0x00 { if(total_length != 100) data_buff[total_length++] = 0x00; if(total_length != 100) data_buff[total_length++] = 0x00; if(total_length != 100) data_buff[total_length++] = 0x00; } } } 9.3.2 Hàm main() void main() { init_main();

init_timer0(); //use for scan led

init_timer1(); //use for delay_ms() function init_led_matrix(); //initiate led matrix

set_message("HELLO WORLD"); while(1) { delay_ms (300); update_display_led_matrix(); } }

Hàm update_display_led_matrix() tăng con trỏ alphabet_index để lấy dữ liệu trong data_buff bỏ vào red_buff và green buff. Biến alphabet_index được khởi tạo là -8 với ý nghĩa ở trạng thái đầu tiên màn hình led 7 đoạn khơng hiển thị gì cả. Khi hiện thực hàm này bạn chú ý kiểm tra điều kiện của alphabet_index để lấy dữ liệu cho đúng. Chi tiết của chương trình các bạn tham khảo tại thư mục Bai 9.

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

Tải bản đầy đủ (PDF)

(110 trang)