BÀI 36 : LED MATRIX 8X8 PIC16F877A XC8

5:32:00 PM
1. Sơ đồ chân Led ma trận 8x8


led matrix 8x8
Hình 1: Led ma trận 8x8

2. Câu tạo bên trong của LED matrix 8x8.
Hình 2: Sơ đồ chân và sơ đồ kết nối bên trong led ma trận.
3. Code hiển thị chữ A lên led ma trận
/*
 * File:   matrix_8x8.c
 * Author: Lam 3 Ngon
 * My blog http://xcvn.blogspot.com
 * Created on April 20, 2016, 9:17 AM
 */
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000
#include <xc.h>
// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
const unsigned char FontA[8] = {0xff,0x01,0x00,0xf6,0xf6,0x00,0x01,0xff}; 
// lay ma tu duoi len 8 - 4 - 2 - 1
// sang la 0 tat la 1
void main()
{
unsigned char i;
unsigned char cnt;
unsigned char j;
    TRISB = 0X00;
    TRISD = 0X00;
while(1)
{
for(i=0;i<7;i++)
{
PORTB = FontA[i];
PORTD = 0x01<<i;
__delay_ms(1);
PORTD = 0x00;
}           
    }
}
- Giải thuật để quét LED matrix là chúng ta sẽ quét lần lượt theo từng hàng và cột nha ! Như các bạn thấy đoạn code trên chúng ta sử dụng phương pháp này để quét sao đó xuất kết quả ra PORT !
Nếu thời gian quét đủ nhanh, ta thấy các led dường như sáng liên tục tạo nên chữ như hình bên dưới.
Hình một số font chữ trên led ma trận:

Font 5x7 cho led ma trận;
 
Đây là ảnh mô phỏng trên phần mềm protues.
led matrix 8x8 pic16f877a
- Lý do mình không làm trên LED matrix 5x7 cho ví dụ này là vì LED matrix nào cũng giống nhau cả muốn hiển thị thì phải quét theo hàng và cột thôi. 
- Mình sẽ giải thích chương trình 1 tý :
const unsigned char FontA[8] = {0xff,0x01,0x00,0xf6,0xf6,0x00,0x01,0xff};
đoạn code trên là mã của chữ A. Và cách tính để có được mã này như sau : Mặc định sáng là  và tắt là 1 như vậy hàng đầu tiên là 0xff, hàng thứ 2 từ dưới tính lên là 0x01 các hàng còn lại thương tự.
Và tiếp theo chúng ta có đoạn code này dùng để xuất dữ liệu ra hàng và cột như sau :
for(i=0;i<7;i++)
{
PORTB = FontA[i];
PORTD = 0x01<<i;
__delay_ms(1);
PORTD = 0x00;
}   
Ở đây chúng ta có 8 hàng và 8 cột nên cho vòng for chạy 8 lần và mỗi lần thì PORTD sẽ dịch sang 1 như vậy cho đến hết 8 hàng.

Share this

Related Posts

Previous
Next Post »

6 nhận xét

Write nhận xét
October 31, 2016 at 7:34 PM delete

code này vòng for fai bé hơn 8 chứ ad

Reply
avatar
October 31, 2016 at 9:40 PM delete

từ 0 - 7 nó đã chạy 8 lần rồi !

Reply
avatar
November 3, 2016 at 6:49 AM delete

a ơi...e dùng con 16f877a h làm sao để dịch chữ từ phải sang trái a....chỉ giáo e với

Reply
avatar
November 3, 2016 at 6:50 AM delete

a ơi...e dùng con 16f877a h làm sao để dịch chữ từ phải sang trái a....chỉ giáo e với

Reply
avatar
November 3, 2016 at 6:51 AM delete

a ơi...e dùng con 16f877a h làm sao để dịch chữ từ phải sang trái a....chỉ giáo e với...thanks a nhiều

Reply
avatar
November 6, 2016 at 5:07 AM delete

AD để code ở đâu quên mất tiêu rồi để khi nào kiếm được AD cho ! không thì bạn lên mạng kiếm nha !

Reply
avatar