1. Sơ đồ chân 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;
}
}
}
* 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ữ A 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.
- 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.
EmoticonEmoticon