Mình mới viết đoạn code cho viêch giao tiếp máy tính để hiển thị lên led ma trận. Mình dùng Hyper Teminal để gởi dữ liệu từ PC sang led. Chương trinh của mình không báo lổi nhưng khi gởi 1 kí tự nó kô hiển thị được , nhờ các bạn xem giúp đoạn code có phải do thuật toán sai không, hay vấn đề khác .
CODE :
#include <REGX52.H> // Su dung 89c52 quet hang
#define SHIFT P2_2
#define LATCH P2_1
#define DATA P2_0
unsigned int byte_cot,che_bit,hang,chay,cot,toc_do;
unsigned char chay_gia_tri_bang,ki_tu, uart_data;
void delay(unsigned char time);
void dich_bit();
void hien_thi();
void giai_ma();
void khoi_tao();
void receive_data_pc ();
unsigned char code ma_che_bit[]=
{0xFF,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char code font[]={
0xFF,0x8F,0x77,0x77,0x07,0x77,0x77,0x77,//65(A)
0xFF,0x0F,0x77,0x77,0x0F,0x77,0x77,0x0F,//66(B)
0xFF,0x8F,0x77,0x7F,0x7F,0x7F,0x77,0x8F//;67(C)
};
void delay(unsigned char time )
{
unsigned char i,j;
for(i=0;i<time;i++)
for(j=0;j<121;j++);
}
void khoi_tao()
{
SCON =0X50;// UART CHE DO 1 (8 BIT), REN 1
TMOD=0X20; // TIMER 1 MODE 2, TIMER 0 MODE 1
TH1=0XFD; // BAUD 9600
TH1=0XFD; // BAUD 9600 TA: 11.0592
TR1=1; // KHOI DONG TIMER 1
IE=0X90;// CHO PHEP NGAT TOAN CUC VA NGAT NOI TIEP DE XU LY DU LIEU DEN
TI=0;
RI=0;
}
void receive_data_pc () interrupt 4
{
if(RI==1)
{
RI=0; // Xoa RI de xac dinh du lieu co duoc truyen tu PC xuong ?
uart_data =SBUF; // Khi Goi du lieu tu PC --> COM thi lay tu SBUF
// Dua du lieu vao chan DATA cua IC 595
}
}
void chon_hang(unsigned char hang)
{
switch(hang)
{
case 1:
{
P0=0x7F;// HANG 1
break;
}
case 2:
{
P0=0xBF;//hang 2
break;
}
case 3:
{
P0=0xDF;//hang3
break;
}
case 4:
{
P0=0XEF;//hang 4
break;
}
case 5 :
{
P0=0xF7;// HANG 5
break;
}
case 6:
{
P0=0xFB;// hang 6
break;
}
case 7:
{
P0=0xFD;//hang 7
break;
}
case 8 :
{
P0=0xFE;// hang 8
break;
}
}
}
void dich_bit()
{
for(cot=24;cot>0;cot--)
{
che_bit=ma_che_bit[hang];
byte_cot=font[(ki_tu-32)*8+hang+cot];// quet led
DATA=(bit)(byte_cot&che_bit);
SHIFT=1;// dich cot
SHIFT=0;
DATA=1;
}
}
void hien_thi()
{
for(hang=0;hang<8;hang++)
{
dich_bit();
chon_hang(hang);
LATCH = 1;
LATCH = 0;
delay(1);
P0=0xff;
}
}
void main(void)
{
P0=0xff;
ki_tu=uart_data;
khoi_tao();
while(1)
{
hien_thi();
}
}
Mong các bạn xem giúp mình chút nha. thanks trước .
CODE :
#include <REGX52.H> // Su dung 89c52 quet hang
#define SHIFT P2_2
#define LATCH P2_1
#define DATA P2_0
unsigned int byte_cot,che_bit,hang,chay,cot,toc_do;
unsigned char chay_gia_tri_bang,ki_tu, uart_data;
void delay(unsigned char time);
void dich_bit();
void hien_thi();
void giai_ma();
void khoi_tao();
void receive_data_pc ();
unsigned char code ma_che_bit[]=
{0xFF,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char code font[]={
0xFF,0x8F,0x77,0x77,0x07,0x77,0x77,0x77,//65(A)
0xFF,0x0F,0x77,0x77,0x0F,0x77,0x77,0x0F,//66(B)
0xFF,0x8F,0x77,0x7F,0x7F,0x7F,0x77,0x8F//;67(C)
};
void delay(unsigned char time )
{
unsigned char i,j;
for(i=0;i<time;i++)
for(j=0;j<121;j++);
}
void khoi_tao()
{
SCON =0X50;// UART CHE DO 1 (8 BIT), REN 1
TMOD=0X20; // TIMER 1 MODE 2, TIMER 0 MODE 1
TH1=0XFD; // BAUD 9600
TH1=0XFD; // BAUD 9600 TA: 11.0592
TR1=1; // KHOI DONG TIMER 1
IE=0X90;// CHO PHEP NGAT TOAN CUC VA NGAT NOI TIEP DE XU LY DU LIEU DEN
TI=0;
RI=0;
}
void receive_data_pc () interrupt 4
{
if(RI==1)
{
RI=0; // Xoa RI de xac dinh du lieu co duoc truyen tu PC xuong ?
uart_data =SBUF; // Khi Goi du lieu tu PC --> COM thi lay tu SBUF
// Dua du lieu vao chan DATA cua IC 595
}
}
void chon_hang(unsigned char hang)
{
switch(hang)
{
case 1:
{
P0=0x7F;// HANG 1
break;
}
case 2:
{
P0=0xBF;//hang 2
break;
}
case 3:
{
P0=0xDF;//hang3
break;
}
case 4:
{
P0=0XEF;//hang 4
break;
}
case 5 :
{
P0=0xF7;// HANG 5
break;
}
case 6:
{
P0=0xFB;// hang 6
break;
}
case 7:
{
P0=0xFD;//hang 7
break;
}
case 8 :
{
P0=0xFE;// hang 8
break;
}
}
}
void dich_bit()
{
for(cot=24;cot>0;cot--)
{
che_bit=ma_che_bit[hang];
byte_cot=font[(ki_tu-32)*8+hang+cot];// quet led
DATA=(bit)(byte_cot&che_bit);
SHIFT=1;// dich cot
SHIFT=0;
DATA=1;
}
}
void hien_thi()
{
for(hang=0;hang<8;hang++)
{
dich_bit();
chon_hang(hang);
LATCH = 1;
LATCH = 0;
delay(1);
P0=0xff;
}
}
void main(void)
{
P0=0xff;
ki_tu=uart_data;
khoi_tao();
while(1)
{
hien_thi();
}
}
Mong các bạn xem giúp mình chút nha. thanks trước .
Comment