|
/************************甲機*******************************
名稱:甲機串口程序
說明:甲機向乙機發(fā)送控制命令字符,甲機同時還可以接收乙機發(fā)送
的數(shù)字,所接收的數(shù)字顯示在數(shù)碼管上。
***********************************************************/
#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');
}
}
//串口發(fā)送程序
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;
}
}
/*********************************乙機*********************************
名稱:乙機程序接收甲機發(fā)送的字符并完成相應動作
說明:乙機接收到甲機發(fā)送的信號后,根據(jù)相應信號控制完成不同的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;
}
}
}
為什么甲機發(fā)送的字節(jié)乙機收不到,乙機發(fā)送的甲機也沒收到。
|
-
1.jpg
(241.36 KB, 下載次數(shù): 141)
下載附件
2013-8-10 20:14 上傳
|