甲机发送:
#include<reg51.h> //包含头文件reg.51,定义51单片机的专用寄存器
void main() //主函数
{
unsigned char i;
unsigned char led[]={3,2,3,4,5,6,7,8}; //定义要发送的动态密码数据
TMOD=0x20; //定时器T1工作于方式2
SCON = 0x50; //定义串行口工作于方式1,允许接收
TH1 = 0xfd; //波特率为9600bps
TL1 = 0xfd;
TR1 = 1;
do{
SBUF=0X01;
while(!TI);
TI=0;
while(!RI);
RI=0;
} while( (SBUF^0x02)!=0 );
for(i=0;i<8;i++)
{
SBUF=led[ i];
while(TI==0);
TI=0;
}
do{
SBUF=0xaa;
while(!TI);
TI=0;
while(!RI);
RI=0;
}while(SBUF!=0xaa);
while(1);
}
乙机接收:
#include<reg51.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义0~9共阳极显示字型码
unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义1接收数据缓冲区
void disp(void); //显示函数声明
void delay(unsigned char i) //定义延时函数声明
{
unsigned char j,k; //定义无符号字符型变量j和k
for(k=0;k<i;k++) //双重for循环语句实现软件延时
for(j=0;j<120;j++);
}
void main() //主函数
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2
TH1=0xfd; //波特率定义
TL1=0xfd;
SCON=0x50; //定义串行口工作于方式1,允许接收
TR1=1;
while(1)
{
do{while(!RI)disp();
RI=0;
}while(SBUF!=0x01);
SBUF=0x02;
while(!TI)disp();
TI=0;
i=0;
do{
while(!RI)disp();
RI=0;
buffer[ i]=SBUF;
i++;
}while(SBUF!=0xaa);
SBUF=0xaa;
while(!TI)disp();
TI=0;
}
}
void disp()
{
unsigned char w,i;
w=0x01;
for(i=0;i<8;i++)
{
P2=~w; //送反相后的位码
P1=tab[buffer[ i]]; //送共阳极显示字型段码,buffer[ i]作为数组分量的下标
delay(10); //延时
w<<=1; //w左移一位
}
}
|