您的位置 首页 报告

单片机红外遥控器解码例程源码新说

这是第三次更改这个红外遥控解码的例程了。之前的第一版是直接用51单片机的外部中断然后在里边加延时采集高低电平的长短来判断引导码和位1

这是第三次更改这个红外遥控解码的例程了。之前的第一版是直接用51单片机的外部中止然后在里面加延时收集凹凸电平的长短来判别引导码和位1位0的,这个最初不知是从哪看的,这种方法太误导人了,假如想用这种思路移植到stm32上,仍是趁早打住吧,stm32这种高档处理器莫非只用来红外遥控解码吗?不,必定会有更高档的使命去等候他处理,外部中止加延时能够进步遥控的响应速度,但实际上这种方法很占资源,当cpu在处理其他紧急使命的时分,忽然来个按键,打断进程,而且一置占用进程,经测验过,遥控一个键码有50-90ms,这对单片机来说但是不小的时刻啊。所以,能够结合外部中止+定时器两种方法来解码。
外部中止敞开上升和下降沿一起触发。这样的话,咱们在两次触发后,计算出高或低的点评时刻看是否精确,就能够了。
能够选用状况机也便是状况改换的思路来解码。引导码和用户码,分红两部分来解。高电平和低电平分红两部分来解码。
又由于位1和位0之间差异在于 高电平的时刻不同,也便是 位0 _|—|位1
_|——|两者的
低电平的时刻都是相同的,而后边的高电平长的为1短的为0,有这个特色就特别好处理了。可参阅之前的文章,http://www.xiaovdiy.cn/?post=138
源代码奉上
if(EXTI_GetITStatus(EXTI_Line12)!= RESET)
{
if(RDATA()==0)//阐明是下降沿到来
{

TIM_Cmd(TIM4, ENABLE);
if(lead_flg==0)//阐明是第一次接纳引导码
{
TIM_SetCounter(TIM4,0);//TIM4->CNT=0;(1)
lead_flg=1;
}
else if(lead_flg==2)
{
ir_cnt= TIM_GetCounter(TIM4);
TIM_SetCounter(TIM4,0);
lead_flg=3;
if((ir_cnt<70)||(ir_cnt>90))//测验表明为79或80
{
lead_flg=0; //超出范围退出
return 0;

}
}
else if(lead_flg==3)//取得高电平时刻
{
ir_cnt= TIM_GetCounter(TIM4);
TIM_SetCounter(TIM4,0);
//接纳3个字节24位码
high_cnt++;//加到24位每8次为1个字节
if(high_cnt<=8)
{
user_code[0]>>=1;
}
if(high_cnt<=16)
{
user_code[1]>>=1;
}
if(high_cnt<=24)
{
user_code[2]>>=1;
}
if((ir_cnt>35)&&(ir_cnt<45))//咱们认为是bit 1
{
if(high_cnt<=8)
{
user_code[0]|=0x80;

}
if(high_cnt<=16)
{
user_code[1]|=0x80;
}
if(high_cnt<=24)
{
user_code[2]|=0x80;}
}
if(high_cnt>24)//阐明承受结束
{
lead_flg = 0;
high_cnt = 0;
REM_FLG = 1;//收集结束 铲除标志位

TIM_Cmd( TIM4,DISABLE);
}

}

}
else if(RDATA()!=0)//阐明是第一次接纳引导码的高电平
{
if(lead_flg==0)
{
return 0;
}
else if(lead_flg==1)//咱们只承受一次低电平即可 2
{
ir_cnt= TIM_GetCounter(TIM4);
TIM_SetCounter(TIM4,0);
lead_flg=2;
if((ir_cnt<70)||(ir_cnt>90))
{
lead_flg=0;//不是咱们要的 退出
return 0;

}

}
else if(lead_flg==3)//非引导码进入中止上升沿触发的
{
ir_cnt= TIM_GetCounter(TIM4);
TIM_SetCounter(TIM4,0);

if((ir_cnt<8)||(ir_cnt>20))//测验数据为ir_cnt =9 10安稳值
{
lead_flg=0;
return 0;//不是咱们要的退出

}

}
}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/257164.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部