Bài 2: Lập Trình Led Matrix 8x8 Hiện Thị Chữ - IoT47
Có thể bạn quan tâm
Lập trình led matrix 8×8, tiếp nối bài trước, trong bài này mình sẽ hướng dẫn các bạn lập trình led matrix 8×8 hiển thị 1 kí tự bất kì như số hoặc chữ. Mình sẽ test với chữ A nhé.
1. Tạo font cho chữ A

Sau khi lấy được 8bit mã nhị phân tương ứng với các trạng thái bật tắt của LED. Mình đổi sang mã hex để viết cho gọn
2. Thiết kế mạch nguyên lí proteus

Do trong mô phỏng không cần sử dụng điện trở hay transistor để khuyếch đại công suất nên mình sẽ nối trực tiếp các chân IO của vi điều khiển vào tấm led ma trận 8×8 màu đỏ. Ở đây, 8 chân dương của led mình nối vào port P2, các chân dương sẽ điều khển 8 hàng ngang của tấm LED. 8 chân âm mình nối vào port P3, các chân âm này sẽ điều khiển 8 hàng dọc của biến LED. Lúc nãy mình đã lấy font theo hàng ngang, nên các mã led lấy được sẽ xuất ra port P2. Còn port P3 sẽ lo việc quét ( tức sẽ bật xong tắt, bật xong tắt các chân P3)
OK. Bây giờ viế chương trình nhé ! Đầu tiên mình sẽ tạo 1 hàm delay để làm chậm trễ, nếu không quét nhanh quá mắt mình lại chưa kịp nhìn !
C void delay(unsigned int t) //hàm delay { unsigned int x,y; for(x=0;x<t;x++) { for(y=0;y<123;y++); } }| 12345678 | voiddelay(unsignedintt)//hàm delay{unsignedintx,y;for(x=0;x<t;x++){for(y=0;y<123;y++);}} |
Trong vòng lặp chính, mình sẽ tắt hết cổng P3, đưa mã font và cổng P2, bật chân P3_0 , delay 1 chút cho mắt kịp nhìn. Tiếp tục làm tương tự cho đến P3_7 là hết 1 chu kì quét.Nếu bạn để ý ở trên thì mình có nói nối 8 chân âm led vào P3, có nghĩa là port P3 tích cực âm. Nếu mình đưa các chân port P3 lên 1 thì chắc chắn led sẽ tắt. Do vậy để tắt hết led mình chỉ cần gọi P3=0xFF;
C #include <REGX52.H> void delay(unsigned int t) //hàm delay { unsigned int x,y; for(x=0;x<t;x++) { for(y=0;y<123;y++); } } void main() { while(1) { P3 = 0xFF; //tat toan bo LED P2 = 0x18; //xuat ma led dong 1 P3_0=0; //bat sang dong 1 delay(1); //---------Hien thi xong dong thu 1--------// P3 = 0xFF; //tat toan bo LED P2 = 0x3C; //xuat ma led dong 2 P3_1=0; //bat sang dong 2 delay(1); //---------Hien thi xong dong thu 2--------// P3 = 0xFF; //tat toan bo LED P2 = 0x66; //xuat ma led dong 3 P3_2=0; //bat sang dong 3 delay(1); //---------Hien thi xong dong thu 3--------// P3 = 0xFF; //tat toan bo LED P2 = 0x66; //xuat ma led dong 4 P3_3=0; //bat sang dong 4 delay(1); //---------Hien thi xong dong thu 4--------// P3 = 0xFF; //tat toan bo LED P2 = 0x7E; //xuat ma led dong 5 P3_4=0; //bat sang dong 5 delay(1); //---------Hien thi xong dong thu 5--------// P3 = 0xFF; //tat toan bo LED P2 = 0x7E; //xuat ma led dong 6 P3_5=0; //bat sang dong 6 delay(1); //---------Hien thi xong dong thu 6--------// P3 = 0xFF; //tat toan bo LED P2 = 0x66; //xuat ma led dong 7 P3_6=0; //bat sang dong 7 delay(1); //---------Hien thi xong dong thu 7--------// P3 = 0xFF; //tat toan bo LED P2 = 0x66; //xuat ma led dong 8 P3_7=0; //bat sang dong 8 delay(1); //---------Hien thi xong dong thu 8--------// } }| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | #include <REGX52.H>voiddelay(unsignedintt)//hàm delay{unsignedintx,y;for(x=0;x<t;x++){for(y=0;y<123;y++);}}voidmain(){while(1){P3=0xFF;//tat toan bo LEDP2=0x18;//xuat ma led dong 1P3_0=0;//bat sang dong 1delay(1);//---------Hien thi xong dong thu 1--------//P3=0xFF;//tat toan bo LEDP2=0x3C;//xuat ma led dong 2P3_1=0;//bat sang dong 2delay(1);//---------Hien thi xong dong thu 2--------//P3=0xFF;//tat toan bo LEDP2=0x66;//xuat ma led dong 3P3_2=0;//bat sang dong 3delay(1);//---------Hien thi xong dong thu 3--------//P3=0xFF;//tat toan bo LEDP2=0x66;//xuat ma led dong 4P3_3=0;//bat sang dong 4delay(1);//---------Hien thi xong dong thu 4--------//P3=0xFF;//tat toan bo LEDP2=0x7E;//xuat ma led dong 5P3_4=0;//bat sang dong 5delay(1);//---------Hien thi xong dong thu 5--------//P3=0xFF;//tat toan bo LEDP2=0x7E;//xuat ma led dong 6P3_5=0;//bat sang dong 6delay(1);//---------Hien thi xong dong thu 6--------//P3=0xFF;//tat toan bo LEDP2=0x66;//xuat ma led dong 7P3_6=0;//bat sang dong 7delay(1);//---------Hien thi xong dong thu 7--------//P3=0xFF;//tat toan bo LEDP2=0x66;//xuat ma led dong 8P3_7=0;//bat sang dong 8delay(1);//---------Hien thi xong dong thu 8--------//}} |

