用单片机解码红外遥控器
遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各
种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按
键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线
复杂、占用I/O 口过多的弊病。而且通过使用遥控器,操作时可实现人与设备
的分离,从而更加方便使用。下面以TC9012 编码芯片的遥控器为例。谈谈如何
用常用的51 系统单片机进行遥控的解码。
一、编码格式
1、0 和1 的编码
遥控器发射的信号由一串O 和1 的二进制代码组成.不同的芯片对0 和1
的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。TC9012 的O 和1
采用PWM 方法编码,即脉冲宽度调制,其O 码和1 码如图1 所示(以遥控
接收输出的波形为例)。O 码由O.56ms 低电平和0.56ms 高电平组合而成.脉
冲宽度为1.12ms.1 码由0.56ms 低电平和1.69ms 高电平组合而成.脉
冲宽度为2.25ms。在编写解码程序时.通过判断脉冲的宽度,即可得到0
或1。
2、按键的编码
当我们按下遥控器的按键时,遥控器将发出如图2 的一串二进制代码,我
们称它为一帧数据。根据各部分的功能。可将它们分为5 部分,分别为引导
码、地址码、地址码、数据码、数据反码。遥控器发射代码时.均是低位在
前。高位在后。由图2 分析可以得到.引导码高电平为4.5ms,低电平为
4.5ms。当
接收到此码时.表示一帧数据的开始。单片机可以准备接收下面的数据。地
址码由8 位二进制组成,共256 种.图中地址码重发了一次。主要是加强遥
控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。不
同的设备可以拥有不同的地址码.因此。同种编码的遥控器只要设置地址码
不同,也不会相互干扰。图中的地址码为十六进制的0EH(注意低位在前)。
在同一个遥控器中.所有按键发出的地址码都是相同的。数据码为8 位,可
编码256 种状态,代表实际所按下的键。数据反码是数据码的各位求反,通
过比较数据码与数据反码.可判断接收到的数据是否正确。如果数据码与数
据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。
在同一个遥控器上.所有按键的数据码均不相同。在图2 中,数据码为十六
进制的0CH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为
0FFH。
二、单片机遥控接收电路
红外遥控接收可采用较早的红外接收二极管加专用的红外处理电路的方法。
如CXA20106,此种方法电路复杂,现在一般不采用。较好的接收方法是用一体
化红外接收头,它将红外接收二极管、放大、解调、整形等电路做在一起,只有
三个引脚.分别是+5V 电源、地、信号输出。红外接收头的信号输
出接单片机的INTO 或INTl 脚.
三、遥控信号的解码算法及程序编制
平时。遥控器无键按下。红外发射二极管不发出信号,遥控接收头输出信号1。
有键按下时.O 和1 编码的高电平经遥控头倒相后会输出信号O.由于与单片机
的中断脚相连,将会引起单片机中断(单片机预先设定为下降沿产生中断)。单片
机在中断时使用定时器0 或定时器1 开始计时.到下一个脉冲到来时,即再次产
生中断时,先将计时值取出。清零计时值后再开始计时.通过判断每次中断与上
一次中断之间的时间间隔。便可知接收到的是引导码还是 O 和1。如果计时值
为9ms。接收到的是引导码,如果计时值等于1.12ms,接收到的是编码O。如
果计时值等于2 25ms.接收到的是编码1。在判断时间时,应考虑一定的误差值。
因为不同的遥控器由于晶振参数等原因,发射及接收到的时间也会有很小的误
差。
以接收TC9012 遥控器编码为例,解码方法如下:
(1)设外部中断0(或者1)为下降沿中断,定时器0(或者1)为16 位计时器.初
始值均为O。
(2)第一次进入遥控中断后,开始计时。
(3)从第二次进入遥控中断起,先停止计时。并将计时值保存后,再重新计时。
如果计时值等于前导码的时间,设立前导码标志。准备接收下面的一帧遥控数据,
如果计时值不等于前导码的时间,但前面已接收到前导码,则判断是遥控数据的
O 还是1。
(4)继续接收下面的地址码、数据码、数据反码。
(5)当接收到32 位数据时,说明一帧数据接收完毕。此时可停止定时器的计时,
并判断本次接收是否有效.如果两次地址码相同且等于本系统的地址,数据码与
数据反码之和等于0FFH,则接收的本帧数据码有效。否则丢弃本次接收到的数
据。
(6)接收完毕,初始化本次接收的数据,准备下一次遥控接收。