0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详细解读红外遥控解码

工程师邓生 来源:云创硬见 作者:云创硬见 2020-01-16 17:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

红外遥控是我们现实生活中必不可少的一员。遥控,顾名思义即在遥远的地方进行控制,其实也就是说远程通信。红外遥控就是以红外线为传输介质的遥控。

红外遥控器是怎么工作的?其实它内部就是有一个单片机,单片机的I/O口控制一个红外LED灯(当然一般会加外部放大电路以增大传输距离),在内部编码后发送出去,然后电视或者空调之类的可以用红外遥控控制的电器在接收到红外信号后就会进行解码,并根据制定好的协议执行特定动作,比如电视可能换台、调节音量等。现在有的手机就带有红外遥控功能,其实也是用单片机的功能实现的。

红外遥控解码

有的时候,我们希望模拟一些遥控器的功能,这时候就要对这些遥控器的数据进行解码。

在进行解码前,我们先来了解一下红外编码。红外编码有很多种,最常用的编码是NEC编码。NEC格式的编码如下:

详细解读红外遥控解码

NEC格式的红外编码是连续的32位二进制码组。32位二进制码组之前的引导码,用于区分每次的传输;在起始码之后的才是32位二进制码组,其中8位用户识别码和8位反码(反码主要用于)校验,用户识别码的作用主要是区分不同品牌的遥控器;接着就是8位操作码和反码,用于表示哪个按键被按下。

NEC格式的编码除引导码和起始码外,用于交互数据的信息采用脉宽调制的串行码,在38kHz的载波下,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下所示:

了解了红外编码,就可以进行红外解码了。

实现方法

一般,进行红外解码我们需要先将接受到的有效信号与外界环境的干扰信号分离开,这就是载波的作用。现在市面上有很多一体化红外接收头,内部是红外接收二极管 +放大电路 +解调器。当接收到红外信号后,先将其放大,然后把38kHz的信号保留下来。需要注意的是一般一体化红外接收头接收到信号时输出是低电平,没有接收信号时是高电平。

上面是常用红外接收头的引脚,“OUT”脚接单片机的I/O口,“-”脚接电源负极,“+”脚接电源正极。

接好电路,就要进行解码工作了.其实解码工作主要是识别引导码,还有数据“0”“1”。我们看波形图,只要识别红外接收头“OUT”引脚高低电平持续的时间就可以了。这个可以用定时器中断完成,也可以用延时来判断。由于只完成解码工作,我们就用延时的方法更方便。

首先,红外接收头没有接到信号时是高电平,等待其变低。之后,每隔900us测量一次,若在10次内电平变高,说明这不是引导码,退出重新开始;若10次内并没有变高,说明这就是引导码,继续下一步。接着可以不判断起始码,就是直接等待引脚电平变高再变低,就可以接收数据了。

接收数据,就是进行判断“0”和“1”。从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。

每一位“0”或者“1”在接收头接收信号即低电平的时间都是一样的,直接等待低电平过去,在高电平时延时600us,如果600us时还是高电平,说明是“1”;如果是低电平即高电平过去了,说明是“0”。将这些数据结合到一起,就是接收到的编码了。

将单片机的串口与电脑接好,就可以在串口显示我们读到的红外遥控数据了。

实现代码:

#include <reg52.h>

// --- 红外接收一体化输出口 ----------------------------------

sbit IR_Out = P3^2;

bit START_Flag = 0;

bit BOOT_REPEATING_CODE_Flag = 0;

unsigned char DATA[4] = {0};

bdata unsigned char TEMP_BIT;

sbit B0 = TEMP_BIT^0;

sbit B1 = TEMP_BIT^1;

sbit B2 = TEMP_BIT^2;

sbit B3 = TEMP_BIT^3;

sbit B4 = TEMP_BIT^4;

sbit B5 = TEMP_BIT^5;

sbit B6 = TEMP_BIT^6;

sbit B7 = TEMP_BIT^7;

// --- 有无遥控信号判断函数 ----------------------------------

bit START_Judge();

// --- 连发码判断函数 ----------------------------------------

bit BOOT_REPEATING_CODE_Judge();

// --- "0"和"1"识别 ------------------------------------------

bit H_L_LEVEL_Judge();

bit START_Judge()

bit TEMP_Flag = 1;

unsigned char i = 0;

//在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环。

while ( IR_Out == 1);

//重复10次,目的是检测在6876~8352微秒内如果出现高电平就退出解码程序

for(i =0;i <9; i++)

