您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 任务54红外遥控解码
5.4红外遥控器解码1任务5.4红外遥控器解码5.4.1任务介绍红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。本节的任务是:通过51单片机定时器来捕捉红外一体化接收头接收到的遥控编码,并将遥控编码输出到8位LED上。5.4.2知识准备1、红外发射和接收原理红外遥控系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号能更好的被传输,发送端将基带二进制信号调制为脉冲串信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。图5.4.1是红外遥控接收与发射示意图。图5.4.1红外遥控器收发示意图2、调制与解调红外遥控器发射出的红外信号属于无线信号,为了避免被其它无线信号干扰,通常需要把发送的信息(基带信号)调制到一定频率的载波上传输,利用载波的不同频率来避免相互干扰,如我们手机信号的载波频段是900MHz,蓝牙的频段是2.4GHz,红外的就是38kHz,保证5.4红外遥控器解码2这些信号在相同的空间传输时相互之间不干扰。载波频率为一般在30KHz与60KHz之间,实际上大多使用的是频率为38KHz,占空比为1/3的矩形波。(1)调制红外遥控器的编码调制指的是把编码后的二进制信号调制成频率为频率为38KHz的间隔脉冲串,相当于用二进制信号的编码乘以频率为38KHz的脉冲信号得到的间隔脉冲串,图5.4.2所示。图5.4.2红外信号的调制(2)解调红外接收头接收到信号后,需要将调制信号解调,解调是调制的逆过程。其过程为当接收到调制信号时,输出高电平,否则为低电平。图5.4.3红外信号的解调3、红外遥控器的编码红外遥控的编码有多种方式,我们的开发板上配套的红外遥控器采用PPM编码,如果5.4.4所示。图5.4.4PPM编码5.4红外遥控器解码3当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、16位地址码(8位地址码和位地址码的反码)和16位操作码(8位操作码和8位操作码的反码)组成。每个遥控器1个地址码,这样可以有效地防止多个设备之间的干扰。操作码是遥控器上按键的编码。反码用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的高电平(起始码)和一个4.5ms的低电平(结果码)组成,作为接受数据的准备脉冲。地址码和操作码的编码格式为:脉宽0.56ms、周期1.12ms的组合表示二进制‘0’;脉宽1.68ms、周期2.24ms的组合表示二进制的‘1’,如图5.4.5所示。图5.4.5‘1’和‘0’的编码格式4、红外接收头红外接收电路通常被厂家集成在一个元件中,称为一体化接收头。一体化接收头中包含了红外检测二极管、放大管、限幅器、带通滤波器、积分电路和比较器等。红需要注意的是红外接收头解调出的编码与发射的编码反相。即发射的编码为高电平,则接受的编码为低电平。红外一体化接收头分为电平型和脉冲型。电平型的红外接收头,开发板上使用的红外接收头属于脉冲型,型号为HS1838外观如图5.4.6(a)所示,其引脚定义从左到右分别是OUT、GND、VCC。接口电路如图5.4.6(b)所示,为了保证电源的稳定,输入电源和VCC之间串如了100欧姆的电阻,同时在VCC和GND之间加滤波电容。输出加上拉,上拉电阻选取22K欧姆。(a)(b)图5.4.6一体化接收头外观和电路5.4红外遥控器解码45、定时器测量脉宽红外接收头接收到的编码与发送的编码电平相反,二进制‘0’和‘1’的区别在于高电平时间长度不同,‘0’的高电平时间长度是0.56ms,‘1’的高电平时间长度是1.68ms,而两者的低电平时间长度是相同的,都为0.56ms。要读取红外接收头的编码,可以从测量“0”和“1”脉宽(高电平时间长度)入手。我们在讲定时器0的内部构造中提到,如果门控位GATE为0,则定时器的开启由TR0来决定。如果门控位GATE不为0,则定时器的开启不仅需要TR0的参与,还需要中断引脚(INTn,n为0或1)的参与,图5.4.7为定时/计数器1的内部结构图。图5.4.7定时/计数器0的内部结构框图当门控位GATE为1时,经过非门输出为0,然后再与外中断引脚(INT1_______)经过或门输出,则或门的输出为外部中断引脚(INT1_______)的电平,最后再和TR0经过与门的输出来控制定时器开关。由此可见,定时器的开启,不仅需要TR0置1,还需要外部中断引脚变为高电平。利用51单片机的这个特点可以测量接在外中断引脚信号的脉宽。脉宽测量的思路如下:当外部信号为低电平时,定时器关闭,当外部信号为高电平时,定时器开始计时。当外部信号由高变低时,定时器停止计时,同时触发外中断函数。在外部中断服务函数中,计算定时器测量的时间长度,这个时间长度为外中断引脚所接信号的脉宽。5.4.3任务实施图5.4.8是本程序的工程结构图:图5.4.8工程结构框图5.4红外遥控器解码5(1)主函数main.c:程序解释:InfraredInit()函数挖成红外解码的初始化,实际上是定时器0完成脉宽测量功能的初始化。在大循环中,如果捕获到了按键值,则将键值送往P0口显示。(2)红外测量模块Infrared.h:#includereg52.h#includeInfrered.h#includeMicroDefine.h/****************************************************************************函数名称:main()*功能:主函数*入口参数:无*出口参数:无*说明:***************************************************************************/voidmain(){DelayMs(200);InfraredInit();//定时器测量脉宽初始化while(1){if(FlagInfraredGet==1)//捕获到新的按键值{FlagInfraredGet=0;P0=InfraredValue;//将键值送往P0口显示}}}#ifndef_INFRERED_H#define_INFRERED_H#includereg52.h#includeMicroDefine.h5.4红外遥控器解码6Infrared.c://变量声明externbitFlagInfraredGet;externucharInfraredValue;//函数声明externvoidInfraredInit();#endif#includeInfrered.hbitFlagInfraredGet=0;//捕获信号标志位ucharInfraredValue=0;//遥控键值/****************************************************************************函数名称:InfraredInit()*功能:定时器测量脉宽功能初始化*入口参数:无*出口参数:无*说明:***************************************************************************/voidInfraredInit(){TMOD=0x09;//定时器0,GATE=1,C/T=0,M1M0=01;TH0=TL0=0x00;//定时器0初值为0TR0=1;//开定时器0EX0=1;//开外中断0IT0=1;//中断0下降沿触发EA=1;//开总中断}/****************************************************************************函数名称:Intr0Init()*功能:在外部中断0服务函数中完成解码*入口参数:无*出口参数:无*说明:***************************************************************************/voidIntr0_Isr(void)interrupt0{uintPulseWidth=0;//脉宽ucharOriginalCode=0;//操作码原码5.4红外遥控器解码7ucharAntiCode=0;//按键码反码staticbitFlagStart=0;//捕获结果码标志位staticucharIntrNum=0;//中断次数staticunsignedlongintInfraredDecode=0;//32位的地址码+操作码PulseWidth=(TH08)+TL0;//测得脉宽的时间TH0=TL0=0x00;//清空定时器if((PulseWidth4000)&&(PulseWidth5000))//如果脉宽在4000-5000,为{//结果码FlagStart=1;//结果码标志位置位IntrNum=0;//清空中断计数InfraredDecode=0;//清空解码变量}if(FlagStart==1)//如果捕获到结果码,{//则开始捕获后续码值if((PulseWidth450)&&(PulseWidth800))//脉宽在450-800之间,{//则判定为0InfraredDecode=InfraredDecode1;IntrNum++;}if((PulseWidth1500)&&(PulseWidth2000))//脉宽在1500-2000之间{//,则判定为1InfraredDecode=(InfraredDecode1)+1;IntrNum++;}if(IntrNum=32)//捕获32位码{IntrNum=0;AntiCode=InfraredDecode&0xff;//操作码反码OriginalCode=(InfraredDecode8)&0xff;//操作码原码if(AntiCode+OriginalCode==0xff)//原码和反码互补{FlagInfraredGet=1;//红外遥控捕捉标志位置位InfraredValue=OriginalCode;//红外遥控键值}FlagStart=0;//清空结果码标志位5.4红外遥控器解码8程序解释:(1)在Infrared_Init()函数中,配置定时器和中断。注意TMOD的配置,GATE=1。(2)红外的解码在外中断函数中完成,每进入一次外中断函数,完成一次脉宽的测量,根据定时器TH0和TL0的值来判断前一次脉冲属于结果码,还是属于‘0’或‘1’。在获得结果码的前提下,判断后续脉冲是‘0’还是‘1’,解码的结果放在InfraredDecode变量中,连续接收32次后,红外解码完成,然后取出操作码和其反码,再检查操作码和反码是否互补,如果是互补,则捕获成功标志位置位。}}}
本文标题:任务54红外遥控解码
链接地址:https://www.777doc.com/doc-2715466 .html