51单片机学习笔记13 红外遥控接收

51单片机学习笔记13 红外遥控接收

  • 一、红外遥控
    • 1. **发射原理**
    • 2. **接收原理**
    • 3. **发射、接收示例**
  • 二、编码、解码
    • 1. **编码方式分类**:
      • (1)Pulse Distance Modulation (PDM) 脉冲距离调制:
      • (2)Pulse Width Modulation (PWM) 脉冲宽度调制:
      • (3)Manchester Encoding 曼彻斯特编码:
      • (4)Bi-Phase Encoding 双相编码:
    • 2. 常见的红外编解码格式
      • (1)**RC-5 和 RC-6**
      • (2)**Sony SIRC(索尼红外编码)**
      • (3)**Samsung 标准**
      • (4)**NEC 日本电气公司**
      • (5)**RAW (原始) 码**
    • 3. NEC编解码详解
      • (1)帧结构
      • (2)脉冲编码
      • (3)地址码
      • (4)命令码
      • (5)反码
      • (6)结束码
      • (7)连发码
    • 4. 一体化红外遥控接收头
  • 三、实现
    • 1. 硬件电路设备
    • 2. 软件实现
      • (1)IO口及中断初始化
      • (2)外部中断0
    • 3. 使用main.c

一、红外遥控

红外遥控技术是一种常见的无线通信技术,常用于控制家电、汽车、电视机、音响系统等设备。其原理主要基于红外光的发射与接收。

1. 发射原理

  • 发射器通常是一个红外二极管(IR LED),它能够将电能转换为红外光能。
  • 当发射器接收到来自遥控器的信号时,会通过载波调制将信号转换为红外光信号,然后通过发射器发射出去。
  • 这些红外光信号的频率一般在30kHz到60kHz之间,常用的有33K、36K、36.6K、38K、40K、56K等,其中38K使用最多。
  • 在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。
  • 常用占空比有1/3、1/2,1/3最多。

2. 接收原理

  • 接收器通常是一个红外接收模块(IR Receiver Module),它包括一个红外光敏元件和一个解调器。
  • 红外光敏元件接收到发射器发射的红外光信号后,将其转换为电信号。
  • 解调器对接收到的信号进行解调,将其还原为数字信号,然后发送给被控制设备的处理器或微控制器。

在这里插入图片描述

3. 发射、接收示例

在这里插入图片描述

二、编码、解码

1. 编码方式分类

(1)Pulse Distance Modulation (PDM) 脉冲距离调制:

PDM 是一种基于脉冲的编码方式,它根据脉冲之间的距离来表示信息。通常,长脉冲和短脉冲分别代表不同的二进制位或符号。

(2)Pulse Width Modulation (PWM) 脉冲宽度调制:

PWM 是一种通过调节脉冲宽度来编码信息的方法。不同的脉冲宽度代表不同的符号或信息。

(3)Manchester Encoding 曼彻斯特编码:

曼彻斯特编码将每个比特位编码为两个等长的脉冲,根据脉冲的变化来表示信息。例如,高电平到低电平表示1,低电平到高电平表示0。

(4)Bi-Phase Encoding 双相编码:

双相编码将每个比特位分为两个阶段,根据信号的相位变化来编码信息。常见的双相编码包括差分曼彻斯特编码(Differential Manchester Encoding)。

2. 常见的红外编解码格式

NEC(日本电气公司)编解码格式是红外遥控器常用的一种标准格式,广泛应用于各种消费电子产品的遥控器中。它采用了一种特定的脉宽调制(PWM)编码方式。

(1)RC-5 和 RC-6

由飞利浦公司(现在的NXP半导体)开发的另两种常见的红外编码解码标准。RC-5 通常用于欧洲市场,而 RC-6 用于全球市场。

(2)Sony SIRC(索尼红外编码)

索尼公司开发的一种常见的红外编码格式,通常用于索尼品牌的遥控器中。

(3)Samsung 标准

三星公司采用的一种红外编码标准,用于其产品系列的遥控器中。

(4)NEC 日本电气公司

广泛用于各种消费电子产品。

(5)RAW (原始) 码

RAW 码不使用特定的编码格式,而是直接记录脉冲的时间间隔,可以通过分析脉冲的时间来解码。

3. NEC编解码详解

文档地址:https://www.sbprojects.net/knowledge/ir/nec.php

(1)帧结构

以下是使用 Markdown 表示 NEC 帧的组成部分的示例:

部分描述
引导脉冲NEC 编码帧的开始标志,通常是一个特定脉冲序列,用于同步接收器,9ms。
地址码用于识别接收器要控制的设备,通常是 8 位二进制数。
反码对地址码的按位取反,用于增强数据的可靠性。
命令码表示具体的操作或命令,用于控制目标设备的功能。
命令反码对命令码的按位取反,用于增强数据的可靠性。
结束码NEC 编码帧的结束标志,表示一个完整的指令。

一个完整的 NEC 编码帧通常由连续的脉冲序列组成,包括引导脉冲、地址码、反码、命令码、命令反码和结束码等部分。
在这里插入图片描述

(2)脉冲编码

NEC 编码器使用脉冲宽度调制(PWM)来编码信息,通常:

  • 一个脉冲对应 560us 连续载波
  • 逻辑1传输需要2.25ms(560us脉冲+1680us低电平)
  • 逻辑0传输需要1.125ms(560脉冲+560us低电平)

接收端与发送端电平相反 。

下图是逻辑电平1、逻辑电平0的示例:
在这里插入图片描述

(3)地址码

在红外遥控器的通信过程中,地址码标识了特定的设备或设备组,它包含以下几个重要概念:

  1. 长度

    • 地址码的长度通常是 8 位二进制数,即包含 8 位 0 或 1 的序列。这种长度允许识别 256 个不同的设备或设备组。
  2. 编码规则

    • 采用脉冲宽度调制(PWM)方式。通常,逻辑 1 由一个特定宽度的脉冲表示,而逻辑 0 则由另一个宽度的脉冲表示。
  3. 设备识别

    • 接收器根据接收到的地址码来识别要控制的设备。在一个系统中,不同的设备或设备组通常被分配不同的地址码,以确保每个设备都可以准确地识别和响应来自遥控器的命令。
  4. 校验位

    • 在 NEC 编码格式中,通常会包含一个地址码的反码作为校验位,用于增强数据的可靠性。接收器在接收到地址码后,会对其进行校验,以确保数据的准确性。
  5. 地址范围

    • 由于地址码的长度为 8 位二进制数,因此地址码的地址范围是从 00000000 到 11111111(0 到 255)。这允许 NEC 编码格式支持多达 256 个不同的设备或设备组。

通过地址码,接收器能够准确地识别要控制的设备或设备组,从而确保遥控器发送的命令能够正确地被接收并执行。

(4)命令码

命令码用于表示遥控器发送的具体操作或命令。每个命令码都对应着一项特定的功能或动作,例如开启/关闭、音量调节、频道切换等,其主要概念:

  1. 长度
    命令码的长度通常是 8 位二进制数,与地址码相同。这种长度允许有 256 种不同的命令。

  2. 编码规则
    与地址码相同。

  3. 操作指令
    每个命令码都代表着一项具体的操作指令。例如,命令码 00000000 可能代表着“开启”操作,而命令码 11111111 可能代表着“关闭”操作。

  4. 校验位
    类似于地址码,命令码也可以包含一个校验位,通常是命令码的反码。这个校验位用于增强数据的可靠性,确保接收器正确地解码命令。

  5. 功能范围
    NEC 编码格式支持多种不同的功能和操作,因此命令码可以涵盖各种各样的控制命令。这些命令可以包括开关控制、音量调节、频道切换、模式选择等等。

(5)反码

除了地址码和命令码外,NEC 编码格式还包括反码,用于增强数据的可靠性。反码是对地址码和命令码的按位取反。

(6)结束码

结束码表示一个编码帧的结束,用于标识一个完整的指令。

(7)连发码

在用户按住遥控器上的某个按钮时,会连续发送相同的命令信号,直到用户释放按钮为止。

在这里插入图片描述

4. 一体化红外遥控接收头

