51单片机红外遥控信号解码

发布者:悦耳旋律最新更新时间:2025-09-23 来源: cnblogs关键字:51单片机  红外遥控  信号解码 手机看文章 扫描二维码
随时随地手机看文章

简介

红外遥控作为一种遥控手段应用是非常广泛的,并且红外线遥控装置具有体积小、 功耗低、 功能强、 成本低这些特点,在录音机、空调、音响等小型电器大多是采用红外遥控的方式进行控制。这篇文章我就来详细讲解一下红外遥控信号的解码方法,对于红外信号的收发原理在这里只做简单了解。红外遥控系统要有发射端和接收端,发射端将信号经芯片调制后由红外发光二极管将信号以红外光的形式发送出去。接收端通过红外监测二极管接收到红外信号后再经过放大、滤波、解调等操作输出高低电平,这样就完成了红外信号的收发。本次教程我选择下图这种红外遥控器进行红外信号的发射

选择一体化红外接收头作为红外信号的接收端,这是一种特殊的红外接收电路,它把红外接收管放大电路集成到了一块,从外形上看只有一个三极管大小,如图

一体化红外接收头共有三个引脚,将有凸起的一面对准自己后从左到右依次是信号输出、GND、VCC,它的工作电压为5V,可以选择一体化红外接收模块,我们在使用的时候只需要给它接上5V电源,接地,然后将信号输出脚连接到单片机就可以使用了。本篇文章我使用51单片机进行试验,51单片机用来解码红外信号是足够的并且易于理解,文章主要是讲解解码原理。

硬件连接

第一步是硬件连接,用到的硬件非常简单,只有一体化红外接收头和单片机最小系统。首先,我们给单片机最小系统和红外接收头接上电源,注意共地,然后将红外接收头的信号输出脚接到单片机的外部中断引脚上,这样就完成了硬件的连接。之所以将信号输出脚接到单片机的外部中断引脚是因为前面说过红外接收头在接收到红外信号后会输出高低电平,接在外部中断引脚后单片机可以在有信号的时候快速做出反应,后面的程序也是靠中断程序实现的。

NEC协议

前面讲过红外接收头在接收到红外信号后会输出高低电平,然后就可以通过我们的程序分析电平的变化来识别接收到的信号的内容。要将接收端的信号解码我们就要知道发送端的数据是如何编码的,在本文中用到的红外遥控器所使用的是NEC编码协议,所以我们首先要讲解一下NEC协议的相关信息。NEC协议是用于红外通信中的一种协议,通过NEC协议发送信息的格式如下图:

信息的开始是9ms高电平加4.5ms低电平的引导码,作用就是告诉设备通讯开始,有信号发送过来了。之后接的是8位地址码和8位地址反码,地址码的作用就是区分不同的接收器件,实现单独控制某个器件。最后是8位数据码和8位数据反码,数据码就是功能码,我们可以给不同数据码设定不同的功能,反码的作用就是检验接收到的数据是否正确。在上面的这条信息里,‘0’是用560us高电平加560us低电平表示的,‘1’是用560us高电平加1680us低电平表示。要注意的是上面的波形图是发射端的波形,我们红外接收端收到的信号的高低电平是与上图相反的,还要注意发射端在发射数据是是从最低位开始发射,所以我们接收到的信号也是从最低位开始的,另外当我们持续按住同一个按键时,发射端并不会重复发送地址码和数据码而是在发送完一次后每隔一段时间发送一次引导码(重复),间隔时间大约是108ms。下图为接收端引导码、引导码(重复)、‘0’、‘1’的波形:

在了解了这些关于NEC协议的信息后我们就可以开始写程序控制单片机来解码红外信号了。首先我来讲解一下解码程序的思路,之前我们将红外接收头的信号输出脚接在了单片机的外部中断引脚上,我们将外部中断的触发方式设置为跳变沿触发,当接收头接收到信号后就会输出一个低电平,低电平触发外部中断,我们在中断程序中启动定时器,这样当下一次低电平触发中断前,在这期间定时器所定的时间我们可以进行比较从而确定脉冲的宽度,确定数据为‘0’还是‘1’。接下来我根据具体代码进行介绍,

