甲機發送:
#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左移一位
}
}
|