Như vậy là đã hiện được chữ A lên LED matrix. Khá đơn giản phải không ! Bây giờ chúng ta hay tìm cách rút gọn đoạn code trên cho đơn giản, ngắn gọn hơn nhé. Phần mã font xuất ra port P2 mình sẽ đưa vào 1 mảng dữ liệu như sau:
C unsigned char code maled[8]={0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66,0x66};| 1 | unsignedcharcode maled[8]={0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66,0x66}; |
Phần mã font xuất ra port 3 mình sẽ đưa vào 1 mảng dữ liệu như sau, mã này thực chất là xuất cả byte ra cổng P3 thay vì xuất từng chân như code trên, miễn sao cho chỉ có 1 chân sáng trong 1 thời điểm !
C unsigned char code maquet[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};| 1 | unsignedcharcode maquet[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; |
Bây giờ chỉ việc tạo 1 vòng lặp for chạy từ 0 đến 7 là đây dữ liệu trong các mảng ra PORT là xong. Đoạn code rất ngắn gọn !
C #include <REGX52.H> unsigned char code maled[8]={0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66,0x66}; unsigned char code maquet[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; void delay(unsigned int t) //hàm delay { unsigned int x,y; for(x=0;x<t;x++) { for(y=0;y<123;y++); } } void main() { int i; while(1) { for(i=0;i<8;i++) { P3 = 0xFF; //tat toan bo LED P2 = maled[i]; //xuat ma led dong i P3 = maquet[i]; //bat sang dong i delay(1); //delay de mat kip nhin } } }| 123456789101112131415161718192021222324252627 | #include <REGX52.H> unsignedcharcode maled[8]={0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66,0x66};unsignedcharcode maquet[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; voiddelay(unsignedintt)//hàm delay{unsignedintx,y;for(x=0;x<t;x++){for(y=0;y<123;y++);}}voidmain(){inti;while(1){for(i=0;i<8;i++){P3=0xFF;//tat toan bo LEDP2=maled[i];//xuat ma led dong iP3=maquet[i];//bat sang dong idelay(1);//delay de mat kip nhin}}} |
Kết quả vẫn thế 🙂

Bài tiếp theo trong chuỗi tutorial lập trình led matrix 8×8
Related posts:
Thuật toán FFT cho mạch nháy theo nhạc[Matrix LED] Bài 20: Quét led bằng DMA[Matrix LED] Bài 17: Stream video trên module led matrix P5 64x32[Matrix LED] Bài 18: Hiển thị mọi ngôn ngữ trên thế giới với thư viện và tool VNmakeFontTừ khóa » Giới Thiệu Led Ma Trận 8x8
-
Tìm Hiểu Về Led Ma Trận
-
Giới Thiệu Led Matrix 8x8 (PNP) - Tài Liệu Text - 123doc
-
Hiển Thị Hình ảnh Với LED MATRIX 8x8 | Cộng đồng Arduino Việt Nam
-
[Sưu Tầm] Điều Khiển Lập Trình Led Matrix 8×8 Hiển Thị Kí Tự
-
Giới Thiệu LED Ma Trận 8x8 - YouTube
-
Led Matrix 8x8 1.9mm - Linh Kiện 888
-
Led Matrix 8x8 Sáng Đỏ - Linh Kiện 3M
-
Led Matrix 8x8 3MM 32x32MM (1 Mầu Katot) - Thế Giới Chip
-
LED Matrix RGB 8*8 8x8
-
Lập Trình Led Ma Trân 8x8 2 Màu - ECHIPKOOL SHOP
-
Matrix 8x8 - Asm - Simple - ECHIPKOOL SHOP
-
Led Matrix 8x8 2088AS
-
[PDF] BÀI GIẢNG