在上面这段函数中我们添加上相应的头文件和一些宏定义,之后我们定义一些变量和数组作为一些标志位以及一些数据的保存,在每个定义后面都有注释来解释相应的作用,在这里就不再赘述。

然后我们定义一个初始化函数用于定时器和中断的初始化设置,我们将定时器0用于计算红外信号高低电平的时间,将定时器1用于串口发送数据。

上面这段是定时器0的程序,在里面只是用来计算时间,定时器0中断一次是277.76us,我们通过IRtime就可以计算出红外信号的持续时间。

上面这段程序是外部中断的处理程序,当红外接收头接收到红外信号后会输出相应的高低电平变化,引导码和“1”、“0”的波形在前面的接收端波形图已经画出,这样当接收端为高电平的时候,就会触发外部中断,这是会查看IRtime的值,根据这个值来判断是否是9ms的引导码,如果是引导码则先将IRtime清零,然后将以后的脉冲时间都保存下来,如果不是则把IRtime清零,这样红外接收头接收到的33次脉冲的宽度就会保存到IRdata[]数组里。

上面这个函数是用来处理我们之前保存的33次脉冲宽度,并且转化为4字节的数据保存在IRcord[]数组里,具体的操作就是根据脉冲的时间来判断是“1”还是“0”,大家可以根据程序后面的注释来理解函数的内容。

最后我们在主函数部分调用之前的函数,并且在等待解码完成后将解码出来的4字节数据通过串口发送到电脑。最后我们看一下实际的效果,首先打开串口助手,波特率设置为9600,接收设置为HEX模式,这样当按下红外遥控器的按键时,就会返回遥控器的键值了,


关键字:51单片机  红外遥控  信号解码 引用地址:51单片机红外遥控信号解码

上一篇:51单片机的C语言基本用法
下一篇:51单片机C4炸弹编程

推荐阅读最新更新时间:2026-03-25 11:45

51单片机红外遥控信号解码
简介 红外遥控作为一种遥控手段应用是非常广泛的,并且红外线遥控装置具有体积小、 功耗低、 功能强、 成本低这些特点,在录音机、空调、音响等小型电器大多是采用红外遥控的方式进行控制。这篇文章我就来详细讲解一下红外遥控信号的解码方法,对于红外信号的收发原理在这里只做简单了解。红外遥控系统要有发射端和接收端,发射端将信号经芯片调制后由红外发光二极管将信号以红外光的形式发送出去。接收端通过红外监测二极管接收到红外信号后再经过放大、滤波、解调等操作输出高低电平,这样就完成了红外信号的收发。本次教程我选择下图这种红外遥控器进行红外信号的发射 选择一体化红外接收头作为红外信号的接收端,这是一种特殊的红外接收电路,它把红外接收管和放大电路集
[单片机]
红外遥控电机调速+普中51单片机+江科大自化协
1 实验现象   基于STC89C52单片机设计一个红外遥控直流电机调速系统。一上电,数码管上显示0,此时直流电机不转动。当按下红外遥控器上的“1”键时,数码管显示1,直流电机开始转动。电机转速分为4个挡位,每升高一个挡位,数码管都会显示对应的挡位数字同时提高电机的转速。 2 实验原理   该系统整体采用红外遥控器控制,红外接收模块接收到遥控器键码信号后,向单片机送入中断信号并由单片机译码,单片机开始进行相应挡位的数据处理和挡位的改变。通过模拟PWM模块产生不同的PWM矩形波来控制直流电机调速,最后显示挡位到数码管上。 3 系统设计 4 硬件设计(略) 5 软件设计 5.1 主函数 #include REGX52
[单片机]
<font color='red'>红外遥控</font>电机调速+普中<font color='red'>51单片机</font>+江科大自化协
基于51单片机+红外遥控解码+LCD1602显示
基本介绍 什么是红外线? 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线.红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。 红外线系统的组成 红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过
[单片机]
基于<font color='red'>51单片机</font>+<font color='red'>红外遥控</font><font color='red'>解码</font>+LCD1602显示
51单片机制作红外遥控
你的生活中是否也有这样的场景,要打开电视,满屋子找遥控器,翻了一大堆遥控器却愣是没找到哪个是电视机的?我们走访了不少家庭,得到了一个惊人的数据,至少一个三口之家的家庭会有6个遥控板,更多的甚至达到了10多个。越来越多的电器为了让操作更简便,更方便人们使用而采用了遥控的技术,以一般的家庭为例,一台电视就有一个遥控器、机顶盒一个遥控器,空调也是一个房间一个,也有三个遥控器、DVD也有一个遥控器。如果再加上客厅的电灯、风扇、音响等等那就更多了。常用的就由5,6个。许多的市民都面临着遥控器太多的烦恼。 迫切需要有一个能代替家里遥控器的装置。用单片机模拟遥控器发射红外线。 一、红外发射管电路 二、红外发射
[单片机]
51单片机红外遥控电风扇程序
红外遥控电风扇的电路图下载:http://www.51hei.com/bbs/dpj-20601-1.html 下面是主要源码: /**********************李登峰************************ * 编写;李登峰 * 晶振:11.0592MHZ ******************************************************************/ /*----------------------------------------------- 名称;单片机红外遥控电风扇 ---------------------------------------
[单片机]
<font color='red'>51单片机</font><font color='red'>红外遥控</font>电风扇程序
最简单的51单片机红外遥控解码程序
  用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im 中,当IrOK=1时解码有效。   /* 51单片机红外遥控解码程序 */   /* 适用uPD6121系列 */   #include   #define DIGPORT P2   #define WORDPORT P0   unsigned char code LED_num ={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};   #define Imax
[单片机]
51单片机红外遥控旋转LED数字电子钟二
将一张旧唱片按电机座的位置开孔,而定位用的挡光板应根据电路板上感光组件的位置确定。      二。电路板的制作   本制作品用51单片机控制,具体电原理图如下:         用Protel 99设计制作了电路板。            最后得到完成的作品。   遥控器用的是松下车载机的,只用了其中的六个键。      三。软件编程   因学的是C51(不懂汇编)这里只提供C语言源程序。并限制为无遥控功能。也可提供带遥控功能的hex文件。源程序.txt   四。运行效果   从开机,调整到最后完成。      开机时      调时状态      正常运行状态
[模拟电子]
<font color='red'>51单片机</font><font color='red'>红外遥控</font>旋转LED数字电子钟二
详细介绍用51单片机解密任何红外遥控
在这里我仅把一些关键的带出来 关于硬件电路 那么抛开那么多文字介绍 最后意思就是说 你家里的遥控板 也就是发射部分 是把所有的封装好了的 比如键盘矩阵、编码调制、LED红外发送器 等等 那么接受部分 SM0038 3个脚 一个脚地 一个脚电源 一个脚信号脚 接到 单片机随便个P口上(此处是P3。6) OK 硬件部分就搞定了当然还有数码管显示 ,这些肯定不用说你都能搞定吧,这些东东都有,所以就不用自己去搭电路那么麻烦了),那么 我们想 我们按一下遥控板 大家看到 有个灯闪了一下 然后OVER 那么 我们现在要做的就是在灯闪了那一下之后让 单片机来读它的键码 然后不同的键码来干不同的事 ,本文 是向大家解释一种方法 当然如果你知道遥控
[单片机]
详细介绍用<font color='red'>51单片机</font>解密任何<font color='red'>红外遥控</font>器
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved