单片机学习笔记---红外遥控(外部中断)

news2024/12/23 9:31:10

目录

红外遥控简介

硬件电路

基本发送与接收

NEC编码​​​​​​​

遥控器键码

复习外部中断和定时器


红外遥控简介

红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出

通信方式:单工,异步

红外LED波长:940nm

通信协议标准:NEC标准

上图第三种图就是红外接收头(可以拔下来的)

硬件电路

发送部分

以上是两种电路

我们先来看第一个电路

当两个三极管同时导通的时候,IN是低电平,LED是以38KHZ闪着亮的。

这样是为了抗干扰,因为自然界中有很多红外光(比如太阳会发出很强的红外光,如果这个LED直接发出连续的红外光,那这个红外光会淹没在太阳光之中。接收头就没办法判断了,这样的话接收头被太阳照一下就有键码值了,这样子肯定是不行的,所以我们让它以38KHZ这个频率闪着亮,和自然界中的红外光区分开来,我们接收头再把这38KHZ的频率提出来,用个滤波器把38KHZ的频率分量提出来,然后再进行一个放大,然后再把这个频率滤掉,就能够在自然界这个连续不断的红外光中传递这个38KHZ的通讯信号了,这就是调制的目的,就是为了和自然光中的红外光区分。调制过程就是将38KHZ和高低电平进行叠加。

再来看第二个电路

如果IN输入低电平,LED就亮,如果给高电平的话这个灯就不亮。发送的时候就需要程序来时序“以38KHZ闪着亮”的这样一个波形的功能。我们可以把这个IN端接在单片机的IO口上,但是要求这个IO口能直接输出这种波形,高电平1就是连续的1,低电平的话就是38KHZ的方波给这个LED,它也能实现“以38KHZ闪着亮”的功能,这就是高低电平调制的过程。

但是我们这个开发板上并没有发送部分的电路,所以只能用开发板配的遥控器进行发送

所以我们主要了解它的接收部分(这是个一体化的红外接收头)

我们把这个红外接收头输出的波形进行解码,然后读取里面的键码值,就可以完成本节的任务。

这个接收部分其中是有一个单独的一个红外接收LED的,这个LED是一个黑色的红外接收管,如果直接用红外接收管的话,那接收的信号就有很多成分了,比如说自然光和闪着亮的这种光都会进来,这样的话在后面还需要进行一个电路操作,比如说你要将自然光给滤掉,然后再对闪着亮的成分进行放大。

因为接收头肯定是不想要这个38KHZ,它只在传递的过程中需要,所以我们接收之后要设计一个滤波电路或者其他的操作把这个滤掉,使我们输出的信号和第一种电路中IN端的输入的信号是一样的,这样就做到把这个信号给发送过来的目的了。

由于信号发送是很快的,每次按键之后就会出现很多的高低电平,并且这高低电平会在几十毫秒内就跑完了。因此我们不能用单片机判断按键那样来个if循环扫描来判断,这样的就太慢了。

为了更快的处理,我们将OUT引脚接在外部中断引脚上(INT0(P32),INT1(P33)),一旦产生一个下降沿,就立马中断对它进行处理,这样的响应实时性很高。

原理图上就把这个OUT接在了P32这个引脚上:

基本发送与接收

空闲状态:红外LED不亮,接收头输出高电平

发送低电平:红外LED以38KHz频率闪烁发光(接收时高电平还是高电平,低电平滤掉),接收头输出低电平

发送高电平:红外LED不亮,接收头输出高电平

空闲状态和发送高电平状态是可以区分开的,我们红外发送的时候是以第一个下降沿为开始,之后在一段时间内都是波形,在这一个过程中如果没收到即认为是高电平,等这个波形完了之后,就进入空闲状态,这就是基本的发送和接收。

NEC编码

发送这个高电平和低电平之后,就可以传递信号了,这个时候需要一个企业来制定一个标准,就是怎么来表示这个高电平,以及高电平怎么组合去表示起始信号数据0和1.

这个标准就是NEC编码

这个NEC标准中不会出现38KHZ的调制。

38KHZ是底层通信时才会有,就当于底层做好了基本的发送高低电平,然后把它封装在一个模块中。

发送高低电平信号,先调制之后再接收,接收完之后解调输出

NEC标准是建立在输入信号和输出信号之后,所以NEC的时序图中并不会出现38KHZ。

首先来看一下这个波形,它是按键按下后,接收头OUT引脚输出的波形。

没按键按下时是,波形是高电平,代表空闲状态。

一旦按键按下后,OUT引脚就会输出一个Star信号(由9毫秒的低电平和4.5毫秒的高电平组成),这个信号相当于告诉单片机这些接触设备有按键过来了,要开始发送数据了,请准备一下。

Star信号发送完之后会有段长的数据区,表示地址码和控制码这一部分。DATA的格式总共是四个字节,一共是32位。第一个字节就是地址码,就是遥控器的一个标识符,防止不同品牌的遥控器互相用,就是标识遥控器的地址。

然后是一个地址码反码(按位取反),用来数据验证,接收完两个字节后,把第一个字节和第二个字节进行比较,看看是否相等,如果相等就说明接收对了。

再之后就是命令码,这就是我们的键码,按下哪个按键。同样命令码也需要一个反码来进行验证。

因此4个字节(低位在前,高位在后)其实携带的信号只有两个。

DATA的1和0是怎么表示的呢?

它是先来一个低电平560us,然后高电平560us,这样就表示逻辑0;

然后低电平560us,然后高电平1690us,这样就表示逻辑1。

这样发完32位数据之后,一帧数据就发完了

之后就采集OUT引脚的波形,然后对它的时间长度进行分析,就可以得到地址码和命令码了。

之后绿色的数据帧就表示如果你按着按键不放的时候,它先发一个带有数据的这样一个波形,然后还不放手,它就会每个100毫秒就发送一次repeat,就相当于连续按键这个功能。

如果按下立即放手的话就只有前面第一帧的蓝色部分波形。

而repeat的这段波形和Star部分的波形差不多。

这是示波器实际采样的图(将示波器直接接到接收头的OUT引脚上)

PS:一个格子表示2ms,我们的遥控器的地址码是0000 0000

下降沿是前一个数据位的开始也是后一个数据位的结束,所以发送完最后一位数据之后为了终止会多出来一个下降沿。

遥控器键码

接下来复习一下中断的知识。

复习外部中断和定时器

STC89C52有4个外部中断(传统的51单片机只有2个外部中断)

STC89C52的外部中断有两种触发方式:下降沿触发和低电平触发

本节将用到下降沿触发,我们只需要测一下两个下降沿之间的时间,就可以知道这个信号是起始/逻辑1/逻辑0。

中断号:

外部中断寄存器

上图红框里的才是外部中断的控制位

其实我之前已经详细些过中断系统和定时器的博客了,也写的比较全面的了,大家不懂的可以看看,看过后肯定能让你明白中断系统和定时器的工作原理!

单片机学习笔记---中断系统(含外部中断)-CSDN博客

单片机学习笔记---定时器/计数器(简述版!)_定时计数器ea-CSDN博客

单片机学习笔记---定时器和中断系统如何连起来工作-CSDN博客

以上就是本节的内容,下一篇开始代码演示!代码演示中会涉及定时器和中断系统!

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

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

相关文章

String字符串,FastJson常用操作方法

JSON字符串操作 1、创建配置环境 # 引入测试包testImplementation group: org.springframework.boot, name: spring-boot-starter-test, version: 2.2.6.RELEASE # 创建测试类RunWith(SpringRunner.class)SpringBootTestpublic class JsonTest {Testpublic void test(){Syste…

13.Qt 文件的读和写,样式表文件的读用

目录 前言: 技能: 内容: 1. 界面 2.信号槽 ①浏览按键 ②保存按键 ③加载样式按键 参考: 前言: 上一篇文章说明了如何弹窗选取文件并在Qlabel中显示文件内容 12.QT文件对话框 文件的弹窗选择-QFileDialog 这篇…

Gitlab CI 报错: /usr/bin/bash: line 137: kubectl: command not found

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目,并且想将这些模块发布到不同的仓库或目标位置&…

机器学习基础(四)非监督学习的进阶探索

导语:上一节我们详细探索监督学习的进阶应用,详情可见: 机器学习基础(三)监督学习的进阶探索-CSDN博客文章浏览阅读296次,点赞13次,收藏11次。监督学习作为机器学习的一个主要分支,…

34.仿简道云公式函数实战-数学函数-PRODUCT

1. PRODUCT函数 函数使所有以参数形式给出的数字相乘并返回乘积。 2. 函数用法 PRODUCT(number1, [number2], …) 3. 函数示例 PRODUCT(数量, 单价) 4. 代码实战 首先我们在function包下创建math包,在math包下创建ProductFunction类,代码如下&…

x86与arm架构区别

前言 我们经常讨论的芯片的X86架构和ARM架构,那么他们的的区别什么呢?其实俩种都是主流的两种计算机处理器架构(CPU)架构,X86架构的CPU是PC服务器行业的老大,ARM架构的CPU则是移动端的老大。X86架构和arm架…

如何在Shopee 上选择热销商品?shopee应该在哪选品

在如今激烈竞争的电商市场中,如何通过精准的选品策略提升在Shopee平台上的销售业绩成为卖家们关注的焦点。Shopee作为一个蓬勃发展的电商平台,提供了多种资源和工具来帮助卖家做出明智的选品决策。通过深入了解这些渠道和策略,卖家们可以更好…

云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

Redis 有哪些架构模式?讲讲各自的特点

单机版模式 特点:简单 问题: 1、内存容量有限 2、处理能力有限 3、无法高可用。 主从复制 Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服…

Linux基础(vim、常用指令介绍)

Linux基础 1、目录结构2、vi和vim3、常用指令运行级别找回密码帮助指令时间日期指令搜索查找文件目录操作磁盘管理指令压缩和解压缩 4、组管理和组权限用户操作指令权限 1、目录结构 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”&a…

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…

Vue状态管理库-Pinia

一、Pinia是什么? Pinia 是 Vue 的专属状态管理库,它允许支持跨组件或页面共享状态,即共享数据,他的初始设计目的是设计一个支持组合式API的 Vue 状态管理库(因为vue3一个很大的改变就是组合式API),当然这…

设计师必看!哪个云渲染平台便宜?

渲染100 溜云库 渲云 平均价格 9.27 9.37 9.51 Camera007 5.81 6.1 4.7 Camera008 18.66 17…

Laravel02 路由基本概念和用法 给视图传递请求参数

Laravel02 路由基本概念和用法 1. 路由的基本概念2. 给视图传递请求参数 1. 路由的基本概念 routes文件夹下的web.php是用来定义路由规则的。 自己定义一个路径 2. 给视图传递请求参数 在laravel里使用一个辅助函数request来快速获取请求参数

Socket通信---Python发送数据给C++程序

0. Problems 很多时候实现某种功能,需要在不同进程间发送数据,目前有几种主流的方法,如 让python和C/C程序互相发送数据,其实有几种方法: 共享内存共享文件Socket通信 在这里只提供Socket通信的例程,共享…

C语言读取 ini 配置文件,修改/添加键值对

C语言读取 ini 配置文件,修改/添加键值对 C语言读取 ini 配置文件,对section中的键值对进行修改/添加,如果section不存在,则在末尾将新的section/key/value 添加进去。 一、了解什么是INI文件? ini 文件是Initializ…

2022蓝帽杯取证初赛

检材:https://pan.baidu.com/s/1ibOdxyCWeC5x0DQKjwcz7w?pwdvg6g 目录 手机取证1、627604C2-C586-48C1-AA16-FF33C3022159.PNG图片的分辨率是?(答案参考格式:19201080)2、姜总的快递单号是多少?&#xff0…

【2024软件测试面试必会技能】Jmeter_性能测试(4):性能测试脚本的优化

性能测试脚本的优化 以PHP论坛为例:http://47.107.178.45/phpwind/ 根据上一篇的性能测试(3)的脚本进行优化;见下图: 如上图中,把发帖和回帖的事务添加到随机控制器中,登录操作添加到仅一次控制器中&…

yolov5转换成TensorRT推理过程笔记

笔记内容来自 B站 手写AI 一、用硬代码实现 GitHub - wang-xinyu/tensorrtx: Implementation of popular deep learning networks with TensorRT network definition API 安装python、cuda11.2、cudnn对应cuda11.2软件 1、在yolov5-master下训练完成后生成best.pt文件(训练时…