红外遥控在汽车中的应用
摘要:简单地介绍了红外线遥控发射、接收系统的原理,给出用89C2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括发射、接收的原理图及其编程的主程序、串行口的发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件,利用串行口遥控编码及其校验功能,防止其它遥控码的干扰,提高产品的可靠性。红外线遥控装置具有体积小,功耗低、功能强、成本低等特点。
关键词:89C2051、红外遥控、串行口
红外线遥控是目前应用最广泛的一种通信和遥控手段。由于红外线遥控器具有体积小、功耗低、功能强、成本低等特点。因此,彩电、录像机、音响设备、空调、玩具、门铃以及遥控汽车路牌等其它小型装置上也纷纷采用红外线遥控。为改变目前汽车上的车头路牌指示灯(以下简称车号器),无法灵活改变的缺陷,把红外遥控用在其中,使其可以轻松实现远距离、非接触性的一次改变车号的目的,从而改变以前用人工翻牌的旧模式。
一、 汽车车号器的红外遥控系统
汽车上的车号器,原用简单的LED数码管控制,使用起来很不方便,为了能远离的控制它,就采用了红外遥控。通常红外遥控系统由发射和接收两部分组成,应用编/解码电路专用集成电路芯片来进行控制操作,如图1所示,发射部分包括键盘矩阵、编码调制、红外发送器。接收部分包括光电转换放大器、解调、解码电路。红外发送每次编码的发送是一个键值,即一个十六进制的数据。为了达到一次能发送一组数据(如车次号,通常为三位十进制数),我们可以采用89C2051的软件编码/解码的方法,先一次性输入一组车号,按下发送键后,全部发送出;同时在接收时,用连续接收方法,一次性解码所有数据。
javascript:window.open(this.src);" style="cursor:pointer;"/>
二、 遥控发射器及其编码
遥控发射器的专用芯片很多,但在汽车车号器遥控中,采用的是 89C2051 芯片。用P1口组成矩阵扫描反馈,获取键值,用内部的定时器1产生一个38K的软件定时中断,驱动P1.0产生一个38K的方波,当作红外线的调制基波,需要发送的数据,以串行方式,用波特率为1200,带奇偶校验的方式,直接送至TXD的串口发送端,而后TXD和P1.0进行逻辑与后,经过40106整形,用三极管驱动红外发射管直接发出。其原理图如下:
javascript:window.open(this.src);" style="cursor:pointer;"/>
三、 红外遥控接收器及其显示
接收器部分,主要由CX20106和89C2051、显示驱动4094、2803及数据存储器和看门狗25045组成,用解码芯片CX20106把38K的载波过滤后,得到一组波形,即以波特率为1200的串口数据,直接送至89C2051的RXD接收,用软件读取串口,输入缓存,得到一组数据,判断正确后,存放在非易失性的EEPROM25045中,同时直接用脉冲移位方式,送数据至4094,经2803驱动后显示,同时用25045的看门狗定时,保证在程序失控等情况下,能正确返回而不造成错误接收。由于串行口方式传输,本身带有奇偶校验和起停位校验,可以大大提高数据的可靠性,同时在数据组中还加入了累加和校验,再次提高了可靠性,因此在实际应用中,即使在露天、太阳直射、光照很强等恶劣环境下,都能保证不会误收数据而造成显示错误。其原理图如下:
javascript:window.open(this.src);" style="cursor:pointer;"/>
四、 软件编程
单片机89C2051软件包括主程序,串行口中断服务程序和定时中断服务程序三部分,在2051单片机内部RAM区建立相应的工作单元和标志位。
(一)、发送程序:SEND-BUFO∽SEND-BUF3为四个字符发送缓冲区,SEND-MARK为请求发送标志。当键盘扫描到有发送请求时,启动定时器,在P1.0输出一个38K的方波,同时启动串行口,把SEND-BUFO至SEND-BUF3中的数据,发送至SBUF中,合成后发送。其程序流程过程如下:
发送主程序:初始化时设置定时器、看门狗和串行口,并清显示,而后扫描键盘。若有键按下,进行按键处理;若是发送键,则置串口发送标志,启动定时器和串行发送程序,后返回主程序中的显示程序,送显示数据至缓冲区。
串口中断程序:现场保护,取发送数据至发送缓冲区,启动软件定时产生38K的方波,而后判数据是否发送完毕,结束则清除发送标志,反之,则返回继续送数据。
定时中断程序:现场保护回填定时长度,启动计数定时,并在指定的管脚P1.0取反,变成反相电平,返回。
(二)、接收程序:REC-BUFO∽REC-BUF4为四个字符的接收缓冲区,REC-MARK为数据接收完整的标志。当串行口中断产生时,按次序接收数据至REC-BUF0至REC-BUF3中,数据满后,计算累加和。如果正确,置REC-MARK标志;反之,把缓冲区数据清零。主程序中若判断有REC-MARK标志,则把数据进行处理后,送外存25045和显示缓冲区中显示,同时由于接收是在汽车中进行,电源电压和其它干扰很多,包括有可能产生的串行口误判等。因此,为了保证程序能正常运行,启动了25045中的看门狗电路,以每隔500ms时间定时刷新。其程序流程过程如下:
接收主程序:初始化时设置定时器、看门狗、清显示和外存25045判断有否数据接收标志,若有进行数据判断,正确的写至数据外存,并送至显示区显示,反之,返回主程序的显示程序和刷新看门狗。
串行口中断接收程序:现场保护后,判断接收