资源简介
无线433不使用延时解决按键抖动,长按遥控器按键也只执行一次,快速按遥控器按键又不影响用户灵敏度体验的问题

代码片段和文件信息
#include “extern.h“
#include “decode.h“
#include “eeprom.h“
#include “action.h“
#include “pwm.h“
byte start_code=0;
word timecnt0 ;
byte cntint ;
DWORD key ;
byte match_ok=0;
//byte old_key;
word RF_Value_Cnt=0;
word tempkey;
byte key_counter=0;
byte addrl_temp;
byte addrh_temp;
byte RFRecOK=0;
BYTE Address_l=0;
BYTE Address_h=0;
DWORD RF_Key;
DWORD tempsbuf = 0;
DWORD CleanAddrTime=0;
// byte start_flag ;
// byte temp_key = 0;
byte match_flag= 0; //对码标志
byte Jump_flag = 0;
#define clear_delay 970
void delay(void);
extern bit key_once;
void soft_count(void) //接受码计数函数
{
if(RF_Value_Cnt<15000)
RF_Value_Cnt++;
if(!IR_Dat) //低电平
{
timecnt0++;
if(Jump_flag)Jump_flag=0;
}
else
{
if(!Jump_flag)
{
Jump_flag=1;
soft_decode();
timecnt0=0;
}
}
}
void soft_decode(void) //接受码处理函数
{
if(start_code ==0)
{
if(timecnt0 >= _start_us_min && timecnt0 <= _start_us_max)//9ms-13ms
{
start_code=1;
tempsbuf=0; //缓存数
cntint=0;
tempkey=0;
key=0;
}else if(timecnt0<=1){
key_once=0;
}
}
else if((start_code ==1) && (cntint < 24))
{
if(( timecnt0 > _num0_us_min ) && ( timecnt0 <= _num0_us_max )) //接收到数据 0
{
tempsbuf=tempsbuf<<1; //左移一位,从低位开始
cntint++;
}
else if(( timecnt0 > _num1_us_min ) && ( timecnt0 < _num1_us_max )) //接收到数据 1
{
tempsbuf=tempsbuf<<1; //左移一位,从低位开始
tempsbuf|=0x01; //把“1”放入最后一位
cntint++;
}
else //接收错误 重置接收状态
{
start_code=0;
tempsbuf=0;
cntint=0;
}
}
if(cntint ==24)
{
start_code=0;
tempkey = tempsbuf &0x3ff; //键值(临时)
addrl_temp =(tempsbuf >>12 )&0x00000f;
addrh_temp =(tempsbuf >>16 )&0x0000ff; //取地址
if((!match_ok) && (tempkey == LIGHTKEY)) //对码
{
key_counter++;
if((check_key < 36000) && (key_counter>=25))
{
key_counter=0;
Address_l =addrl_temp;
Address_h =addrh_temp ; //取对码地址
match_ok=1;
match_flag=1; //对码标志成功
bWriteFlash =1; //发起保存信号
FlashDn = 5;
}
}
if((Address_l==addrl_temp&&Address_h==addrh_temp) ||match_flag==0)
{
RF_Key = tempkey;
RFRecOK=1;
CleanAddrTime = clear_delay; // 70ms
}
else
{
CleanAddrTime = clear_delay; // 70ms
}
cntint=0;
timecnt0=0;
}
/* if((timecnt0 > _9ms_min)&&(timecnt0 < _9ms_max)&&(timecnt1>_4_5ms_min)&&(timecnt1<_4_5ms_max)) //?eê???′|àí
{
start_code = 1; //同步码标志
cntint = 0;
longkey_num = 0;
}
else if((timecnt0>_9ms_min)&&(timecnt0<_9ms_max)&&(timecnt1>_2_5ms_min)&&(timecnt1<_2_5ms_max)) //3¤°′?ü??′|àí
{
if(longkey_num > 5)
{
longkey_num = 6;
longkey = old_key; //长按键码标志
long_flag=1;
}
else
{
longkey_num++;
}
}
else if((start_code==1)&&(cntint<32))
{
if((timecnt0>_0_56ms_min)&&(timecnt0<_0_56ms_max)&&(timecnt1>_0_56ms_m
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1101 2020-10-14 16:07 decode.h
文件 63104 2020-10-16 11:27 无线433判断遥控器按键弹起.docx
文件 3961 2020-10-15 08:31 decode.c
相关资源
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
- c MFC 画多边形
- 用C 实现的对网络上的ARP数据包进行
- Microsoft基本类库 (MFC)(C 库)
评论
共有 条评论