我按照网上的各种案例写了一下代码,可是不能实现功能,我不知道是不是因为没有对码的原因,想问问如何实现对码功能。
以下是我的代码:
unsigned char RF; //RF无线接口
unsigned char a_code1,a_code2,a_code3; //第一次遥控编码
unsigned char rf_ok1; //第一次遥控编码赋值成功
unsigned char b_code1,b_code2,b_code3; //第二次遥控编码
unsigned char rf_ok2; //第二次遥控编码赋值成功
unsigned char t_code1,t_code2,t_code3; //临时存放遥控编码
unsigned char last_state; //上一个编码电平
unsigned char hh_w,ll_w; //高低电平宽度
unsigned char flag_syn; //同步码标志位,置1表示已经收到同步码,置0表示未接收到同步码
unsigned char rf_data[3]; //存储遥控编码
unsigned char ma_x; //接收到第几位编码
unsigned int s; //收到第一个码和第二个码之间不能超过S个周期
unsigned char rf_ok=1;
#define RF P00
void Timer0_init(void)
{
TMOD=(TMOD&0xFC)|0x01;
TH0=0xff;
TL0=0x88;
TR0=1;
ET0=1;
EA=1;
}
void TIMER0_ISR(void)interrupt 1
{
TH0=0xff;
TL0=0x88;
if(!RF)
{
ll_w++;
last_state=0;
}
else{
hh_w++;
if(!last_state)
{
if(((hh_w>=1)&&(hh_w<=5))&&((ll_w>=90)&&(ll_w<=140)))
{
flag_syn=1;
ma_x=0;
t_code1=0;t_code2=0;t_code3=0;
}
else if((flag_syn)&&((ll_w>=7)&&(ll_w<=14)))
{
ma_x++;
if(ma_x==24)
{
if(!rf_ok1)
{
a_code1=t_code1;
a_code2=t_code2;
a_code3=t_code3;
rf_ok1=1;
flag_syn=0;
s=1000;
}
else{
b_code1=t_code1;
b_code2=t_code2;
b_code3=t_code3;
rf_ok2=1;
flag_syn=0;
}
}
}
else if((flag_syn)&&((ll_w>=2)&&(ll_w<=6)))
{
switch(ma_x)
{
case 0 : { t_code1=t_code1 | 0x80; break;}
case 1 : { t_code1=t_code1 | 0x40;break; }
case 2 : { t_code1=t_code1 | 0x20;break; }
case 3 : { t_code1=t_code1 | 0x10;break; }
case 4 : { t_code1=t_code1 | 0x08;break; }
case 5 : { t_code1=t_code1 | 0x04;break; }
case 6 : { t_code1=t_code1 | 0x02;break; }
case 7 : { t_code1=t_code1 | 0x01;break; }
case 8 : { t_code2=t_code2 | 0x80;break; }
case 9 : { t_code2=t_code2 | 0x40;break; }
case 10: { t_code2=t_code2 | 0x20;break; }
case 11: { t_code2=t_code2 | 0x10;break; }
case 12: { t_code2=t_code2 | 0x08;break; }
case 13: { t_code2=t_code2 | 0x04;break; }
case 14: { t_code2=t_code2 | 0x02;break; }
case 15: { t_code2=t_code2 | 0x01;break; }
case 16: { t_code3=t_code3 | 0x80;break; }
case 17: { t_code3=t_code3 | 0x40;break; }
case 18: { t_code3=t_code3 | 0x20;break; }
case 19: { t_code3=t_code3 | 0x10;break; }
case 20: { t_code3=t_code3 | 0x08;break; }
case 21: { t_code3=t_code3 | 0x04;break; }
case 22: { t_code3=t_code3 | 0x02;break; }
case 23: { t_code3=t_code3 | 0x01;
if(!rf_ok1)
{
a_code3=t_code3;
a_code2=t_code2;
s=100;
}
else
{
b_code3=t_code3;
b_code2=t_code2;
b_code1=t_code1;
}
flag_syn=0;
break;
}
}
ma_x++;
}
else {ma_x=0;flag_syn=0;t_code3=0;t_code2=0;t_code1=0;ll_w=0;}
ll_w=0;hh_w=1;
}
last_state=1;
}
if(rf_ok1)
{
s--;
if(!s)rf_ok1=0;
if(rf_ok2)
{
if((a_code1==b_code1)&&(a_code2==b_code2)&&(a_code3==b_code3))
{
rf_ok=1;
rf_ok1=0;
rf_ok2=0;
}
else
{
rf_ok=0;
rf_ok1=0;
rf_ok2=0;
}
}
}
if((rf_ok))
{
EA=0;
rf_ok=0;
rf_data[0]=a_code1;
rf_data[1]=a_code2;
rf_data[2]=a_code3;
EA=1;
}
}
unsigned long GetAddr_433M()
{
unsigned long result=((rf_data[0])<<16+(rf_data[1]<<8)+(rf_data[2]&0xf0))>>4;
return result;
}
unsigned char GetKey_433M()
{
unsigned char result=(rf_data[2]&0x0f);
return result;
}
void Rst_rf_data()
{
rf_data[2]=0x00;
}
void RF_MainLoop()
{
unsigned char tmp;
Timer0_init();
tmp=GetKey_433M();
if(tmp==0x08)
{
Led_on(1);
Rst_rf_data();
}
if(tmp==0x08)
{
Led_on(2);
Rst_rf_data();
}
if(tmp==0x02)
{
Led_off(1);
Rst_rf_data();
}
if(tmp==0x01)
{
Led_off(2);
Rst_rf_data();
}
}