一体化红外遥控接收头是一种集成了红外接收器功能的组件,它具有接收红外信号并解码的功能,一般支持多种协议 。
在这里插入图片描述

三、实现

1. 硬件电路设备

开发板在 P3.2上安装了红外接收头。
在这里插入图片描述

2. 软件实现

对红外的接收使用外部中断,出现下降沿时触发 。下面代码实现在按下遥控器按键后,数码管显示对应的控制码值,并通过串口输出控制码值。

(1)IO口及中断初始化


u8 ired_data[4];
/*** @brief ired 初始化*/
void ired_init(void){// 使能外部中断0IT0 = 1;// 设置外部中断0下降沿触发EX0 = 1;// 使能总中断EA = 1;// 拉高IREDIRED = 1;
}

(2)外部中断0


/*** @brief ired 接收中断*/
void ired() interrupt 0{u8 i,j;u16 time_cnt ;// 保存高电平时间u16 high_cnt;// 是不是低电平if(IRED == 0){time_cnt = 1000;// 高电平时退出while((!IRED) && time_cnt){delay_10us(1);time_cnt--;}if(time_cnt==0)return;// ired接收到信号, 10ms内进入高电平if(IRED){// 4.5ms高电平结束,超过5ms就是错误信号time_cnt = 500;while(IRED && time_cnt){delay_10us(1);time_cnt--;}if(time_cnt==0)return;// 接收数据,地址码、地址反码、控制码、控制反码for(i=0;i<4;i++){for(j=0;j<8;j++){// 0.56ms低电平(这里使用600us)time_cnt = 600;while(IRED==0 && time_cnt){delay_10us(1);time_cnt--;}// 大于560us,非正常信号if(time_cnt==0)return;// 判断高电平时间,0  560us, 1680ustime_cnt = 20;high_cnt = 0;while(IRED && time_cnt){delay_10us(10);time_cnt--;high_cnt++;}// 超时if(time_cnt==0)return;ired_data[i] >>= 1;// 大于800us就认为是1if(high_cnt>=8){// 高电平ired_data[i] |= 0x80;}}}// 反码判断数据是否正确if(ired_data[2] != ~ired_data[3] ){// 数据错误for(i=0;i<4;i++){ired_data[i] = 0;}}}}
}

3. 使用main.c

#include "led_utils.h"
#include "ired_utils.h"
#include "segment_display_utils.h"
#include "uart_utils.h"/**
* @brief 主函数
*/
void main()
{// 关闭所有ledled_all_off();ired_init();// 速率 9600uart_init(0xfa);while(1){uart_send(0);uart_send(ired_data[2]);uart_send(1);segment_show_u8(0, ired_data[2]);}
}

本文代码开源地址:
https://gitee.com/xundh/learn51.git

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下用CMake编译PugiXML及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 PugiXML是什么&#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口&#xff0c;能够高效地加载…

3. WiFi基本原理

1. WiFi简介 WiFi的全称是Wireless Fidelity。它是一种无线网络通信技术&#xff0c;由Wi-Fi联盟拥有&#xff0c;目的是改善基于IEEE 802.11标准的无线网络产品之间的互通性&#xff0c;允许电子设备在没有物理连接的情况下进行高速数据传输。此外&#xff0c;WiFi也被视为IE…

Spring Boot接收从前端传过来的数据常用方式以及处理的技巧

一、params 传参 参数是会拼接到url后面的请求 场景规范:url后面的key值<=3个参数的时候,使用params 传参 支持的请求方式:get(正规的是get方式)、post 都行 例如: http://localhost:8080/simpleParam?name=Tom&age=10 在postman里面的体现为 后端接收的接口…

【热门话题】WebKit架构简介

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 WebKit架构简介一、引言二、WebKit概览1. 起源与发展2. 模块化设计 三、WebCore…

java Web 辅助学习管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 java Web 辅助学习管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstr…

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…

玩转ChatGPT:Kimi测评(科研写作)

一、写在前面 ChatGPT作为一款领先的语言模型&#xff0c;其强大的语言理解和生成能力&#xff0c;让无数用户惊叹不已。然而&#xff0c;使用的高门槛往往让国内普通用户望而却步。 最近&#xff0c;一款由月之暗面科技有限公司开发的智能助手——Kimi&#xff0c;很火爆哦。…

