/////////////////////////// 红外发射代码 ///////////////////////////
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rfot=P1^6; //红外线输出
sbit akey=P1^2; //A键输入
sbit bkey=P1^3; //B键输入
sbit ckey=P1^4; //C键输入
sbit dkey=P1^5; //D键输入
void delay_ms(uint xms) //延时子函数1ms*xms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=127;j>0;j--);
}
void delay_112() //红外线延时函数,延时1.12毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=142;n>0;n--);
}
void delay_56() //红外线延时函数,延时0.56毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=70;n>0;n--);
}
void delay_50() //红外线延时函数,延时0.5毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=64;n>0;n--);
}
void bit_boot()
{
rfot=0; delay_ms(9);
rfot=1;
delay_ms(4);
delay_50();
}
void a_key() //A键编码
{
uint i;
bit_boot();
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_56();
}
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_112();
}
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0; delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112(); //用户码
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56(); //用户反码
rfot=0;
delay_ms(1);
rfot=1;
}
void b_key() //B键编码
{
uint i;
bit_boot();
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_56();
}
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_112();
}
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0; delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112(); 用户码
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56(); 用户反码
rfot=0;
delay_ms(1);
rfot=1;
}
void c_key() //C键编码
{
uint i;
bit_boot();
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_56();
}
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_112();
}
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0; delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112(); 用户码
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56(); 用户反码
rfot=0;
delay_ms(1);
rfot=1;
}
void d_key() //D键编码
{
uint i;
bit_boot();
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_56();
}
for(i=0;i<8;i++)
{
rfot=0;
delay_56();
rfot=1;
delay_112();
}
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0; delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_112(); 用户码
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_112();
rfot=0;
delay_56();
rfot=1;
delay_56();
rfot=0;
delay_56();
rfot=1;
delay_56(); 用户反码
rfot=0;
delay_ms(1);
rfot=1;
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
void keyscan() //键盘扫描程序
{
if(akey==0)
{
delay_ms(5);
if(akey==0)
{
a_key();
while(!akey);
}
}
if(bkey==0)
{
delay_ms(5);
if(bkey==0)
{
b_key();
while(!bkey);
}
}
if(ckey==0)
{
delay_ms(5);
if(ckey==0)
{
c_key();
while(!ckey);
}
}
if(dkey==0)
{ delay_ms(5);
if(dkey==0)
{
d_key();
while(!dkey);
TR0=~TR0;
}
}
}
void main() //程序从这里开始
{
init();
while(1)
{
keyscan();
}
}
void T0_time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
/////////////////////////// 红外接收代码 ///////////////////////////
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rfin=P3^7; //红外线输入
void delay_ms(uint xms) //延时子函数1ms*xms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=127;j>0;j--);
}
void delay_112() //红外线延时函数,延时1.12毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=142;n>0;n--);
}
void delay_56() //红外线延时函数,延时0.56毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=70;n>0;n--);
}
void delay_50() //红外线延时函数,延时0.5毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=64;n>0;n--);
}
void delay_35() //红外线延时函数,延时0.35毫秒
{ uint m,n;
for(m=1;m>0;m--)
for(n=60;n>0;n--);
}
void delay_30() //红外线延时函数,延时0.30毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=41;n>0;n--);
}
void delay_25() //红外线延时函数,延时0.25毫秒
{
uint m,n;
for(m=1;m>0;m--)
for(n=26;n>0;n--);
}
void main()
{
uchar i,j,k,temp,m;
uchar usercode,user_code,datecode,date_code;
//k=0;
//temp=0;
//rfin=0;
if(rfin==0)
{
for(m=0;m<10;m++) //跳过9mS引导区
{
if(rfin==0)
{
delay_56();
delay_30();
}
}
if(rfin==1) //跳过4.5mS引导区
{
delay_ms(4);
delay_50();
}
if(rfin==0);
{ delay_56;
delay_56;
delay_30;
}
for(i=0;i<4;i++)
{
temp=0;
k=1;
for(j=0;j<9;j++)
{
if(rfin==0)
{
k=0;
}
else
if(rfin==1)
{
k=1;
}
temp=(temp<<1)|k;
if(rfin==0)
{
delay_25();
if(rfin==1);
delay_56();
delay_30();
}
else
{
if(rfin==1)
{
delay_35();
if(rfin==1);
delay_56();
delay_30();
}
}
}
switch (i)
{
case 0: usercode=temp; //用户码数据寄存器
break;
case 1: user_code=temp; //用户反码数据寄存器
break; case 2: datecode=temp; //数据码数据寄存器
break;
case 3: date_code=temp; //数据反码数据寄存器
break;
}
}
P1=datecode; //将数据码送入P1端口点亮LED
}
}
|