Nguyên văn bởi picachu
Xem bài viết
![Big Grin](http://dientuvietnam.net/forums/images/smilies/biggrin.gif)
![Big Grin](http://dientuvietnam.net/forums/images/smilies/biggrin.gif)
![Big Grin](http://dientuvietnam.net/forums/images/smilies/biggrin.gif)
#include <REGX51.H>
#include <AT89X51.H>
sbit chuong = P2^7;
sbit truyen = P2^6;
sbit ROW_1= P1^0;
sbit ROW_2= P1^1;
sbit ROW_3= P1^2;
sbit ROW_4= P1^3;
sbit COL_1= P1^4;
sbit COL_2= P1^5;
sbit COL_3= P1^6;
sbit COL_4= P1^7;
sbit led1 = P0^0;
sbit led2 =P0^1;
sbit led3 =P0^2;
sbit led4 =P0^3;
sbit led5 =P0^4;
sbit led6 =P0^5;
sbit led7 =P0^6;
sbit led8 =P0^7;
sbit led9 =P2^0;
sbit led10= P2^1;
sbit led11= P2^2;
sbit led12= P2^3;
sbit led13= P2^4;
static tre,led,hang,cot;
void ScanMatrix(void);
void hienthi(void);
void transfer(void);
void receivefeedback(void);
void ACK(void);
void main(void)
{
// ----Khoi tao cong noi tiep -----------------
SCON = 0x50; // che do du lieu 8 bit
PCON = 0X80; // CHIA CHO 16
// Khoi tao Timer1 dung de tao 4800 Baud Rate
TMOD = 0x21;
TH1 = 0xFA;
TH1= 0xFA;
TR1 = 1;
TI=1;
//------khai bao ngat---------------------------
EA = 1;
ET0 = 1;
ES = 1;
// ----- dat gia tri dau cho bien --------------
P0 = 0XFF;
P1 = 0XFF;
P2 = 0XFF;
P3 = 0XFF;
led = 0;
tre = 5;
//------khai bao timer0 ------------------------
TF0 = 1;
TR0 = 1;
//----- vong lap vo tan ------------------------
while (1)
{
ScanMatrix();
hienthi();
}
}
//---------TIMER0_INT --------------------------
void Timer0_int(void) interrupt 1
{
TH0 = 0X3C; // TAO THOI GIAN 0.05ms
TL0 = 0XB0;
TF0 = 0;
if (tre>0) tre =tre-1;
else
{
tre = 5; // tao tre 5x0.05 = 0.25s
if (led>0)
{
led -=led;
//nhay led
}
}
}
unsigned int ValueForDelay10s;
void IsrTimer0(void) interrupt 1 using 2
{
ValueForDelay10s++; //tang bien dem
if(chuong)
chuong=0;
else //lenh if...else nay nham muc dich dao muc tin hieu ra chuong.
chuong=1;
}
//--------- ScanMatrix -------------------------
/* tra ve gia tri hang va cot duoc an tai hai bien
"hang" va "cot". Neu khong co nut nao duoc an thi
hang = cot = 0. Gia su phim A(1,1) duoc an thi
hang = cot = 1 trong suot thoi gian phim dc an */
void ScanMatrix()
{
// QUET HANG 1 ;P1.0 - P1.3
P1 = 0X0F;
if (P0_0 == 0)
{
hang = 1;//hang 1
}
else
{ if(P0_1==0)
hang = 2;//hang 2
else
{ if (P0_2==0)
hang = 3;//hang 3
else
if (P0_3 == 0) hang = 4;//hang4
else hang = 0;
}
}
// QUET COT ;P1.4 - P1.7
P1 = 0Xf0;
if (P0_4 == 0)
{
cot = 1;//cot 1
}
else
{ if(P0_5==0)
cot = 2;//cot 2
else
{ if (P0_6==0)
cot = 3;//cot 3
else
if (P0_7 == 0) cot = 4;//cot4
else cot =0;
}
}
}
// --------- hien thi -----------------------
void transfer(void)
{
unsigned char m;
P2_6 = 1;
m=hang*4+1;
switch(m)
case 1:
void send_serial(unsigned char*s) //báo lỗi ở đây
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,00,C,0*1111010' );
send_serial(crlf);
}
}
}
break
case 2:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,01,C,0*1111011' ); //DEAD SLOW AHEAD
send_serial(crlf);
}
}
}
break
case 3:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,02,C,0*1111000' ); //SLOW AHEAD
send_serial(crlf);
}
}
}
break
case 4:
void send_serial(unsigned char *s)
{
P2^6=1;
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,03,C,0*1111001' );
send_serial(crlf);
}
}
}
break
case 5:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,04,C,0*1111110' );//HALF AHEAD
send_serial(crlf);
}
}
}
break
case 6:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,11,C,0*1111010' );
send_serial(crlf);
}
}
}
break
case 7:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,12,C,0*1111001' );
send_serial(crlf);
}
}
}
break
case 8:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
{
send_serial('$ETL,O,13,C,0*1111000' );
send_serial(crlf);
}
}
}
break
case 9:
void send_serial(unsigned char *s)
{
//Truyen ma nhan dang
//gui $ETL
while(*s !=0x0)
SBUF=*s;
while(!TI) //doi den khi gui xong
{
}
TI=0;
s++;
{
}
main()
{
unsigned char crlf()={0x0D,0x0A,0x0};
serial_init();
for(;;)
Comment