【单片机】18-红外线遥控
一、红外遥控背景知识
1.人机界面
(1)当面操作:按键,旋转/触摸按键,触摸屏
(2)遥控操作:红外遥控,433M/2.4G无线通信【穿墙能力强】,蓝牙-WIFI-Zigbee-LoRa等无线网络
2.红外遥控相关知识
1.红外线基本知识
红外线和紫外线人眼看不到,人可以看到的红外线是其中的一部分
红外线传播不远
2.红外发射和接收
单向通信
一个发送器【供电发光,发送红外信号】对应一个接收器【光电传感器】
光【1】----》电【0】
没有反应的可能性:
1)发送和接收的频率不同
2)上层协议不同
万能遥控器:是包含多种协议
3.38KHz载波和数字信号,调制
载波:无线通信过程中,1和0无法在空气中传播,将1和0叠加在载波上
数字信号:1和0
调制:将1和0叠加在载波上
解调:将调制的数据反调制,将数据取出来
电话线上的猫:先将网络型号转换为电话线可以传播的信号然后进行传播
4.红外遥控器通信协议
遥控器和接收端的交互
二、原理图分析
1.原理图和接线
1.接收端原理图
2.IR1接收模块原理
发送(调制)和接收(解调)
(1)一体集成式接收头内部已经内置了红外载波解调功能,从IRD引脚出来的就是通信的二进制信号。所以单片机的IO可以直接接IRD引脚来读取红外信号中的通信信息。所以38KHz的载波的调制和解调过程对编程是透明的(可以忽视的)
(2)红外接收头内部本身是有个相反的,意思是:平时发送方无发送信号时接收到的是1,有发送载波时接受头IRD引脚输出的是0,意味着后面时序图是相反的。
2.红外遥控器全解析
https://www.cnblogs.com/zhugeanran/p/9334289.html
1.功能演示
2.拆解
3.芯片bingding工艺
3.红外遥控系统工作过程综述
1.发射端
一般是一个红外遥控器,内置一个芯片,检查按键,收集键值,调制到38kHz
2.传播
通过红外头传播
3.接收端
对载波进行解调,得到1和0的信号,解开键值
三、NEC协议讲解
1.红外遥控协议原理
因为逻辑1和逻辑0在空气中传输过程中是不稳定的
1.红外遥控协议的作用
从二进制的层面上定义了如何传输一帧数据(传输逻辑1应该多长的时间周期,传输逻辑0应该多长时间周期)
数据是一帧一帧的传,不可以出现一帧没有传输完就传输下一帧。
2.红外遥控的特征
- 8 位地址和 8 位命令长度
- 为提高可靠性每次传输两遍地址(用户码)和命令(按键值)
- 通过脉冲串之间的时间间隔来实现信号的调制
- 38Khz 载波
- 每位的周期为 1.12ms(逻辑0) 或者 2.25ms(逻辑1)
3.解析协议的关键点
时间周期【传输逻辑1和传输逻辑0的时间不同】
4.不同协议的差异
时序的不同,调制的方式不同,但是低层还是按照38KHz发送
5.为什么需要协议?
只需要低层协议就足够
2.NEC协议的关键点
1.载波和信号
2.关键:1和0分别如何表示
3.数据是一帧一帧的整帧传输
接收方无法预测什么时候可以接收完毕【异步:轮询或者中断】
4.NEC是串行协议
数据是一个bit一个bit的传输
5.时序中的时间仍然是关键点
四、官方示例代码
1.如何得到一段代码精确延时时间【软仿真】
涉及到延时时间问题时,一定要先确定频率
延时等级问题
注意点:每一次修改完后要记得重新运行一次
实际上耗费时间包括:
1)调用函数的时间
2)函数内部代码的执行
#include<reg51.h>
#include"ired.h"void DelayMs(unsigned int x) //0.14ms误差 0us
{unsigned char i;while(x--){for (i = 0; i<13; i++){}}
}
void func(void){unsigned char a=1;
}void main(){unsigned char a=0,y=0;a=1; //392usDelayMs(1); // 529us 实际上使用529-392=137usDelayMs(70); //8945 实际上使用8945-529=8416usfunc();y=a+4;a=2;
2.中断函数
void ReadIr() interrupt 0
{unsigned char j,k;unsigned int err;Time = 0; DelayMs(70); // 8416us---软仿真测试//时序图中要持续9us的时间处于低电平(相反)if (IRIN == 0) //确认是否真的接收到正确的信号{ //检查是否超时 err = 1000; //1000*10us=10ms,超过说明接收到错误的信号/*当两个条件都为真时循环,如果有一个条件为假的时候跳出循环,免得程序出错的时侯,程序死在这里*/ //每过136ms去检查是否变为高电平//IRIN==0:表示此时还是低电平,此时9ms还没有到//err>0:避免死循环【超时设置】while ((IRIN==0) && (err>0)) //等待前面9ms的低电平过去 { DelayMs(1); // 136us【在8.4us后不断检查】err--;} //超过9us,进入4.5msif (IRIN == 1) //如果正确等到9ms低电平{err = 500;//超时检查while ((IRIN==1) && (err>0)) //等待4.5ms的起始高电平过去{DelayMs(1);err--;}//开始传输数据for (k=0; k<4; k++) //共有4组数据{ for (j=0; j<8; j++) //接收一组数据【从低位开始读】{err = 60;//这里是为了消耗每接受一个数据前面的560us的时间 while ((IRIN==0) && (err>0))//等待信号前面的560us低电平过去{DelayMs(1);//延时1表示延时136us【软仿真】err--;}err = 500;//开始区分逻辑1(1.69ms)和逻辑0(0.56ms)while ((IRIN==1) && (err>0)) //计算高电平的时间长度。{DelayMs(1);//0.14ms//逻辑1(1.69ms)和逻辑0(0.56ms)//1690/136=12个//560/136=4个//如果time》12则表示为逻辑1,如果time《4则表示为逻辑0Time++;//计算,看有多少个136userr--;if (Time > 30)//136*30=4080us【超时机制】//{EX0 = 1;return;}}//循环结束后,判断此时time的大小,如果IrValue[k] >>= 1; //k表示第几组数据if (Time >= 8) //如果高电平出现大于565us,那么是1{IrValue[k] |= 0x80;//将得到的数据放在高位}Time = 0; //用完时间要重新赋值 }}}if (IrValue[2] == ~IrValue[3])//判断两个命令(键值)是否相同---》检验{return;}}
}
五、代码的移植
1.全局变量的定义
全局变量在哪个C文件中用就在哪个C文件中定义
不能放在头文件中定义
如果在多个C文件中都要用到同一个全局变量,应该在一个主要的C文件中定义
然后其他C文件中extern声明即可
ired.c
// 全局变量在哪个C文件中用就在哪个C文件中定义
// 不能放在头文件中定义
// 如果在多个C文件中都要用到同一个全局变量,应该在一个主要的C文件中定义
// 然后其他C文件中extern声明即可
sbit IRIN = P3^2;
unsigned char IrValue[5]; // IrValue的0-3用来放原始数据,4用来放经过校验确认无误的键值
unsigned char Time;
main.c
extern unsigned char IrValue[6];//声明
2.红外遥控器上的键值
1.测试
2.结果
3.延时时间配合
结合上面的“如何得到一段代码精确延时时间【软仿真】”去验证一个延迟时间函数对应多长时间,然后要求这个地方不超过9ms即可。
4.屏蔽无效数据
将经过校验确认无误的键值输出
5.程序改良
原来我们将主程序写在中断中,实际上不能写在里面。
所以我们可以通过定时器来处理延时,因为在定时器在运行时,CPU还可以工作。
相关文章:

【单片机】18-红外线遥控
一、红外遥控背景知识 1.人机界面 (1)当面操作:按键,旋转/触摸按键,触摸屏 (2)遥控操作:红外遥控,433M/2.4G无线通信【穿墙能力强】,蓝牙-WIFI-Zigbee-LoRa等…...
【Node.js】module 模块化
认识 node.js Node.js 是一个独立的 JavaScript 运行环境,能独立执行 JS 代码,可以用来编写服务器后端的应用程序。基于Chrome V8 引擎封装,但是没有 DOM 和 BOM。Node.js 没有图形化界面。node -v 检查是否安装成功。node index.js 执行该文…...

Vue中如何进行分布式日志收集与日志分析(如ELK Stack)
在Vue中实现分布式日志收集与日志分析(使用ELK Stack) 日志收集和分析在现代应用程序中是至关重要的,它们可以帮助开发人员监视和诊断应用程序的行为,从而提高应用程序的稳定性和性能。ELK Stack(Elasticsearch、Logs…...
java学习--day23(线程池)
1.线程池Pool 线程池一个容纳了多个线程的容器,其中的线程可以反复的使用。省去了频繁创建线程的对象的操作,无需反复创建线程而消耗更多的资源 在 Java 语言中,并发编程都是通过创建线程池来实现的,而线程池的创建方式也有很多种…...

Unity Golang教程-Shader编写一个流动的云效果
创建目录 一个友好的项目,项目目录结构是很重要的。我们先导入一个登录界面模型资源。 我们先创建Art表示是美术类的资源,资源是模型创建Model文件夹,由于是在登录界面所以创建Login文件夹,下面依次是模型对应的资源,…...
Python数据攻略-Pandas与地理空间数据分析
地理空间数据分析已经成为数据分析不可或缺的一部分。无论是在城市规划、交通分析,还是在环境科学中,地理空间数据都发挥着关键作用。 本文将为初学者和新手提供一个详细的指南,通过使用Python的Pandas库和Geopandas库,来进行地理空间数据分析。 文章目录 用Pandas处理地理…...
sourceTree无法启动
前几天win10系统自动更新后,sourceTree就无法打开了,双击只是图标闪一下,电脑重启后还是无法打开。找到了网上几种方法进行尝试: 方法一:修改配置信息 在自己的电脑路径下: C:\Users\你的用户名\AppData…...

【ARM Coresight 系列文章19 -- Performance Monitoring Unit(性能监测单元)
文章目录 1.1 PMU 介绍1.2 PMU 寄存器1.2.1 PMU 管理寄存器1.2.2 PMU 外设识别寄存器1.2.3 PMU 组件识别寄存器1.3 性能监控事件1.3.1 Cortex-A9 特定事件1.1 PMU 介绍 许多体系结构都包含 PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件…...

前端学习| 第二章
CSS学习|第一章 前言一、概述1. 语法规定2. 代码风格 二、选择器1. 基础选择器标签选择器类选择器id选择器通配符选择器 2. 复合选择器后代选择器子元素选择器并集选择器伪类选择器链接伪类选择器focus 伪类选择器 三、引入方式四、显示模式1. 块元素2. 行内元素3. 行内块元素4…...

Unity中Shader光强与环境色
文章目录 前言一、实现下图中的小球接受环境光照实现思路:1、在Pass中使用前向渲染模式2、使用系统变量 _LightColor0 获取场景中的主平行灯 二、返回环境中主环境光的rgb固定a(亮度),小球亮度还随之改变的原因三、获取Unity中的环境光的颜色1、Color模式…...
Android9 查看连接多个蓝牙耳机查看使用中的蓝牙耳机
#Android9 查看连接多个蓝牙耳机查看使用中的蓝牙耳机 文章目录 一、主要api:二、BluetoothA2dp 对象的获取三、获取 BluetoothDevice 对象,四、其他: Android 9.0之后,支持一台手机可以同时连接多个蓝牙设备。 但是判断那个蓝牙…...
【EF Core】如何忽略影响导航属性(级联)
文章目录 EF更新和插入时如何忽略更新导航属性级联删除删除主体/父实体断开关系配置级联行为 来源 EF更新和插入时如何忽略更新导航属性 使用Ignore方法: modelBuilder.Entity<Blog>().Ignore(b > b.Posts);使用HasNoKey方法: modelBuilder.…...

【苍穹外卖 | 项目日记】第一天
前言: 我打算用16天的时间写完黑马程序员的苍穹外卖项目,为了督促自己每天坚持写以及记录项目知识点,所以用这种项目日记的方式鞭策自己 目录 前言: 今日完结任务: 今日收获: 1.阅读代码框架…...
WuThreat身份安全云-TVD每日漏洞情报-2023-10-07
漏洞名称:迪普科技DPtech SSL VPN任意文件读取漏洞 漏洞级别:高危 漏洞编号:CNVD-2023-69478 相关涉及:杭州迪普科技股份有限公司 DPtech SSL VPN 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-24924 漏洞名称:DTS监控SSL证书操作系统命令注…...
SpringBoot整合Druid配置yml文件
springboot中引入依赖注意,否则yml中配置不生效 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><group…...

如何保证 RabbitMQ 的消息可靠性?
项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题,但是同时也引出了一些问题,其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…...
图像分类数据集划分(创建ImageNet格式的数据集)
原始数据文件夹如下: ├──data├── 0 类别1├── 1 类别2制作数据集格式如下所示: ├──datasets├── meta│ ├── test.txt # 测试数据集的标注文件│ ├── train.txt # 训练数据集的标注文件│ └── val.txt # 验证…...

ArcGIS Engine:报错无法嵌入互操作类型“ESRI.ArcGIS.Geometry.EnvelopeClass”。请改用适用的接口。
此错误是由于尝试直接实例化ArcGIS COM组件的某些互操作类引起的。这在.NET Framework 4及更高版本中是不被推荐的。 为了解决此问题,你需要确保在工程的引用中将ArcGIS的互操作类型设置为“不嵌入”。 按照以下步骤操作: 在解决方案资源管理器中找到…...

核货宝:服装店收银系统如何选择?收银系统选购指南!
对于各行各业而言,收银系统都是必备的工具。特别是对于像服装店这样的零售门店来说,选择一套适合的收银系统尤为重要。在选择收银系统时,有一些关键的技巧需要注意,以达到软硬件合理搭配、节省开支的目的。下面将分享四个选购服装…...
GB/T 7134-2008 浇筑型工业有机玻璃板材检测
非改性浇筑PMMA板材是指甲基丙烯酸甲酯均聚物板材,或者甲基丙烯酸甲酯与丙烯酸酯类或甲基丙烯酸酯类单体的共聚物板材,通过适当的引发剂本体聚合生产。 GB/T 7134-2008浇筑型工业有机玻璃板材测试项目: 测试项目 测试方法 拉伸强度 GB/T …...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...