基于单片机的红外遥控信号解码的新方法

发布者:guqian999最新更新时间:2012-10-10 来源: 21IC 关键字:单片机  红外遥控  信号解码 手机看文章 扫描二维码
随时随地手机看文章
引言
    随着家用电器、试听产品的普及,红外遥控器已经被广泛应用在各种类型的家电产品中(如遥控开关、智能开关等)。红外遥控是一种把红外线作为载体的控制方式,由于其波长远小于无线电的波长,因此在采用红外遥控方式时不会干扰其他电器的正常使用,也不会影响临近的无线电设备。另外,红外遥控器件具有体积小、功耗低、性价比高的优点,是理想的人机输入设备,非常适合电子工程师和电子爱好者DIY开发与制作。红外遥控系统主要由发射和接收两大部分组成,由于发射部分使用的是购买来的遥控器成品,所以本文的重点是红外接收、解码部分。下面将从硬件结构和软件编程两个方面出发,介绍一种基于51系列单片机汇编语言的红外遥控解码新方法。

1 硬件构成
    红外接收头的种类很多,本文使用的是市场上常见的VS1838B,外观如图1所示。它采用内、外双屏蔽直捅式封装,输出匹配TTL、CMOS电平,灵敏度高,抗干扰性能好,接收距离可达20 m。从正面看,其3个引脚分别是信号输出端、电源地与电源正。硬件电路连接非常简单,如图2所示。图中0.1μF瓷片电容用来滤波,供电引脚与电源之间接入100Ω的电阻以进一步降低电源干扰。在本文中信号输出端接51单片机最小系统的外部中断1口(即P3.3),这样一个简单的硬件电路就搭好了。


   

2 软件编程方法

2.1 基本方法介绍
    大多数人使用的方法是在两次外部中断下降沿中,通过软件手动开启与关闭定时器得到时间宽度。本文的思路是通过51单片机固有的外部中断与定时器自动配合的“门控方式”来获得红外信号波形信息。具体做法如下:参考表1,设置51单片机定时器工作方式寄存器(TMOD)
Bit7=1,即定时器T1为门控方式。此时只有当T1运行控制化TR1=1并且外部中断1为高电平时,定时器T1才启动;TR1=0或者外部中断1为低电平时T1就自动停止计数。


   
    每次当信号是高电平时定时器1自动开始计时,下降沿信号来临的时候,在外部中断1中自动获取TH1与TL1的值,这样就得到了信号的时间宽度,从而可以区分出引导码、重复码、位0、位1的信息,再经过后续的软件处理就可以得到红外遥控按键的键码了。红外遥控器解码的关键在于对发射器波形规范的理解,常见的遥控器编码有32位和42位两种模式,主要区别在于系统码的位数不一样。值得注意的是,同样位数模式的遥控器的结束码也可能会不同。另外在按键连按状态下,不同遥控器发出的重复码各异,这些都会影响到程序的编写。下文将列举出两款不同位数的遥控器,分别阐述其门控方式下的软件编程思路。

2.2 32位编码

    硬件使用的是购置的超薄型遥控器,内置芯片为uPD6121G,采用NEC32位格式。其数据格式如图3所示,包括了起始码、用户码、数据码和数据反码。其中,起始码由9 ms高电平和4.5 ms低电平构成,后接16位用户码、8位数据码以及8位数据反码。数据反码是数据码取反后的编码,编程时可以用于数据纠错。位定义如图4所示,位1用高电平0.56 ms加低电平1.68 ms表示。位0用高电平0.56 ms加低电平0.56 ms表尔。要注意的是当一直按住按键时,芯片发出一次键码后就不停地发重复码了,写程序时对重复码要有特别的区分,其重复码的波形如图5所示。
[page]

    了解了各种码制的区别后,就可以开始着手写程序了。红外解码程序主要包括了中断初始化函数和中断子函数两个部分。另外,由于一体化接收头输出信号与发射波形是反向的,在定时器中记录的实际是红外波形中低电平的时间长度。


   
2.2.1 初始化函数
    在初始化函数中主要是对中断1和定时器1的特殊功能寄存器单元进行定义,同时对相关工作单元进行初始化。初始化代码如下:



2.2.2 中断子函数
    中断子函数中得到了一体化接收头高电平的时间宽度,以此来区分起始码、信息位和重复码。如果是起始码,就转入初始化处理模块;如果是信息位则通过右移操作将0、1信息存入定义好的寄存器单元,直到获得所需的4字节数据为止。注意在子函数中利用TH1保护ACC和利用ADD来获得0、1信息位的技巧。