DELAY_Us(800); // 测试实际延时约为764~928us

if ( IR_Out == 1 )

TEMP_Flag = 0;

break;

return TEMP_Flag;

bit BOOT_REPEATING_CODE_Judge()

bit TEMP_Flag = 1;

while( IR_Out == 0 ) ; // 等待高电平避开9毫秒低电平引导脉冲

DELAY_Ms(1); // 测试实际延时约为1.007ms

DELAY_Ms(1); // 测试实际延时约为1.007ms

DELAY_Us(200); // 0.086ms

DELAY_Us(200); // 0.086ms

DELAY_Us(200); // 0.086ms

// 共计2.272ms

if( IR_Out == 0 )

TEMP_Flag = 1; // 是连发码

else

TEMP_Flag = 0; // 不是连发码,而是引导码

return TEMP_Flag;

bit H_L_LEVEL_Judge()

while( IR_Out == 0 ); // 等待地址码第一位的高电平信号

DELAY_Us(800); // 测试实际延时约为764~928us

if ( IR_Out == 1)

DELAY_Ms(1); // 测试实际延时约为1.007ms

return 1;

else

return 0;

// --- 串口初始化 --------------------------------------------

void UART_Initial();

void DELAY_Us(unsigned int Us)

unsigned int x;

for(x = 0; x <= (Us/200-1); x++);

void DELAY_Ms(unsigned int Ms)

unsigned int x,y;

for(x = 0; x <= (Ms-1); x++)

for(y = 0; y <= 120; y++);

void main()

unsigned char i;

UART_Initial();

IR_Out = 1;

while(1)

START_Flag = START_Judge();

BOOT_REPEATING_CODE_Flag = BOOT_REPEATING_CODE_Judge();

if ( START_Flag && !BOOT_REPEATING_CODE_Flag )

for(i =0;i <4; i++)

B0 = H_L_LEVEL_Judge();

B1 = H_L_LEVEL_Judge();

B2 = H_L_LEVEL_Judge();

B3 = H_L_LEVEL_Judge();

B4 = H_L_LEVEL_Judge();

B5 = H_L_LEVEL_Judge();

B6 = H_L_LEVEL_Judge();

B7 = H_L_LEVEL_Judge();

DATA[i] = TEMP_BIT;

for(i =0;i <4; i++)

SBUF = DATA[i];

while( TI == 0 );

TI = 0;

void UART_Initial()

SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收

TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload

TH1 = 0xFD; // TH1: reload value for 9600 baud @

// 11.0592MHz

TR1 = 1; // TR1: timer 1 run

EA = 0; // 关闭总中断

ES = 0; // 关闭串口中断

1、红外遥控的编码不只NEC,还有很多也有广泛应用如RC-5,RC-6等。

2、上面的代码所用指令是STC 89C52单片机,如需用其它芯片请另行更改。
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索 Crimzon RC Blaster™ 微控制器:一站式红外遥控数据库解决方案

    探索 Crimzon RC Blaster™ 微控制器:一站式红外遥控数据库解决方案 在电子设备设计领域,为系统快速轻松地添加通用遥控功能是一项常见且重要的需求。今天,我们就来深入了解一下
    的头像 发表于 04-04 11:05 255次阅读

    MAXQ617:红外遥控片上系统的卓越之选

    MAXQ617:红外遥控片上系统的卓越之选 在电子设计领域,低功耗、高性能的芯片一直是工程师们追求的目标。今天,我们就来深入了解一款专为低功耗应用设计的芯片——MAXQ617 红外遥控
    的头像 发表于 03-27 17:25 561次阅读

    红外遥控 NEC 解码终于搞懂了!看完直接抄作业

    从波形抓取到按键映射,手把手教你搞定NEC协议解码红外遥控解码的朋友,有没有过这种绝望:逻辑分析仪抓了一堆波形,看着像NEC协议,就是解不出正确的地址和按键?定时器配置了无数次,要么
    的头像 发表于 03-26 19:34 377次阅读
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b> NEC <b class='flag-5'>解码</b>终于搞懂了!看完直接抄作业

    WT2003HX语音芯片:内置IIC控制器及红外遥控解码器,如何成为音频IC领域的全能选手?

    音频ic方案中,广州唯创电子推出的WT2003HX语音芯片通过将IIC控制器、红外遥控解码器及双16位异步分频器定时器整合于一身,为电子产品带来了前所未有的功能集成度
    的头像 发表于 03-19 09:14 238次阅读
    WT2003HX语音芯片:内置IIC控制器及<b class='flag-5'>红外</b><b class='flag-5'>遥控</b><b class='flag-5'>解码</b>器,如何成为音频IC领域的全能选手?

    MCP2120红外编码器/解码器:特性、应用与设计要点

    MCP2120红外编码器/解码器:特性、应用与设计要点 在电子设计领域,红外通信技术凭借其低成本、高可靠性等优势,在众多应用场景中得到了广泛应用。Microchip的MCP2120红外
    的头像 发表于 02-04 16:05 515次阅读

    基于STM32F103C8T6对红外遥控信号解码 实现HX1838接收头接收数据

    的数据编码格式,通过PWM调制实现0和1的传输,包含同步码、地址码和控制码等结构。最后给出了基于STM32F103的红外解码实现方案,包括硬件连接和关键代码解析,展示了如何通过定时器捕获边沿信号来解析红外
    的头像 发表于 01-30 19:53 3099次阅读
    基于STM32F103C8T6对<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>信号<b class='flag-5'>解码</b> 实现HX1838接收头接收数据

    使用CW32F003和SYN531R做一个315M遥控器接收解码的小板子,无法工作是什么原因?

    想使用CW32F003系列的芯片和SYN531R接收芯片做一个315M遥控器接收解码的小板子,我在网上搜了一下315M解码的协议,做出来后发现无法工作,有没有大佬做过这方面的开发,能否推荐个参考资料参考一下,谢谢!
    发表于 11-20 08:00

    红外光谱技术应用与原理分析

    红外光而产生振动能级跃迁。技术原理红外光谱分析测试的准确性和可靠性,红外光谱分析的本质是解读分子振动的特征信息。当一束红外光穿过样品时,分
    的头像 发表于 11-11 15:21 1328次阅读
    <b class='flag-5'>红外</b>光谱技术应用与原理分析

    智能语音遥控器低功耗BLE蓝牙芯片

    随着AI技术持续进步,支持语音识别功能的电视机、机顶盒等设备已广泛普及。在这一趋势下,搭载BLE蓝牙芯片的语音遥控器逐步替代传统红外遥控,成为新一代电视产品的标准配件。从红外到射频,从
    的头像 发表于 11-07 11:20 778次阅读

    力芯微红外遥控IC芯片ET4008MTC是家用遥控器的智能芯选

    在现代家居生活中,家用遥控器是我们与家电设备交互的重要工具。从电视、空调到风扇、音响,遥控器的存在极大地提升了我们生活的便利性。而力芯微红外遥控IC芯片ET4008MTC,凭借其高性能
    的头像 发表于 10-23 14:41 861次阅读
    力芯微<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>IC芯片ET4008MTC是家用<b class='flag-5'>遥控</b>器的智能芯选

    【项目实战】基于WS63的鸿蒙星闪红外遥控车(循迹、超声波避障、远程控制、星闪/红外遥控)有教程代码

    的鸿蒙星闪红外遥控车,正好把这些零散技术串成闭环,还附全套教程,帮你快速把“单个知识点”变成“能跑的物联网系统”。项目硬件清单鸿蒙星闪智能小车项目使用的是红框部分
    的头像 发表于 09-10 16:01 1276次阅读
    【项目实战】基于WS63的鸿蒙星闪<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>车(循迹、超声波避障、远程控制、星闪/<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>)有教程代码

    【选型】常见的遥控开关控制协议,看看哪种适合你?

    遥控开关,是一种通过无线信号非接触式远程控制电路通断的装置,今天我们一起聊一聊常见的无线信号类别,看看哪种更适合你?1.红外遥控红外遥控
    的头像 发表于 07-17 19:34 2011次阅读
    【选型】常见的<b class='flag-5'>遥控</b>开关控制协议,看看哪种适合你?

    cyw20829能不能使用红外线解码吗?

    cyw20829能不能使用红外线解码
    发表于 07-03 06:49

    蓝牙语音遥控器:智能家居的智慧控制核心

    随着智能家居的蓬勃发展,蓝牙语音遥控器凭借其便捷的操作和智能交互体验,正迅速取代传统红外遥控器,成为智能电视、机顶盒等设备的首选控制工具。     相较于需对准设备的红外
    的头像 发表于 06-06 14:15 2766次阅读
    蓝牙语音<b class='flag-5'>遥控</b>器:智能家居的智慧控制核心

    单片机实例项目:NEC红外线协议编码与解码

    单片机实例项目:NEC红外线协议编码与解码,推荐下载!
    发表于 06-03 22:03