python爬取B站视频

参考&#xff1a;https://cloud.tencent.com/developer/article/1768680 参考的代码有点问题&#xff0c;请求头需要修改&#xff0c;上代码&#xff1a; import requests import re # 正则表达式 import pprint import json from moviepy.editor import AudioFileClip, Vid…

wps斜线表头并分别打字教程

wps斜线表头怎么做并分别打字&#xff1a; 1、首先选中我们想要设置的表头。 2、接着右键选中它&#xff0c;点击“设置单元格格式” 3、然后点击上方“边框”选项卡。 4、随后选择图示的斜线&#xff0c;点击“确定” 5、设置完成后&#xff0c;我们只要在其中打字就可以在斜…

【教学类-09-08】20240405细线迷宫图04(正方形)迷宫格子数量测试+左上角加格子数(15CM横版一页-1份横版)

作品展示 背景说明 从8*8开始&#xff0c;可以生成了迷宫图了。 代码测试&#xff1a; 第一次&#xff1a;8-30格 # 15CM正方形手工纸上 以15*15格子为基础&#xff0c;测试0-14,16-30的格子num1 # int(input(几张&#xff08;30份&#xff09;\n))print(-----------1、 生成…

盘点中国优秀付费资源站WordPress主题

中国优秀的付费资源站WordPress主题&#xff0c;它们专注于资源管理和分享&#xff0c;提供了丰富的功能和用户体验&#xff1a; 资源宝&#xff08;ziyuanbao&#xff09;&#xff1a;这是一款功能强大的资源站主题&#xff0c;支持多种资源类型的上传、分类和展示&#xff0…

elment UI el-date-picker 月份组件选定后提交后台页面显示正常,提交后台字段变成时区格式

需求&#xff1a;要实现一个日期的月份选择<el-date-picker :typeformData.dateType :value-formatdateFormat v-modelformData.leaveFactoryDateplaceholder选择月份></el-date-picker>错误示例&#xff1a;将日期显示类型(type)dateType或将日期绑定值的格式(val…

免费图片转excel方案大全

随着信息技术的发展&#xff0c;我们经常会遇到需要将图片中的数据转换成Excel表格的情况。这种需求在数据分析、报表制作、信息整理等领域尤为常见。然而&#xff0c;许多人在面对这一任务时感到困惑&#xff0c;不知道如何进行。本文将为大家介绍几种免费的图片转Excel方案&a…

Linux 内核移植exfat驱动

简介&#xff1a; Linux系统默认可以自动识别到fat32格式的盘&#xff0c;但fat32支持的文件不能大于4G&#xff0c;所以只能将移动硬盘和U盘格式化为NTFS和exFAT这两种格式的&#xff0c;对于U盘最好格式化为exFAT。 Linux5.4以上的内核原生支持exfat格式&#xff0c;不需要你…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

dm8 开启归档模式

dm8 开启归档模式 1 命令行 [dmdbatest1 dm8]$ disql sysdba/Dameng123localhost:5237服务器[localhost:5237]:处于普通打开状态 登录使用时间 : 3.198(ms) disql V8 SQL> select name,status$,arch_mode from v$database;行号 NAME STATUS$ ARCH_MODE ----------…

flink on yarn

前言 Apache Flink&#xff0c;作为大数据处理领域的璀璨明星&#xff0c;以其独特的流处理和批处理一体化模型&#xff0c;成为众多企业和开发者的首选。它不仅能够在处理无界数据流时展现出卓越的实时性能&#xff0c;还能在有界数据批处理上达到高效稳定的效果。本文将简要…

磁盘如何分配数据数据

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 磁盘如何分配数据 数据切割&#xff1a; 按照固定长度进行切割---》编码翻译&#xff08;常用&#xff09; 计算机要求按照8bit(字节)进…

MATLAB近红外光谱分析技术应用

郁磊副教授&#xff0c;主要从事MATLAB编程、机器学习与数据挖掘、数据可视化和软件开发、生理系统建模与仿真、生物医学信号处理&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发表多篇高水…