<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機紅外遙控器解碼例程源碼新說(shuō)

單片機紅外遙控器解碼例程源碼新說(shuō)

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏
這是第三次更改這個(gè)紅外遙控解碼的例程了。之前的第一版是直接用51單片機的外部中斷然后在里邊加延時(shí)采集高低電平的長(cháng)短來(lái)判斷引導碼和位1位0的,這個(gè)當初不知是從哪看的,這種方式太誤導人了,如果想用這種思路移植到stm32上,還是趁早打住吧,stm32這種高級處理器難道只用來(lái)紅外遙控解碼嗎?不,肯定會(huì )有更高級的任務(wù)去等待他處理,外部中斷加延時(shí)可以提高遙控的響應速度,但實(shí)際上這種方式很占資源,當cpu在處理其他緊急任務(wù)的時(shí)候,突然來(lái)個(gè)按鍵,打斷進(jìn)程,并且一置占用進(jìn)程,經(jīng)測試過(guò),遙控一個(gè)鍵碼有50-90ms,這對單片機來(lái)說(shuō)可是不小的時(shí)間啊。所以,可以結合外部中斷+定時(shí)器兩種方式來(lái)解碼。
外部中斷開(kāi)啟上升和下降沿同時(shí)觸發(fā)。這樣的話(huà),我們在兩次觸發(fā)后,計算出高或低的點(diǎn)評時(shí)間看是否準確,就可以了。
可以采用狀態(tài)機也就是狀態(tài)變換的思路來(lái)解碼。引導碼和用戶(hù)碼,分成兩部分來(lái)解。高電平和低電平分成兩部分來(lái)解碼。
又因為位1和位0之間區別在于 高電平的時(shí)間不同,也就是 位0 _|—|位1
_|——|兩者的
低電平的時(shí)間都是一樣的,而后邊的高電平長(cháng)的為1短的為0,有這個(gè)特點(diǎn)就特別好解決了??蓞⒖贾暗奈恼?,http://www.xiaovdiy.cn/?post=138
源代碼奉上
if(EXTI_GetITStatus(EXTI_Line12)!= RESET)
{
if(RDATA()==0)//說(shuō)明是下降沿到來(lái)
{

TIM_Cmd(TIM4, ENABLE);
if(lead_flg==0)//說(shuō)明是第一次接收引導碼
{
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)//獲得高電平時(shí)間
{
ir_cnt= TIM_GetCounter(TIM4);
TIM_SetCounter(TIM4,0);
//接收3個(gè)字節24位碼
high_cnt++;//加到24位每8次為1個(gè)字節
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)//說(shuō)明接受完畢
{
lead_flg = 0;
high_cnt = 0;
REM_FLG = 1;//采集完畢 清除標志位

TIM_Cmd( TIM4,DISABLE);
}


}

}
else if(RDATA()!=0)//說(shuō)明是第一次接收引導碼的高電平
{
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)//非引導碼進(jìn)入中斷上升沿觸發(fā)的
{
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;//不是我們要的退出

}


}
}

}


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>