Led matrix 8x8 PIC16F877A CCS

6:41:00 AM
Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn lập trình với LED MATRIX 8x8 sử dụng PIC16F877A. Trước tiên mình sẽ giới thiệu về LED MATRIX 8X8.
- Giới thiệu.
LED MATRIX 8x8 đơn giản chỉ là 64 con LED được sắp xếp với nhau theo dạng ma trận, thành 8 hàng và 8 cột, tức là 16 chân. Vì mỗi loại LED MATRIX có sơ đồ chân riêng nên các bạn hãy tra cứu datasheet của nó để có thể lắp mạch chính xác nhé! (mà kiểm tra từng chân của LED matrix cũng biết được.
Trong bài viết này mình sử dụng LED matrix "row anode", có nghĩa là các chân điều khiển hàng của ma trận chính là cực dương của LED. Đây là hình minh họa:


matrix 8x8

Để LED MATRIX hoạt động, chúng ta chỉ cần cấp dòng điện vào các chân ROWs và nối các chân COLUMNS với GND.
Ứng dụng của LED MATRIX là được sử dụng rộng rãi trong ngày nay đặc biệt là trong các biển quảng cáo. Từ bài đăng này các bạn có thể nguyên cứu thêm và phát triển PROJECT của mình lên từ 1 LED có thể lên 2,3, hoặc 4 LED.
- Đây là ảnh mô phỏng trên protues.
matrix 8x8 pic16f877a ccs
- Đây là code chương trình.
#include <16f877a.h>
#fuses NOLVP,NOWDT,PUT,XT
#use delay(clock=4000000)

// Khai bao bien.


// Khai bao du lieu hien thi.

const unsigned char a[] = {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xE3,0xC1,0x81,0x03,0x03,0x81,0xC1,0xE3,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

};


const unsigned char b[] = {

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
};

const unsigned char c1[] = {

0b00000000,
0b00000000,
0b10000000,
0b11000000,
0b11100000,
0b11110000,
0b11111000,
0b11111100,
};

void init_PORTD(void)

{
OUTPUT_D(0X00); // Khoi tao Port D.
SET_TRIS_D(0X00); // Cau hinh PORTD la ngo ra.
}

void init_PORTB(void)

{
OUTPUT_B(0X00); // Khoi tao Port B.
SET_TRIS_B(0X00); // Cau hinh PORTB la ngo ra.
}

void scanmatrixsta(unsigned char dat_dis)

{
// Khai bao bien.
unsigned char scancode,i;

// Dinh nghia ham.

scancode = 0x01; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i<=dat_dis+7;i++)
{
OUTPUT_B(a[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode << 1; // Dich ma quet LED.
}
}

void sangtat(unsigned char n)

{
// Khai bao bien.
unsigned char i,j,dat_dis,scancode;
while(n--)
{
dat_dis=8;
for(j=1;j<=21;j++) // Thoi gian cua 1 trang thai man hinh (21 x 8 x 3ms).
{
scanmatrixsta(dat_dis); // Quet LED de hien thi.
}
}
}

void traiphai(unsigned char n)

{
unsigned char i,j,dat_dis,scancode;
while(n--)
{
for(dat_dis=8;dat_dis<=23;dat_dis++)
{
for(j=1;j<=12;j++)
{
scancode = 0x01; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i>=dat_dis-7;i--)
{
OUTPUT_B(a[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode << 1; // Dich ma quet LED.
}
}
}
}
}

void duoilen(unsigned char n)

{
// Khai bao bien.
unsigned char i,j,k,l,dat_dis,scancode;
unsigned char b[]={0x00};
unsigned char c[]={0x00};
while(n--)
{
for(k=8;k>=1;k--)
{
dat_dis=8;
for(j=1;j<=12;j++)
{
scancode = 0x01; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i<=dat_dis+7;i++)
{
l=k-1;
b[i] = ~a[i];
b[i] = b[i]<<l;
OUTPUT_B(~b[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode << 1; // Dich ma quet LED.
}
}
}

for(k=1;k<=8;k++)

{
dat_dis=8;
for(j=1;j<=12;j++)
{
scancode = 0x01; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i<=dat_dis+7;i++)
{
b[i] = ~a[i];
b[i] = b[i]>>k;
OUTPUT_B(~b[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode << 1; // Dich ma quet LED.
}
}
}
}
}

void sangdanphaitrai(unsigned char n)

{
unsigned char i,j,k,scancode,dat_dis;
while(n--)
{
OUTPUT_B(0xFF); // Xuat ma hien thi.
delay_ms(100); // Tan so quet LED - 3ms.
delay_ms(100);
delay_ms(100);

for(k=1;k<=8;k++)

{
for(j=1;j<=(100/k);j++)
{
dat_dis=15;
scancode = 0x80; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i>=dat_dis+1-k;i--)
{
OUTPUT_B(a[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode >> 1; // Dich ma quet LED.
}
}
}
}
}

void sangdantrenxuong(unsigned char n)

{
// Khai bao bien.
unsigned char i,j,k,l,dat_dis,scancode;
unsigned char b[]={0x00};
while(n--)
{
for(k=8;k>=1;k--)
{
dat_dis=8;
for(j=1;j<=20;j++)
{
scancode = 0x01; // Ma quet LED ban dau - 00000001.
for(i=dat_dis;i<=dat_dis+7;i++)
{
l=k-1;
b[i] = ~(a[i]<<l);
b[i] = b[i]>>l;
OUTPUT_B(~b[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode << 1; // Dich ma quet LED.
}
}
}
}
}

void sangdan2benvao(unsigned char n)

{
unsigned char i,j,k,scancode,scancode1,dat_dis;
while(n--)
{
OUTPUT_B(0xFF); // Xuat ma hien thi.
delay_ms(100); // Tan so quet LED - 3ms.
delay_ms(100);
delay_ms(100);

for(k=1;k<=4;k++)

{
for(j=1;j<=(100/k);j++)
{
dat_dis=15;
scancode = 0x80; // Ma quet LED ban dau - 00000001.
scancode1 = 0x01;
for(i=dat_dis;i>=dat_dis+1-k;i--)
{
OUTPUT_B(a[i]); // Xuat ma hien thi.
OUTPUT_D(scancode); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode = scancode >> 1; // Dich ma quet LED.
}

for(i=dat_dis-7;i<=dat_dis-8+k;i++)

{
OUTPUT_B(a[i]); // Xuat ma hien thi.
OUTPUT_D(scancode1); // Xuat ma quet (ACT = 1).
delay_ms(2); // Tan so quet LED - 3ms.
OUTPUT_D(0x00); // Chong lem hien thi.
scancode1 = scancode1 << 1; // Dich ma quet LED.
}

}

}
}
}

// Chuong trinh chinh.

void main (void)
{
unsigned char dat_dis;
init_PORTB(); // Cau hinh Port B.
init_PORTD(); // Cau hinh Port D.

while(1)

{
sangtat(1);
traiphai(2);
duoilen(2);
sangdantrenxuong(2);
sangdanphaitrai(2);
sangdan2benvao(2);
}
}
- Link download project Click here

Share this

Related Posts

Previous
Next Post »

2 nhận xét

Write nhận xét
10/30/2016 delete

code này hiển thị j vậy ad

Reply
avatar
10/30/2016 delete

code này hiển thị j vậy ad

Reply
avatar