资源简介
无线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
相关资源
- Gerber文件的编辑程序
- 编译好的json_lib.lib 包含64位,32位,头
- 招商银行信用卡中心2018春招IT笔试数
- FFmpeg和SDL,读内存中的视频流,进行
- 是男人就下一百层
- vs2010 ffmpeg实时解码h264码流
- 图片-视频互换程序
- linux系统的二级文件系统(QT实现了简
- 设计一个用于人事管理的“人员”类
- 基于ffmpeg将avi视频转换为mp4视频
- Qt实现的简单的中国象棋程序
- 数据加密与数字签名系统
- Kinect手势代替鼠标控制PC
- 物业费管理系统源码超详细注释附文
- 长整数的代数计算 算法
- 二进制方式打包和解包文件
- 个人银行账户管理系统
- 使用ffmpeg将多张图片生成H264裸流并获
- OpenGL场景漫游
- VS开发进阶源码---烟花特效的生日祝福
- 资源管理器 中国地质大学数据结构
- 设停车场内只有一个可停放n辆汽车的
- vc写的一个游戏里面三维场景漫游
- 编程常用的素材(含png、jif、bmp、j
- Midas to FLAC3D-vs2010
- 直通BAT算法精讲
- ros小海龟定点移动程序
- 学生成绩档案管理系统—保证可用
- 面试算法LeetCode刷题班
- 交通咨询模拟系统
评论
共有 条评论