资源简介
解决433遥控器远距离控制设备,或者遥控器电池电量低时控制设备的过程中,出现杂波影响遥控器灵敏度的问题,这可提高用户体验。
代码片段和文件信息
#include “RF433.h“
/***************************************************
一个字码由 同步码 + 地址码 + 数据码 组成
遥控器的编码芯片不同(不同遥控器),需修改:
#define _start_us_min 80 //同步码用到
#define _start_us_max 120
#define _num0_us_min 15 //数据“0”用到
#define _num0_us_max 25
#define _num1_us_min 3 //数据“1”用到
#define _num1_us_max 14
*******************************************************/
/*************解码函数**********
//如果不需要对码注释下面这一段
Temp_addrh=(RF_data>>8);//地址码
Temp_addrl=(RF_data>>16);//
if((j!=2)&&(Temp_RF_Key==0x08))//对码,开关键
{
RF_Value_Cnt++;
if((j==1)&&(time_duima<40000)) //40000*0.05ms=2s (长按)对码
{
if(RF_Value_Cnt>20)
{
EA=0;
RF_Value_Cnt=0;
j=2;
time_duima=60020;
Address_l=Temp_addrl;
Address_h=Temp_addrh;
Write_Memory(); //写入存储
FLASH_FLAG=1; //对码成功标志
EA=1;
}
}
}
if(Address_l==Temp_addrl && Address_h==Temp_addrh)
*************************/
#define RF_Dat P23
uint16_t time_duima = 6100;
uchar timecnt1 timecnt0;
bit Jump_flag;
bit start_flag;
uchar cntint;
ulong RF_data;
uchar Temp_addrl = 0;
uchar Temp_addrh = 0;
uchar Address_l Address_h; //地址码
uint RF_Key;
extern unsigned short int flag_S;
bit flash_1S;
void soft_decode(void); //译码函数
void soft_count(void) //接受码计数函数
{
if (time_duima < 6005)time_duima++;
if (!RF_Dat) //低电平
{
timecnt0++;
if (Jump_flag && timecnt0>=1)//timecnt0>=1的作用是低电平滤波,当433信号为高电平时出现了低电平杂波,
//一般杂波的持续时间不会大于50us,我们就把低于50us的低电平视为杂波,
//当然这个可以根据不同遥控器的情况把这个50us改为其他不会影响到程序解码的时间
{
Jump_flag = 0; //Jump_flag由0→1代表 低→高 跳变
}
}
else if (RF_Dat) //高电平
{
if (!Jump_flag && timecnt1>=1)//timecnt1>=1的作用是高电平滤波处理,防止在远处控制时出现高电平杂波,
//只有高于50us的高电平才是有效的高电平
{
Jump_flag = 1; //Jump_flag由1→0代表 高→低 跳变
soft_decode();
timecnt1 = 0;
timecnt0 = 0;
}
timecnt1++;
}
}
#define _120_us_min 2
#define _120_us_max 5
#define _360_us_min 6
#define _360_us_max 12
#define _3700_us_min 70//70
#define _3700_us_max 200//120
uint8_t g_RF_reset = 0;
extern uint8_t g_Save_Flag;//存储标志位
extern uint8_t g_u8twinkle_flag;
void soft_decode(void) //接受码处理函数
{
static uint8_t RF_reset_cnt = 0;
uint Temp_RF_Key = 0;
if (!start_flag)
{
if ((timecnt0 > _3700_us_min) && (timecnt0 < _3700_us_max)) //数据头
{
start_flag = 1;
cntint = 0;
Temp_RF_Key = 0;
RF_data = 0;
RF_reset_cnt = 0;
}
else
{
if(RF_reset_cnt++ > 50)
{
g_RF_reset = 1;//复位标志位,用了键值清零即可(消重复按键)
RF_Key = 0;//复位要清键值。
}
}
}
else if (start_flag == 1 && cntint < 24)
{
if ((timecnt0 >= _360_us_min) && (timecnt0 <= _360_us_max)) //数据 0
{
RF_data = RF_data << 1;
cntint++;
}
else if ((timecnt0 >= _120_us_min) && (timecnt0 <= _120_us_max)) //数据 1
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 703 2020-07-02 11:14 RF433.h
文件 88725 2020-10-16 09:36 无线433软件滤波.docx
文件 4317 2020-10-16 09:07 RF433.c
- 上一篇:Qt界面美化
- 下一篇:无线433判断遥控器按键弹起.zip
相关资源
- 无线433判断遥控器按键弹起.zip
- LibJosnSerial.rar
- 喜马拉雅win10文件改名工具
- PCL点云库IterativeClosestPoint用法demo
- 输入法注入源代码VC
-
Dalsa Camerali
nk相机采集代码 - OpenGL实现下雪的效果
- Effective+STL+中文版chm版非常清晰
- 迷宫及最短路径遍历QT程序
- 学好算法与数据结构,程序猿的内功
- 自己开发的记事本
- QT 开启线程接收串口数据并由主线程
- QT调用有道翻译API_在线英汉词典
- QT实现多人屏幕共享系统.rar
- DrawBorad.tar.xz
- DXSDK_Jun10内含网盘软件地址和提取码
- 基于Qt实现的多人聊天
- 坦克大战地图生成代码
- QWidget加载QML界面,并通过信号槽交互
- 多端口服务器多个客户端相互聊天.
- 简单的AStar算法Demo
- 广州地铁路径模拟系统
- FCN模型实现图像分割配套资料分享.
- 打印模板工具
- 光线跟踪算法源码
- UE4赛车游戏.rar
- Cmake从入门到精通pdf教程
- 排课表程序拓扑排序
- AMR-LBM-OpenMP-2D.rar
- 完整的六层电梯模拟程序
评论
共有 条评论