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

目录

红外遥控简介

硬件电路

基本发送与接收

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博客

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年便宜的云服务器分享:最低26元4核16G

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服…

electron Tab加载动画开启和关闭

记个开发中的bug,以此为鉴。眼懒得时候手勤快点儿,不要想当然!!! 没有转载的价值,请勿转载搬运呦。 WebContents API: Event: did-finish-load​ 导航完成时触发,即选项卡的旋转…

开发消息多发工具需要用到的源代码

在数字化时代,消息传递是许多应用程序的核心功能之一,从社交媒体到企业通信,从个人聊天到群发消息,消息传递无处不在,为了满足这种需求,开发者经常需要创建或定制消息多发工具。 这些工具通常需要处理多个…

算法刷题:找到字符串中所有的字母异位词

找到字符串中所有的字母异位词 .题目链接题目详情题目解析算法原理滑动窗口流程图定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 找到字符串中所有的字母异位词 题目详情 题目解析 所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词 如:abc-&g…

【AI学习】LangChain学习

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

如何画架构图:从概念到实践

如何画架构图:从概念到实践 在软件开发和系统设计中,架构图是一种重要的工具,它能够帮助开发人员和利益相关者更好地理解系统的结构和组件之间的关系。但是,对于许多人来说,画架构图可能是一个挑战。本文将探讨如何有…

分布式id实战

目录 常用方式 特征 潜在问题 信息安全 高性能 UUID 雪花算法 数据库生成 美团Leaf方案 Leaf-segment 数据库方案 Leaf-snowflake 方案 常用方式 uuid雪花算法数据库主键 特征 全局唯一趋势递增信息安全 潜在问题 信息安全 如果id连续递增, 容易被爬虫, 批量下…

字典树Trie 简介和相关例题分析

一.字典树定义 概念:字典树(TrieTree),是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串,如01字典树)。主要思想是利用字符串的公共前缀来节约存储空间…

【运维】站点可靠性工程介绍:研发,运维,SRE,Devops的关系

文章目录 1、什么是SRE2、SRE与研发、运维的区别 1、什么是SRE 站点可靠性工程(SRE) 是 IT 运维的软件工程方案。 SRE 团队使用软件作为工具,来管理系统、解决问题并实现运维任务自动化。 SRE 执行的任务以前通常由运维团队手动执行&#x…

网络运行安全

网络运行安全 第一节 一般规定 第二十一条 国家实行网络安全等级保护制度。网络运营者应当按照网络安全等级保护制度的要求,履行下列安全保护义务,保障网络免受干扰、破坏或者未收授权的访问,防止网络数据泄露或者被窃取、篡改: 制定内部安全管理制度和操作规程,确定网络…

深度学习图像算法工程师--面试准备(1)

1 请问人工神经网络中为什么 ReLU 要好过于 tanh 和 Sigmoid function? 采⽤Sigmoid 等函数,算激活函数时(指数运算),计算量⼤,反向传播求误差梯度时,求导涉及除法和指数运算,计算量…

【常识】大数据设计基础知识

底层存储:hadoop(hdfsmapreduce) Hadoop已经有十几年的历史,它是大数据领域的存储基石,HDFS目前仍然没有成熟替代品;MapR 文件系统在业内已经具有一定知名度了,不仅 MapR 宣布它自己的文件系统比 HDFS 快2-…

十三、集合进阶——单列集合 及 数据结构

单列集合 及 数据结构 13.1 集合体系结构13.1.2 单列集合1. Collection2.Collection 的遍历方式迭代器遍历增强for遍历Lambda表达式遍历 3.List集合List集合的特有方法List集合的遍历方式五种遍历方式对比 4.数据结构1).栈2).队列3)数组4)链表小结5&…

嵌入式学习-qt-Day1

嵌入式学习-qt-Day1 一、思维导图 二、作业 1.自由发挥登录窗口的应用场景,实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//字体设置QFont font1;//创建字体对象1font1.setWeight(QFont::Bold);//字体…

普法:正当防卫,保护自己

今天该换一换口味了,所以本“人民体验官”推广人民日报官方微博《警察小哥科普第二十条指什么》。 图:来源“人民体验官”推广平台 电影《第二十条》片名,取自刑法第二十条规定。这一法条具体写了什么?对我们的生活有何影响&…

《白话C++》第10章 STL和boost,Page105 enable_shared_from_this

说到“循环引用”,其中“自己对自己”的引用是最直接的循环引用,如图10-12所示。 而说到“自己”,在C语言中应该首先想到的类的“this”指针。不过,this指针是裸指针,如果我们在类中,需要传递当前对象本身&…

【嵌入式-Keil】keil代码提示快捷键

CTRL空格 如果没有提示,可能跟输入法的快捷键冲突, 右键->设置->按键->勾掉第一个就行了 再按CTRL空格就有提示了 参考:串口发送&串口发送接收

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 📚Todo-list 案例🐇组件化编码流程(通用)🐇实现静态组件🐇展示动态数据🐇交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

【黑马程序员】C++文件操作

20240220 文章目录 文件操作背景文件分类操作文件的三大类 文本文件写文件写文件步骤文件打开方式代码示例 读文件读文件步骤代码示例 写二进制文件写二进制文件步骤代码示例 读二进制文件代码示例 文件操作 背景 程序运行时产生的数据都属于临时数据,程序一旦运行…

TypeScript(三):TypeScript面向对象

TypeScript面向对象 类的定义 与JS不同的是,成员属性需要在前面进行提前声明 class Person{//需要在前面对成员变量进行声明name: string//声明的时候,可以对值进行初始化,初始化可以带有类型注解,也可以省略age 18//construc…