原始解码程序
- void decode(void) //无线接收码解码
- {
- if(RFIN)
- {
- if(High_low) //处理下降沿触发
- {
- Signal_L = SignalCnt; //保存低电平的时间
- SignalCnt=0;//把同周期低电平记录时间清零
- High_low=0;//清除下降沿触发标志
- Low_high=1; //上升沿触发标志
- }
- if( Low_high)
- {
- SignalCnt++ ; //记录同周期高电平时间
- }
- }
- else //引脚为低电平时
- {
- if(Low_high) //处理上升沿触发
- {
- Signal_H = SignalCnt; //记录高电平的时间
- SignalCnt=0;//把同周期高电平记录时间清零
- Low_high=0;//清除上升沿触发标志
- if((80<=Signal_L)&& (Signal_L <=100)) // 判断是否为引导码
- {
- if((40<= Signal_H) && (Signal_H <= 50))
- {
- tb_flag=1; // 进入红外遥控
- }
- else
- {
- goto loop2; //错码清除
- }
- // CleanTime = 0;
- }
- // 调教最优解
-
- else if((3<=Signal_L)&& (Signal_L <= 8))//判断是否为高低电平
- {
- if((3<= Signal_H) && (Signal_H <= 8)) //低电平
- {
- // Signal_DataTemp >>= 1; /* 右移一位 */
- // Signal_DataTemp &= ~(0x80000000); /* 接收到0 */
- Signal_DataTemp = Signal_DataTemp << 1;
- Signal_DataTemp = Signal_DataTemp + 0;
- wx_bit++;
- }
- else if((14<= Signal_H) && (Signal_H <= 19))//高电平
- {
- // Signal_DataTemp >>= 1; /* 右移一位 */
- // Signal_DataTemp |= 0x80000000; /* 接收到1 */
- Signal_DataTemp = Signal_DataTemp << 1;
- Signal_DataTemp = Signal_DataTemp + 1;
- wx_bit++;
- }
- else {
- goto loop2; //错码清除
- }
- // CleanTime = 0;
- }
- else
- { //错码+长按的重复码在此清零
- loop2:
- Low_high=0;
- High_low=0;
- tb_flag=0;
- SignalCnt = 0;
- Signal_DataTemp=0;
- return ;
- }
- if (wx_bit ==32)
- {
- tb_flag=0;
- wx_bit=0;
- wx_ok=1;
- Timer_100ms =0;
- wx_wait_cal = 1;
-
- }
- }
- High_low=1; //下降沿触发
- SignalCnt++ ; //记录低电平时间
- }
- }
复制代码
原始解码值程序
- void cal_rev_code(void) //解码
- {
- //存32位无线数据
- //用户码 //用户码反码 //按键码 //按键码反码
- if (wx_wait_cal) //无线码接收成功未写入buf
- {
-
- HW_ReceiveBuffer[0] = Signal_DataTemp ; /* 得到地址码 */
- HW_ReceiveBuffer[1] = (Signal_DataTemp >> 8) & 0xff; /* 得到地址反码 */
- HW_ReceiveBuffer[2] = (Signal_DataTemp >> 16) & 0xff; /* 得到按键码 */
- HW_ReceiveBuffer[3] = (Signal_DataTemp >> 24) & 0xff; /* 得到按键反码*/
- if (Timer_100ms >= 0&&Timer_100ms <= 6)//前六百毫秒无动作
- {
- wx_wait_cal = 0;
- // Signal_DataTemp=0;
- }
-
- }
- }
复制代码 通用解码程序
- void decode(void) //无线接收码解码
- {
- if(wx_wait_cal==0)
- {
- SignalCnt++ ; //记录一位数据周期时间
- if(RFIN)
- {
- Low_high=1;//上升沿触发
-
- }
- else //引脚为低电平时
- {
- if(High_low==0)
- {
- SignalCnt=0;
- High_low=1;//下降沿第一次触发
- }
- if((High_low==1) &&( Low_high==1)==1) //下降沿第二次触发 一个数据周期
- {
- if((SignalCnt<=150)&&(SignalCnt>=120)==1) //9+4.5=13.5ms属于引导码 9+2.25=11.25ms属于重复码
- {
- wx_bit =0;
- Low_high=0;
- High_low=0;
- SignalCnt=0;
- }
- else if((SignalCnt<=25)&&(SignalCnt>=20)==1) // 高电平 2.25ms=22.5
- {
- Signal_DataTemp >>= 1; /* 右移一位 */
- Signal_DataTemp |= 0x80000000; /* 接收到1 */
- wx_bit ++;
- Low_high=0;
- High_low=0;
- SignalCnt=0;
- }
- else if((SignalCnt<=14)&&(SignalCnt>=7)==1) // 低电平1.12ms=11.2
- {
- Signal_DataTemp >>= 1; /* 右移一位 */
- Signal_DataTemp &= ~(0x80000000); /* 接收到0 */
- wx_bit ++;
- Low_high=0;
- High_low=0;
- SignalCnt=0;
- }
- else
- {
- Low_high=0;
- High_low=0;
- wx_bit=0;
- Signal_DataTemp=0;
- wx_wait_cal=0;
- }
- if(wx_bit==32)
- {
- wx_wait_cal=1;
- Low_high=0;
- High_low=0;
- wx_bit=0;
- }
- }
- }
- }
- }
复制代码
通用解码值程序
- void cal_rev_code(void) //解码
- {
- //存32位无线数据
- //用户码 //用户码反码 //按键码 //按键码反码
- if (wx_wait_cal==1) //无线码接收成功未写入buf
- {
- Signal_DataTemp_1=Signal_DataTemp;
- HW_ReceiveBuffer[0] = Signal_DataTemp_1 ; /* 得到地址码 */
- HW_ReceiveBuffer[1] = (Signal_DataTemp_1 >> 8) & 0xff; /* 得到地址反码 */
- HW_ReceiveBuffer[2] = (Signal_DataTemp_1 >> 16) & 0xff; /* 得到按键码 */
- HW_ReceiveBuffer[3] = (Signal_DataTemp_1 >> 24) & 0xff; /* 得到按键反码*/
- if(HW_ReceiveBuffer[0] == 0X80 && HW_ReceiveBuffer[1] == 0X7F)
- {
- code_Buffer1= ~(HW_ReceiveBuffer[1]);
- code_Buffer2= ~(HW_ReceiveBuffer[3]);
- if(HW_ReceiveBuffer[0] == code_Buffer1&&HW_ReceiveBuffer[2] == code_Buffer2)
- {
- KeyCode_num=HW_ReceiveBuffer[2];
- }
- }
- wx_wait_cal = 0;
- Signal_DataTemp_1=0;
- Signal_DataTemp=0;
- }
- }
复制代码
HWV2.0.zip
(993.31 KB, 下载次数: 0)
HWV3.0.zip
(997.32 KB, 下载次数: 0)
|