电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
单片机解码EV1527 433Mhz模块失败,帮忙看下程序
已解决
73482
个问题
已帮助
5993
位优秀工程师
单片机解码EV1527 433Mhz模块失败,帮忙看下程序
I Miss You
2019-08-28
浏览量:807
..............
#define RF P00
unsigned char RF_Code[3]; //遥控码值
bit RF_SyncFlag; //同步信号标志,为1表示已接受到同步信号
//unsigned char RF;
unsigned char Decode_ok; //解码成功
unsigned char High_WidthLow_Width; //高低电平宽度
unsigned char RF_BitCount; //接收到第几位编码
unsigned char bma1bma2bma3bma4; //接收编码
unsigned char mma1mma2mma3mma4; //用于接收过程存放遥控编码,编码比较两次,这是第一次
unsigned char mmb1mmb2mmb3mmb4; //用于接收过程存放遥控编码,这是第二次
unsigned char rf_ok1rf_ok2rf_ok; //解码过程中的临时接收成功编码标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了
unsigned char Last_state; //保存上一个查询到的电平状态
unsigned char temp_htemp_l;
#define LED1 P03
#define LED2 P01
bit bt_auto;
unsigned ss1;
void RF_MainLoop(void)
{
TMOD=0x10;
TH1=0xff;
TL1=0x88;
ET1=1;
TR1=1;
EA=1;
if(Decode_ok==1)
{
if(RF_Code[0]==0xc8)
{
LED1=0;
Delay_ms(50);
}
if(RF_Code[1]==0xc4)
{
LED1=1;
Delay_ms(50);
}
if(RF_Code[2]==0xc2)
{
LED2=0;
Delay_ms(50);
}
if(RF_Code[3]==0xc1)
{
LED2=1;
Delay_ms(50);
}
}
}
void Timer1 (void) interrupt 3
{
if(!bt_auto)
{
TL1=0x70;
TH1=0xfb;
}
else
{
TL1=temp_l;
TH1=temp_h;
}
TF1=0; // 清除T1中断标志
if(!RF)
{
Low_Width++;
Last_state=0; // 检测到低电平 低电平时间加1记录本次电平状态
}
else // 检测到高电平
{
High_Width++;
if(!Last_state) // 检测到从低到高的跳变已检测到一个完整(高-低)电平周期
{
if(((High_Width>=2)&&(High_Width<=8))&&((Low_Width>=50)&&(Low_Width<=190))) //判同步码
2/5 110/140
{
if((Low_Width>=110)&&(Low_Width<=140)) //根据不同 同步码 宽度,T0加载不同初值
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
}
else
{
if((Low_Width>=140)&&(Low_Width<=160))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xfe;
temp_l=0x6b;
}
else
{
if((Low_Width>=160)&&(Low_Width<=190))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xfd;
temp_l=0xdc;
}
else
{
if((Low_Width>=70)&&(Low_Width<=90))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x30;
}
else
{
if((Low_Width>=90)&&(Low_Width<=110))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x00;
}
else
{
if((Low_Width>=50)&&(Low_Width<=70))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x7a;
}
}
}
}
}
}
}
else if ((RF_SyncFlag)&&((Low_Width>=10)&&(Low_Width<=14))) // 10/14
{
RF_BitCount++; //已经接收到同步码判0
if(RF_BitCount==24)
{
if(!rf_ok1)
{
mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4; //将接收到的编码复制到解码寄存器中
rf_ok1=1; // 通知解码子程序可以解码了
RF_SyncFlag=0;
bt_auto=0;
s=1500;
}
else
{
if(!rf_ok2)
mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4; //将接收到的编码复制到解码寄存器中
rf_ok2=1; // 通知解码子程序可以解码了
RF_SyncFlag=0;
bt_auto=0;
}
}
}
else if((RF_SyncFlag)&&((Low_Width>=2)&&(Low_Width<=8))) // 3/5
{
switch(RF_BitCount)
{
case 0 : { bma1=bma1 | 0x80; break; }//遥控编码第1位
case 1 : { bma1=bma1 | 0x40; break; }
case 2 : { bma1=bma1 | 0x20; break; }
case 3 : { bma1=bma1 | 0x10; break; }
case 4 : { bma1=bma1 | 0x08; break; }
case 5 : { bma1=bma1 | 0x04; break; }
case 6 : { bma1=bma1 | 0x02; break; }
case 7 : { bma1=bma1 | 0x01; break; }
case 8 : { bma2=bma2 | 0x80; break; }
case 9 : { bma2=bma2 | 0x40; break; }
case 10: { bma2=bma2 | 0x20; break; }
case 11: { bma2=bma2 | 0x10; break; }
case 12: { bma2=bma2 | 0x08; break; }
case 13: { bma2=bma2 | 0x04; break; }
case 14: { bma2=bma2 | 0x02; break; }
case 15: { bma2=bma2 | 0x01; break; }
case 16: { bma3=bma3 | 0x80; break; }
case 17: { bma3=bma3 | 0x40; break; }
case 18: { bma3=bma3 | 0x20; break; }
case 19: { bma3=bma3 | 0x10; break; }
case 20: { bma4=bma4 | 0x80; break; }//按键状态第1位
case 21: { bma4=bma4 | 0x40; break; }
case 22: { bma4=bma4 | 0x20; break; }
case 23: { bma4=bma4 | 0x10;
if(!rf_ok1)
{
mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中
rf_ok1=1; // 通知解码子程序可以解码了
RF_SyncFlag=0;
bt_auto=0;
s=1500;
break;
}
else
{
mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//将再次接收到的编码复制到解码寄存器中,
rf_ok2=1; // 通知解码子程序可以解码了
RF_SyncFlag=0;
bt_auto=0;
break;
}
}
}
RF_BitCount++;
}
else {
RF_BitCount=0; RF_SyncFlag=0; bt_auto=0;bma1=0; bma2=0; bma3=0; bma4=0;
High_Width=1;
Low_Width=0;
} //接收到不符合的高-低电平序列
Low_Width=0;High_Width=1;
}
Last_state=1; // 记录本次电平状态
}
if(rf_ok1)
//规定时间内接受到2帧相同的编码数据才有效
{
s--;
if(!s) rf_ok1=0;
if(rf_ok2)
{
if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3)&&(mma4==mmb4))
{
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_Code[0]=mma4&0x80;
//取按键码
RF_Code[1]=mma4&0x40;
RF_Code[2]=mma4&0x20;
RF_Code[3]=mma4&0x10;
Decode_ok=1;
EA=1;
}
}
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
yhj416606438
1527是滚动码,单片机不能解码,只有固定码才可以用单片机解码
发布于
2019-09-01
举报
评论 0
0
0
其他答案
数量:
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
单片机解码EV1527 433Mhz模块失败,帮忙看下程序
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: