红外遥控器 数据格式,按下及松开判断

news2024/11/26 15:51:45

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。

同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。

红外遥控的编码目前广泛使用的是:NEC Protocol 的PWM(脉冲宽度调制)和Philips

RC-5 Protocol 的PPM(脉冲位置调制)。

本次适配的遥控器也为NEC协议。

NEC协议特征:

1、8位地址和8位指令长度;

2、 地址和命令2次传输(确保可靠性)

3、PWM脉冲宽度调制,以发射红外载波的占空比代表“0”和“1”;

4、载波频率为38Khz;

5、位时间为1.125ms或2.25ms;

NEC码位定义:

一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉 冲+560us低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560us高。

NEC遥控器指令的数据格式:

同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。

NEC码规定的连发码(由9ms低电平+2.5m高电平+0.56ms低电平+97.94ms高电平组成),如果在一帧数据发送完毕之后,按键仍然没有放开,则发射重复码,即连发码,可以通过统计连发码的次数来标记按键按下的长短/次数。

同步码为9ms低电平,4.5ms高电平组成,所以可以通过判断9ms后的高电平持续时间来判断是否有连发。

硬件连接:

APMF107输入引脚

红外接收头位于按键板

程序设计思路:

红外接收头接受到红外信号,通过PC3输入引脚进行接收,由于红外波形是一个不断产生高低电平的脉冲,可以通过中断的方式进行数据的接收处理,不同码位对应有不同的时间,逻辑0和逻辑1的高电平持续时间不同,可以通过定时器计数来判断码位以及发送的是逻辑0还是逻辑1.

这里有两种处理方式,第一种为使用定时器中断以及定时器的输入捕获功能进行处理,第二种为使用定时器计数功能和外部中断触发的方式。由于PC3输入引脚不支持定时器的复用和映射功能,所以本次适配采用第二种方式,采用定时器2以及外部中断3。

初始化配置定时器和中断,初始化GPIO_PC3上拉输入,设置IO口与中断的映射关系。空闲状态为高电平,所以中断触发为下降沿触发,在触发中断后如果波形为空闲状态就设为上升沿触发,波形为起始码接收状态,接收下降沿,计算脉宽时间,在9ms范围就为有效波形,更新接受状态准备接收4.5ms,中断设为下降沿触发,准备下次捕获。在4.5ms则表示起始位接收完成,在2,5ms表示数据发送一次后发送的连发码。更新状态准备接受地址码,判断脉宽的周期得到传输的逻辑0还是1,将对应的位进行赋值。地址码占两个字节正码和反码,所以判断赋值的位数是否是16位来标志地址码的接受是否完成,然后将状态更新为接收控制码,与地址码一样计算脉宽周期然后赋值,赋值的位数为32位此次数据接收完成。

在有按键按下时,需要通过串口向上层SOC发送按键的索引以及按键的状态(按下和松开)。定义一个全局变量,按键标志位,什么时候按下,在数据接收完成后标志位置1表示按键已经按下。什么时候松开呢?定义一个静态局部变量初始为空闲状态,用来保存前一次的状态,当当前的状态由其他状态切换到空闲状态,读取定时器7的计数保存下这个时间,当前状态和前一次状态都为空闲,并且保存的计数时间不为0,再读取定时器7计数的时间,用后面的时间减去前面的时间,如果这个时间大于一个设定的值,就代表按键已经松开,标志位置0.

定义一个枚举,保存对应按键的索引,通过键值的判断,赋值对应的索引。按键状态的上报与判断松开的方式同理,只上报按键状态发生改变的那一次。

//按键键值



//红外波形的状态



typedef enum {



}IR_State_enum;



//键值索引枚举



//初始化 
void apm_remote_init(void) 
-->gpio(pc3)、定时器(tmr2)、外部中断3



//中断服务程序————接收处理红外信号 
void apm_remote_nec_handle(void)



//松开判断函数 
u8 remote_keystate(void)



//红外键值检测上报 
void apm_remote_val(void)  
key_event_report(msg.index, SET);



//上报按键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国庆作业5

物理层:负责传输比特流。它将数据转换为比特流并传输。 数据链路层:相邻节点的可靠传输。 网络层:负责在不同的网络中进行数据包的路由和转发。。 传输层:提供端到端的连接。 会话层:负责建立、管理和终止会话。它…

如何用ChatGPT学或教英文?5个使用ChatGPT的应用场景!

原文:百度安全验证 AI工具ChatGPT的出现大幅改变许多领域的运作方式,就连「学英文」也不例外!我发现ChatGPT应用在英语的学习与教学上非常有意思。 究竟ChatGPT如何改变英文学习者(学生)与教学者(老师)呢? 有5个应用场景我感到…

idea清空缓存类

解决办法 网上有很多是让你去清空什么maven依赖,但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK

免费 AI 代码生成器 Amazon CodeWhisperer 初体验

文章作者:浪里行舟 简介 随着 ChatGPT 的到来,不由让很多程序员感到恐慌。虽然我们阻止不了 AI 时代到来,但是我们可以跟随 AI 的脚步,近期我发现了一个神仙 AI 代码生产工具 CodeWhisperer ,它是一项基于机器学习的服…

从其它环境转移到Nacos的方法-NacosSync

理解 NacosSync 组件启动 NacosSync 服务通过一个简单的例子,演示如何将注册到 Zookeeper 的 Dubbo 客户端迁移到 Nacos。 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种…

【Golang】数组 切片

【Golang】数组 && 切片 1、数组 基本概念 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成 因为数组的长度是固定的,所以在Go语言中很少直接使用数组 数组初始化 //1、默认数组中的值是类型的默认值 var arr…

buuctf-[RoarCTF 2019]Easy Java

第一次遇到java类的题目 打开环境,很像sql 点击help 以为是文件包含,,但是不对 这里需要了解JAVA WEB目录结构 WEB-INF:Java的web应用安全目录; 此外如果想在页面访问WEB-INF应用里面的文件,必须要通过w…

localStorage实现历史记录搜索功能

📝个人主页:爱吃炫迈 💌系列专栏:JavaScript 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 为什么使用localStorage如何使用localStorage实现历史记录搜索功能&#xff08…

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软件&am…

[Linux]线程互斥

[Linux]线程互斥 文章目录 [Linux]线程互斥线程并发访问问题线程互斥控制--加锁pthread_mutex_init函数pthread_mutex_destroy函数pthread_mutex_lock函数pthread_mutex_unlock函数锁相关函数使用示例使用锁的细节加锁解锁的实现原理 线程安全概念常见的线程不安全的情况常见的…

蓝桥杯每日一题2023.10.2

时间显示 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 输入为毫秒&#xff0c;故我们可以先将毫秒转化为秒&#xff0c;由于只需要输出时分&#xff0c;我们只需要将天数去除即可&#xff0c;可以在这里多训练一次天数判断 #include<bits/stdc.h> using namespace std…

检索qpython文件夹下.py

需求口令 检索 /storage/emulated/0/qpython 文件夹下的.py文件 编号原文件名&#xff1a;复制到/storage/emulated/0/qpython/py文件/ 没有文件夹就创建 检索qpython文件夹下.py&#xff0c;复制到py文件单独路径 根据这个提问清单和步骤&#xff0c;我们需要完成以下任务&…

Audio2Face的工作原理

预加载一个3D数字人物模型(Digital Mark),该模型可以通过音频驱动进行面部动画。 用户上传音频文件作为输入。 将音频输入馈送到预训练的深度神经网络中。 Audio2Face加载预制的3d人头mesh 3D数字人物面部模型由大量顶点组成,每个顶点都有xyz坐标。 深度神经网络输入音频特征,…

C++基础语法(继承)

终于&#xff0c;经过一路的过关斩将&#xff0c;我们来到了继承面前。还记得在最初学习类于对象时&#xff0c;那个对封装概念一直模糊不清的自己&#xff0c;还记得被模板&#xff0c;被迭代器折磨的日日夜夜吗&#xff1f;这一路你挺过来了&#xff0c;你失去了一些东西&…

zkLogin构建者的最佳实践和业务思考

随着zkLogin在Sui主网上线&#xff0c;构建者可以开始为其应用程序提供丝滑的帐户创建服务。与任何新技术集成一样&#xff0c;构建者需要考虑许多重要的问题&#xff0c;以降低风险并成功优化。 本文概述了其中一些考虑因素&#xff0c;并突出了zkLogin文档中提供的明确指导。…

Linux-centos系统安装MySql5.7

1.配置yum仓库 1.1配置yum仓库 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm 2.使用yum安装Msql 说明&#xff1a;下载大约5分钟左右 yum -y install mysq…

基于Java的教学评价管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统功能结构图系统ER图具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划…

分页前后端完整代码

一、后端代码 User实体类要继承PageVo package com.like.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.like.common.PageVo; import…

web:[SUCTF 2019]EasySQL

题目 点进页面&#xff0c;页面显示为 没有其他的提示信息&#xff0c;查看源代码看看是否有提示 什么都没有&#xff0c;由题目名为easysql&#xff0c;能想到这道题与sql注入有关 先输入1查看回显 再输入其他数字或字母看看回显 都是无显示 先验证是否存在sql注入 构造pay…

python爬取csdn个人首页中的所有封面

#爬取csdn个人首页中的所有封面 import requests import json import reurlhttps://blog.csdn.net/community/home-api/v1/get-business-list? headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safar…