[page]

2.2.3 主监控程序中对IRKeyReady标志的处理
    在主监控程序中,不断查询IRKeyReady标志。如果标志置位,则在主程序巾进入键值处理,判断键值的类型,以便实现遥控器按键的功能。代码如下:

2.3 42位编码
    硬件使用57L5彩电遥控器,其内部红外发射专用集成电路为TC7461,采用42位的编码结构,包含13位用户码、13位用户反码、8位数据码和8位数据反码。42位编码结构如图6所示。引导码由9 ms的载波和4.5 ms的载波关断波形所构成,作为用户码、数据码以及它们的反码的先导。信息位0与1的定义与上述NEC32位格式相同。但是长按键时,其重复码的前13.5 ms与引导码是一样的,在编程中要特别处理,其重复码波形如图7所示。

 


    
 

    初始化阶段与32位的基本类似,但由于重复码的波形和起始码相同,为了区分清楚,这里引用了状态机的方法,添加了状态寄存器IR57 L5Satus和计数寄存器IRSysCODECnt,初始化时都先清零。以数值0、1、2来表示3种不同的状态。每种状态具体的功能如下:
    ◆为0时进入引导码或重复码,然后赋值IR57L5Satus为1。
    ◆为1时进入26个系统位阶段,为了简单起见,在这里跳过它们,并未存储。赋值IR57L5Satus为2。同时在这个状态,初始化2个数据存储寄存器IRCode和IRCode+1。
    ◆为2时收数据码,16位收到后,赋值IR57L5Satus为0。
    限于篇幅,这里不列出具体代码,其中断子程序软件流程如图8所示。

3 调试
    在测试程序的过程中需要示波器与串口调试助手软件。示波器用于检测红外发射波形是否符合规范。而通过编写单片机串口程序,并借助于串口调试助手软件,可以将红外数据接收单元的信息发送到PC机上,而后通过与遥控器说明书比对,以证实数据码的准确性。这种红外解码方法在本人制作的硬件时钟和多温区控制系统等项目中都有应用,数据接收准确、使用效果良好。

关键字:单片机  红外遥控  信号解码 引用地址:基于单片机的红外遥控信号解码的新方法

上一篇:SPI接口基础上的各种串行通信工作方式配置及驱动编程
下一篇:基于MCS8051数据采集监测系统的设计

推荐阅读最新更新时间:2024-03-16 13:10

单片机控制板设计原则及一些细节问题
1.元器件布局 在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。 2.去耦电容 尽量在关键元件,如ROM、RAM等芯片旁边安装去耦电容。实际上,PCB板走线、引脚连线和接线等都可能含有较大的电感效应。大的电感可能会在Vcc 走线上引起严重的开关噪声尖峰。防止Vcc走线上开关噪声尖峰的唯一方法,是在VCC与电源地之间安放一个0.1
[单片机]
PIC18F系列单片机对多媒体终端红外遥控器硬件的控制设计
1 设计理念和原理 1.1 设计理念 随着数字家庭等领域技术的迅速发展,在多媒体终端上的增值业务将越来越多,浏览网页、搜索、短信等都需要遥控器进行输入。但作为连接用户和终端之间的重要外设,遥控器的设计理念还停留在模拟电视时代,体验感较差。目前用户输入的解决方式是呼出终端的内置输入法,这样就带来了两个问题:一,不同厂家的终端都需要内置自己的中英文输入法,占用资源,而且必须搭配自己的遥控器使用,通用性不高;二,用户在输人时必须一边看遥控器输入一边看屏幕确认输入,如果文字较多会造成频频抬头和低头的麻烦,难以忍受。基于以上缺点,本文提出将输入法内置于遥控器的理念,在遥控器上输入文字后再统一将文字编码用红外线发给终端,终端接收后将编码译成文
[单片机]
PIC18F系列<font color='red'>单片机</font>对多媒体终端<font color='red'>红外遥控</font>器硬件的控制设计
用PIC单片机PICC编程实现延时函数及循环体优化
  很多人说C中不能精确控制延时时间,不能象汇编那样直观。其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来。      一般的我们都用for(x=100;一x;){;}      此句等同与x=100;while(--x){;};或州x=0:x 100;x++){;)来写一个延时函数。      在这里要特别注意:X=100,并不表示只运行100个指令时间就跳出循环。      可以看看编译后的汇编:   从代码可以看出总的指令是是303个,其公式是8+3*(X—l)。注意其中循环 周期 是X一1是99个。      这里总结的是x为char类型的循环体,当x为int时候,其中受X值的影响较大。      建议设
[单片机]
用PIC<font color='red'>单片机</font>PICC编程实现延时函数及循环体优化
单片机语音报警系统设计
  1 硬件电路设计(图)     系统工作过程:     单片机AT89C51采集设备的各种信息,根据不同设备和传感器,可以是压力、流量、温湿度、电压、电流等,然后与预先存储在单片机内的阈值比较,若超出正常范围,则通过电话机拨号电路拨打维护人员的固定或移动电话,等待拨通后再控制ISD4004构成的数码语音电路播放相对应的故障信息。维护人员听到信息后根据故障优先级作相应处理。     1.1 语音电路     ISD4004语音芯片是由美国ISD公司推出的新产品,单片录放语音时间8-16min,操作简单,音质好。芯片内含振荡器、防混滤波器;平滑滤波器、自动静噪、音频放大器及高密度多电平闪烁存贮阵列。芯片设计是基于所
[单片机]
<font color='red'>单片机</font>语音报警系统设计
基于微控制器的自由轴法RLC测量方法研究
0 引 言 R,L,C是电子电路及系统的主要元件,R,L,C参数的测量方法有电桥法、谐振法、伏安法。其中,电桥法具有较高的测量精度,但电路复杂且需要进行电桥平衡调节,不宜完成快速的自动测量。由于测量方法的制约,谐振法需要很高的频率激励信号,一般无法完成较高精度的测量。伏安法在设计中必须完成矢量测量及除法运算,为了实现高精度测量,还需要采用低失真的正弦波信号和高精度的A/D,早期实现比较困难。由于计算机技术的发展,智能仪器的计算能力和控制能力有了较大提高,使伏安法在实际中得到广泛应用。 伏安法测量中,有固定轴法和自由轴法两种,固定轴法要求相敏检波器的相位参考基准严格地与标准阻抗电压的相位相同,对硬件要求很高,并且存在同相误差,已很少
[单片机]
基于<font color='red'>微控制器</font>的自由轴法RLC测量方法研究
采用ARM和单片机的CPLD/FPGA高速数据处理系统
1 引 言 传统的数据采集系统一般采用单片机,系统大多通过PCI总线完成数据的传输。其缺点是数学运算能力差;受限于计算机插槽数量和中断资源;不便于连接与安装;易受机箱内电磁环境的影响。这些问题遏制了基于PCI总线的数据采集系统的进一步开发和应用。因此,需要一种更为简便通用的方式完成采集系统和计算机数据的交互。 数据采集系统性能的好坏,主要取决于它的精度和速度。在保证精度的条件下应尽可能地提高采样速度,以满足实时采集、实时处理和实时控制的要求。实践表明,采用ARM 32位嵌入式微处理器作为控制器,用USB(通用串行总线)和上位机连接构成的数据采集系统能大大提高系统数据处理的能力,降低对PC机和接口速度的依赖。 2 系统硬件设
[单片机]
采用ARM和<font color='red'>单片机</font>的CPLD/FPGA高速数据处理系统
单片机和 FIFO 的接口汇编程序
下面的程序中,单片机将FIFO中的数据读取出来后,从串口发送出去。 ;*********************************** ef bit p3.3 ;fifo empty flag rst bit p3.5 ;reset fifo read bit p3.7 ;read fifo org 0000h ljmp main org 0030h main: ;------ initial timer mov tmod,#00100001b ;timer0 mode 1 (16 bit)
[单片机]
用PComm开发PC机与单片机的通信程序
摘要:介绍了分布式控制系统中上位PC机与下位单片机异步串行通信的通信协议;同时介绍了在VC++6.0环境下用PComm编写的PC机通信程序来实现上位机和下位机异步串行通信的方法,给出了PComm编程实例和下位机程序模块流程图。 关键词:分布式控制系统;异步;串行通信;PComm 在由一台PC机(上位机)和多台单片机(下位机)构成的分布式控制系统中,单片机主要负责实时数据采集,并将初步处理后的数据通过串行口传送给PC机以便由PC机串行口的命令对单片机进行控制,同时通过打印机或显示器向用户随时提供各种统计报表和整个控制过程的具体数据。在这样的分布式控制系统中,单片机与微机之间的多路通信是整个系统的关键,本文将介绍在提高通信的准
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved