《电子技术应用》
您所在的位置:首页 > 模拟设计 > 设计应用 > 用ME300B单片机开发,1602液晶显示红外遥控键值解码器
用ME300B单片机开发,1602液晶显示红外遥控键值解码器
摘要: 本文介绍利用ME300B单片机开发系统加配套的红外遥控器来进行红外解码编程,并将其解出来的按键数据编码送1602LCD显示并进行相应的控制。
Abstract:
Key words :

红外线遥控装置具有体积小、功耗低、功能强、成本低廉、使用方便等优点,因此在现今大部分家电产品上得到了广泛的应用。如电视机、影碟机、空调、电风扇及音响等。除此之外,有些儿童玩具等小型电器上也开始采用。红外线遥控已经称为目前使用最广的一种遥控手段。

    本文介绍利用ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B" title="ME300B">ME300B单片机开发系统加配套的红外遥控器来进行红外解码编程,并将其解出来的按键数据编码送1602LCD显示并进行相应的控制。

一、红外遥控演示程序功能介绍

    当红外遥控器有键按下时则会周期性地发出一组32位二进制遥控编码,ME300B接收到该遥控编码后进行程序解码,解码成功,蜂鸣器会响一声,并在1602LCD上显示此键的键值代码。演示程序还定义DOWN键和UP键具有控制功能。
    当按下DOWN键(代码为12H)。蜂鸣器响一声。继电器关闭,并在1602LCD显示相应的键值代码如图1所示。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器Infrared decoder

当按下UP键(代码为1DH),蜂鸣器响一声,继电器吸合,并在1602LCD显示相应的键值代码如图2所示。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器Infrared decoder

二、ME300B红外遥控硬件介绍

红外遥控是由发射和接收两部分组成:
1、红外遥控器
ME300B配套的红外遥控器采用DT9122D(兼容HT6222、SC6122)芯片制作,共有32个功能键,在每个按键上标有功能码和此键的数据代码,如图3所示。当红外遥控器按键按下后,即有规律地将遥控编码发出,所按的键不同,遥控编码也不同。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器Infrared decoder

2、红外接收电路
ME300B选用T1838一体化红外接收头。接收来自红外遥控器的红外遥控信号。T1838集成红外接收二极管、放大、解调、整形等电路在同一封装上。
T1838负责红外遥控信号的解调,将调制在38kHz上的红外脉冲信号解调并倒相后输入到单片机的P3.2(INTO)引脚,由单片机进行高电平与低电平宽度的测量(脉冲宽度调制解码)。
T1838的输出端通过JP4与AT89S51的P3.2(INT0)连接,既可以使用中断方式也可以使用查询方式来编程。应用电路如图4所示。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器--电路图Infrared decoder

 

在T1838的电源输入端接有RC(R15、C17)电源滤波电路,可提高抗干扰能力。

三、红外遥控的解码方法
当红外遥控器有键按下时,发射一桢含有一个引导码,16位的用户编码和8位键数据码、8位键数据反码。引导码由一个9ms的载波波形和4.5ms的关断数据构成,它作为要随后发射的码的引导。前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的键数据码和8位的键数据反码用于核对数据是否接收准确。T1838将接收到的这一桢红外遥控信号进行解调与倒相后输入到单片机的P3.2(INT0)引脚,由单片机解码程序对此信号进行脉冲宽度解码。
编码0:低电平的宽度0.56ms+高电平的宽度0.56ms。
编码1:低电平的宽度0.56ms+高电平的宽度1.68ms。
编码“0”和“1”的定义如图5和图6所示。我们可以发现“0”和“1”低电平的宽度是固定的为0.56ms,不同的是两者高电平的宽度不同,“0”为0.56ms,“1”为1.68ms。因此可以根据高电平的宽度,来确定接收的编码是“0”还是“1”。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器--时序图Infrared decoder

四、解码程序的编程与说明

IR译码子程序主要工作为等待红外信号出现,跳过前引导信号(一个9ms的低电平和一个4.5mS的高电平),然后开始收集32位的编码数据,并存入以IRCOM为首地址的4个连续的内存单元中。
IR译码子程序;R0——存放IR接收数据;R2——高电平宽度的计数值;R3——一字节需接收8位。BIT位计数。
;IRIN—P3.2
IR_IN:
MOVR0,#IRCOMMOVR4.#30IR_IN1:
CALLDEL;延时4ms去干扰后,再确认IR信号是否出现DJNZR4.IR_IN1JBIRIN,IR_END:如果IRIN=1没有IR信号出现。则退出WAIT_H:
JBIRIN,WAIT_Hl:等IR变为高电平避开9毫秒低电平引导脉冲CALLDELJMPWAIT-HWAIT_H1:
MOVR3,#0:8位数清为OWAIT_L=JNBIRIN,WAILH2:等IR变为低电平,跳过4.5ms的前导高电平信号CALLDELJMPWAIT_LWAIT_H2:
JBIRIN,IR_COUN;等IR变为高电平CALLDELJMPWAIT_H2IR_COUN:
MOVR2,#0:对高电平进行0.14ms计数IR_COUN1:
CALLDELJBIRlN,IR_COUN2;等IR变为高电平:IR=0,检查R2中的计数值MOVA,#8CLRC:清借位标志SUBBA,R2:判断高低位,C=0,则解码为“0”:C=1,则解码为“1”
MOVA,@R0:取出原先的数据RRCA:将借位标志C移入AMOV@R0,A;处理完一位,将数据写入INCR3;接收字节计数加1CJNER3,#8,WAIT_L:需处理完8位MOVR3,#0INCR0:存放IR数据单元值加1CJNER0,#1RCOM+4,WAIT_L;收集到4字节了?
JMPIR_END;JMPIR_SHOWIR_C0UN2:
INCR2CJNER2,#20,IR_COUN1:0.14ms计数过长,则自动离开IR_END:REI;
;延时0.14ms;IR解码使用;晶振:11.0592MHzDEL:MOVR7,#64DJNZR7,$RET解码的关键是如何识别“0”和“1”。程序中设计一个0.14ms的延时时间作为单位时间,对脉冲维持高电平的时间进行计数,并把此计数值存入R2。若计数值为4.(0.14ms×4=0.56ms)表示脉冲高电平的宽度为0.56mS;若计数值为12,(0.14ms×12=1.68ms)表示脉冲高电平的宽度为1.68ms。因此可以直接判断高电平的宽度的计数值是4或是12,来决定编码为0或是1。在程序中把0.14ms×8=1.12ms作为判断“0”和“1”的分界点,使用减法指令SUBBA,R2来完成判断。
MOVA,#8:A寄存器设为8CLRC:清借位标志SUBBA,R2:R2为计数值
当“8-R2”有借位产生,借位标志C=1,则解码为“1”。
当“8-R2”无借位产生,借位标志C=0,则解码为”0”。
当“8-R2”有借位产生,说明脉冲维持高电平的时间>1.12ms(>0.56ms),则解码为“1”。当“8-R2”无借位产生,说明脉冲维持高电平的时间小于1.12ms(<1.68ms),则解码为”0”。另外当高电平计数≥20时(0.14ms×20=2.8ms)有错误程序退出。
数据比较子程序
IR_S}HOW:
MOVA,IRCOM+2CPLA:将IRCOM+2取反后和IRCOM+3比较CJNEA,IRCOM+3,IR_SHOW1:如果不等表示接收数据发生错误,放弃。
CALLBEEP_BL;蜂鸣器鸣响表示解码成功CALLCONV:数据转换与显示IR_SHOW1:
RET将8位的键数据码取反后与8位的键数据反码进行比较,核对接收的数据是否正确。如果接收的数据正确,蜂鸣器响一声,并将接收的数据经过转换后送1602LCD显示。
五、使用注意事项
在使用ME300B单片机开发系统进行红外遥控演示时,必须将JP4上的P32短接,使红外接收头接入电路中。选择数码管显示时,要短接JP2的2-3端。选择1602LCD显示时,要短接JP2的1-2端。整机演示效果图见图7。

用ME300B单片机开发,1602液晶显示红外遥控键值解码器Infrared decoder

此内容为AET网站原创,未经授权禁止转载。