|
單片機(jī)源程序如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2) //50us進(jìn)一次中斷
{
RF = HAL_GPIO_ReadPin(ASK_Data_GPIO_Port, ASK_Data_Pin);//接收數(shù)據(jù)的電平 PB9
if (!RF) //如果是低電平
{
ll_w++; // 檢測(cè)到低電平 低電平時(shí)間加1,記錄本次電平狀態(tài)old_rc5
old_rc5=0;
} // 檢測(cè)到低電平 低電平時(shí)間加1,記錄本次電平狀態(tài)old_rc5
else // 檢測(cè)到高電平
{
hh_w++;
if (!old_rc5) // 檢測(cè)到從低到高的跳變,已檢測(cè)到一個(gè)完整(高-低)電平周期
{
if (((hh_w>=2)&&(hh_w<=5))&&((ll_w>=100)&&(ll_w<=130))) //判同步碼 2/5 100/130
{
tb_ok = 1 ;
ma_x = 0;
bma1=0; bma2=0; bma3=0; bma4=0;
}
else if ((tb_ok)&&((ll_w>=8)&&(ll_w<=13))) // 8/13
{
ma_x++; //已經(jīng)接收到同步碼,判0
if(ma_x>23)
{
if(!rf_ok1) //rf_ok1 臨時(shí)接收成功
{
mma1=bma1;
mma2=bma2;
mma3=bma3;
mma4=bma4; //將接收到的編碼復(fù)制到解碼寄存器中
rf_ok1=1; // 通知解碼子程序可以解碼了
tb_ok=0;
// bt_auto=0;
s=1000;
}
else
{
mmb1=bma1;
mmb2=bma2;
mmb3=bma3;
mmb4=bma4; //將接收到的編碼復(fù)制到解碼寄存器中
rf_ok2=1; // 通知解碼子程序可以解碼了
tb_ok=0;
// bt_auto=0;
}
}
}
else if ((tb_ok)&&((ll_w>=2)&&(ll_w<=7))) // 2/7
{
switch (ma_x)
{
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: { bma3=bma3 | 0x08; break; }// 按鍵狀態(tài)第1位
case 21: { bma3=bma3 | 0x04; break; }
case 22: { bma3=bma3 | 0x02; break; }
case 23: { bma3=bma3 | 0x01;
if(!rf_ok1)
{
mma1=bma1;
mma2=bma2;
mma3=bma3;
// mma4=bma4; // 將接收到的編碼復(fù)制到解碼寄存器中
rf_ok1=1; // 通知解碼子程序可以解碼了
tb_ok=0;
// bt_auto=0;
s=1000;
break;
}
else
{
mmb1=bma1;
mmb2=bma2;
mmb3=bma3;
// mmb4=bma4;// 將再次接收到的編碼復(fù)制到解碼寄存器中,
rf_ok2=1; // 通知解碼子程序可以解碼了
tb_ok=0;
// bt_auto=0;
break;
}
}
}
ma_x++;
}
else {ma_x=0; tb_ok=0; bt_auto=0;bma1=0; bma2=0; bma3=0; hh_w=1;ll_w=0;} //接收到不符合的高-低電平序列
ll_w=0;hh_w=1;
}
old_rc5=1; // 記錄本次電平狀態(tài)
}
if(rf_ok1) //規(guī)定時(shí)間內(nèi)接受到2幀相同的編碼數(shù)據(jù)才有效
{
s--;
if(!s) rf_ok1=0;
if(rf_ok2)
{
if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3))
{
rf_ok=1;
rf_ok1=0;
rf_ok2=0;
}
else
{
rf_ok=0;
rf_ok1=0;
rf_ok2=0;
}
}
}
if((rf_ok)) //判斷是否接收成功
{
//TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE);
HAL_TIM_Base_Stop_IT(&htim2);
// Delay_ms(100);
rf_ok=0;
rf_data[0]=mma1;
rf_data[1]=mma2;
rf_data[2]=mma3;
// USART_Send(USART2, rf_data, 3);
decode_ok=1;
// s1=1000;
//TIM_ITConfig(TIM6 , TIM_IT_Update, ENABLE);
HAL_TIM_Base_Start_IT(&htim2);
}
}
}
全部資料51hei下載地址:
STM32_433Project.7z
(1.25 MB, 下載次數(shù): 73)
2019-6-11 03:10 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|