/************************甲机*******************************
名称:甲机串口程序
说明:甲机向乙机发送控制命令字符,甲机同时还可以接收乙机发送
的数字,所接收的数字显示在数码管上。
***********************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K1=P1^7;
uchar temp,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
void put_to_serail(uchar c);
void init();
void keyscan();
//主程序
void main()
{
init();
while(1)
{
delay(10);
keyscan();
switch(temp)
{
case 0://put_to_serail('X');
LED1=LED2=1;
break;
case 1://put_to_serail('A');
LED1=0;LED2=1;
break;
case 2://put_to_serail('B');
LED1=1;LED2=0;
break;
case 3://put_to_serail('C');
LED1=0;LED2=0;
break;
}
}
}
//初始化程序
void init()
{
temp=0;
LED1=LED2=1;
P0=0x00;
SCON=0x50;
TMOD=0x02;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=RI=0;
TR1=1;
EA=1;
ES=1;
}
//延时程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//键盘扫描程序
void keyscan()
{
if(K1==0)
{
delay(10);
if(K1==0)
{
temp++;
if(temp==4)
temp=0;
}
while(!K1);
}
if(K1==0)
{
put_to_serail('X');
}
if(K1==1)
{
put_to_serail('A');
}
if(K1==2)
{
put_to_serail('B');
}
if(K1==3)
{
put_to_serail('C');
}
}
//串口发送程序
void put_to_serail(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//串口接收程序
void Serial_INIT() interrupt 4
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=9)
P0=table[SBUF];
else
P0=0x00;
}
}
/*********************************乙机*********************************
名称:乙机程序接收甲机发送的字符并完成相应动作
说明:乙机接收到甲机发送的信号后,根据相应信号控制完成不同的LED点亮动作
**********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K2=P1^7;
uchar num;
void delay(uint);
void init();
void keyscan();
//主程序
void main()
{
init();
while(1)
{
delay(100);
keyscan();
}
}
//初始化程序
void init()
{
num=0;
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=RI=0;
TR1=1;
EA=1;
ES=1;
}
//延时子程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//按键扫描程序
void keyscan()
{
if(K2==0)
{
delay(5);
if(K2==0)
{
SBUF=num;
num++;
if(num==10)
num=0;
while(TI==0);
TI=0;
}
}
}
//乙机串口中断程序
void serial_0() interrupt 4
{
if(RI==1)
{
RI=0;
switch(SBUF)
{
case 'X':LED1=1;LED2=1;break;
case 'A':LED1=0;LED2=1;break;
case 'B':LED1=1;LED2=0;break;
case 'C':LED1=0;LED2=0;break;
}
}
}
为什么甲机发送的字节乙机收不到,乙机发送的甲机也没收到。
|