#include
#include
#define uchar unsigned char
uchar co
uchar keyscane();
void transmit(uchar dat);
void delay(unsigned int x);
void send(void);
uchar hang=0,lie=0;
main()
{ uchar k=0,i;
SCON=0x50; //串口方式 1,10位UART ,波特率可调
TMOD=0x20; //T1方式2,T2CON的TCLK=0,T1溢出脉冲作波特率。
TL1=0xcc; //常数 f=12,波特率600
TH1=0xcc; //常数
TR1=1; //启动T1
while(1)
{
k=keyscane(); //扫描键盘
if(k==1) //k=1,有键按下
{
k=0; //清标志位
i=4*hang+lie; //计算键值
transmit(tab1[i]); //调用发送函数
} //以上发送
if(RI==1) //接收到一帧数据
{
send(); //调用接收函数
}
}
}
void transmit(uchar dat) //发送
{
P1=dat; //发送数据在本机p1口显示
SBUF=dat; //发送
while(TI==0)
;
TI=0;
}
void send(void) //接收函数
{
RI=0;
P1=SBUF;
}
void delay(unsigned int x) //延时
{ unsigned int i;
for(i=0;i
}
uchar keyscane() //键盘扫描
{ P0=0xf0;
if((P0&0xf0)!=0xf0)
{ switch(P0)
{ case 0x70:lie=0;break;
case 0xb0:lie=1;break;
case 0xd0:lie=2;break;
case 0xe0:lie=3;break;
default:break;
}
delay(700);
P0=0x0f;
if((P0&0x0f)!=0x0f)
{ switch(P0)
{ case 0x07:hang=0;break;
case 0x0b:hang=1;break;
case 0x0d:hang=2;break;
case 0x0e:hang=3;break;
default:break;
}
return 1;
}
}
else
{
return 0;
}
}
上一篇:T2中断动态显示时分秒程序
下一篇:c51 奇偶校验位应用