红外遥控器解码程序Word文件下载.docx
《红外遥控器解码程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《红外遥控器解码程序Word文件下载.docx(72页珍藏版)》请在冰豆网上搜索。
接收频率:
38kHz
峰值波长:
980nm
静态输出:
高电平
输出低电平:
≤0.4V
输出高电平:
接近工作电压
红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;
接收部分包括光、电转换放大器、解调、解码电路。
<
IMGsrc="
http:
//www.xie-onload="
if(this.width>
screen.width-333){this.width=screen.width-333;
this.alt='
ClickHeretoOpenNewWindow'
;
}"
border=0onmouseover="
if(this.alt)this.style.cursor='
hand'
"
onclick="
if(this.alt)window.open('
//www.xie-
3
遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;
以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,如图3所示。
UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制01H;
后16位为8位操作码(功能码)及其反码。
UPD6121G最多额128种不同组合的编码。
遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。
一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。
当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。
如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成
很多电器都采用红外遥控,那么红外遥控的工作原理是什么呢?
首先我们来看看什么是红外线。
人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
其中红光的波长范围为0.62~0.76μm;
紫光的波长范围为0.38~0.46μm。
比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
、
常用的红外遥控系统一般分发射和接收两个部分。
发射部分的主要元件为红外发光二极管。
它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。
目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通5发光二极管相同,只是颜色不同。
红外发光二极管一般有黑色、深蓝、透明三种颜色。
判断红外发光二极管好坏的办法与判断普通二极管一样:
用万用表电阻挡量一下红外发光二极管的正、反向电阻即可。
红外发光二极管的发光效率要用专门的仪器才能精确测定,而业余条件下只能用拉距法来粗略判定。
接收部分的红外接收管是一种光敏二极管。
在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
红外接收二极管一般有圆形和方形两种。
由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
前些年常用μPC1373H、CX20106A等红外接收专用放大电路。
最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。
成品红外接收头的封装大致有两种:
一种采用铁皮屏蔽;
一种是塑料封装。
均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。
红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。
成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。
但在使用时注意成品红外接收头的载波频率。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz陶振来决定的。
在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷
12≈37.9kHz≈38kHz。
也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。
红外遥控的特点是不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;
电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;
编解码容易,可进行多路遥控。
由于各生产厂家生产了大量红外遥控专用集成电路,需要时按图索骥即可。
因此,现在红外遥控在家用电器、室内近距离(小于10米)遥控中得到了广泛的应用。
多路控制的红外遥控系统多路控制的红外发射部分一般有许多按键,代表不同的控制功能。
当发射端按下某一按键时,相应地在接收端有不同的输出状态。
接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。
“脉冲”输出是当按发射端按键时,接收端对应输出端输出一个“有效脉冲”,宽度一般在100ms左右。
“电平”输出是指发射端按下键时,接收端对应输出端输出“有效电平”,发射端松开键时,接收端“有效电平”消失。
此处的“有效脉冲”和“有效电平”,可能是高、也可能是低,取决于相应输出脚的静态状况,如静态时为低,则“高”为有效;
如静态时为高,则“低”为有效。
大多数情况下“高”为有效。
“自锁”输出是指发射端每按一次某一个键,接收端对应输出端改变一次状态,即原来为高电平变为低电平,原来为低电平变为高电平。
此种输出适合用作电源开关、静音控制等。
有时亦称这种输出形式为“反相”。
“互锁”输出是指多个输出互相清除,在同一时间内只有一个输出有效。
电视机的选台就属此种情况,其它如调光、调速、音响的输入选择等。
“数据”输出是指把一些发射键编上号码,利用接收端的几个输出形成一个二进制数,来代表不同的按键输入。
一般情况下,接收端除了几位数据输出外,还应有一位“数据有效”输出端,以便后级适时地来取数据。
这种输出形式一般用于与单片机或微机接口。
除以上输出形式外,还有“锁存”和“暂存”两种形式。
所谓“锁存”输出是指对发射端每次发的信号,接收端对应输出予以“储存”,直至收到新的信号为止;
“暂存”输出与上述介绍的“电平”输出类似。
在家用电器和工业控制系统中红外线遥控器已得到广泛应用,了解他们的工作原理和性能、进一步自制红外遥控系统,也并非难事。
1.红外线的特点:
人的眼睛能看到的可见光,若按波长排列,依次(从长到短)为红、橙、黄、绿、青、蓝、紫,如图1所示。
由图可见,红光的波长范围为0.62μm~0.76μm,比红光波长还长的光叫红外线。
红外线遥控器就是利用波长0.76μm~1.5μm之间的近红外线来传送控制信号的。
红外线的特点是不干扰其他电器设备工作,也不会影响周边环境。
2.红外线发射和接收
人们见到的红外遥控系统分为发射和接收两部分。
常用的红外发光二极管发出的红外线波长为940nm左右,外形与普通?
准5mm发光二极管相同,只是颜色不同。
一般有透明、黑色和深蓝等三种。
接收电路的红外接收管是一种光敏二极管,使用时要给红外接收二极管加反向偏压,它才能正常工作而获得高的灵敏度。
红外接收头的主要参数如下:
工作电压:
4.8~5.3V
工作电流:
1.7~2.7mA
接收频率:
峰值波长:
静态输出:
输出低电平:
≤0.4V
输出高电平:
3.红外线遥控发射电路
红外线遥控发射电路框图如图4所示。
框图4是目前所有红外遥控器发射电路的功能组成,其中的编码器即调制信号,按遥控器用途的编码方式可以很简单、也可以很复杂。
例如用于电视机、VCD、DVD和组合音响的遥控发射的编码器,因其控制功能多达50种以上,此时的编码器均采用专用的红外线编码协议进行严格的编程,然而对控制功能少的红外遥控器,其编码器是简单而灵活。
前者编码器是由生产厂家的专业人员按红外遥控协议进行编码,而后者适用于一般电子技术人员和电子爱好者的编码。
图4中的38kHz振荡器即载波信号比较简单,但专业用的和业余用的也有区别,专业用的振荡器采用了晶振,而后者一般是RC振荡器。
例如彩电红外遥控器上的发射端用了455kHz的晶振,是经过整数分频的,分频系数为12,即455kHz÷
12=37.9kHz。
当然也有一些工业用的遥控系统,采用36kHz、40kHz或56kHz等的载波信号。
因红外遥控器的控制距离约10米远,要达到这个指标,其发射的载波频率(38kHz)要求十分稳定,而非专业用的RC(38kHz)载波频率稳定性差,往往偏离38kHz甚至很远,这就大大缩短了遥控器的控制距离。
因晶振频率十分稳定,所以专业厂家的遥控器全部采用晶振的38kHz作遥控器的载波发送信号。
图4中编码器的编码信号对38kHz的载波信号进行调制,再经红外发射管D向空间发送信号供遥控接收端一体化接收头接收、解调输出、再作处理。
以下是程序,调试成功,LCD1602显示
//本解码程序适用于NEC的upd6121及其兼容芯片的解码,支持大多数遥控器实验板采用11.0592MHZ晶振
#include<
reg52.h>
//包含单片机寄存器的头文件
intrins.h>
//包含_nop_()函数定义的头文件
sbitIR=P3^2;
//将IR位定义为P3.2引脚
sbitRS=P2^0;
//寄存器选择位,将RS位定义为P2.0引脚
sbitRW=P2^1;
//读写选择位,将RW位定义为P2.1引脚
sbitE=P2^2;
//使能信号位,将E位定义为P2.2引脚
sbitBF=P0^7;
//忙碌标志位,,将BF位定义为P0.7引脚
sbitBEEP=P3^6;
//蜂鸣器控制端口P36
unsignedcharflag;
unsignedcharcodestring[]={"
1602IR-CODETEST"
};
unsignedchara[4];
//储存用户码、用户反码与键数据码、键数据反码
unsignedintLowTime,HighTime;
//储存高、低电平的宽度
/*****************************************************
函数功能:
延时1ms
***************************************************/
voiddelay1ms()
{
unsignedchari,j;
for(i=0;
i<
10;
i++)
for(j=0;
j<
33;
j++)
;
}
/*****************************************************
延时若干毫秒
入口参数:
n
voiddelay(unsignedcharn)
{
unsignedchari;
n;
delay1ms();
/*********************************************************/
voidbeep()//蜂鸣器响一声函数
for(i=0;
100;
BEEP=!
BEEP;
//BEEP取反
}
BEEP=1;
//关闭蜂鸣器
delay(250);
//延时
}
判断液晶模块的忙碌状态
返回值:
result。
result=1,忙碌;
result=0,不忙
unsignedcharBusyTest(void)
bitresult;
RS=0;
//根据规定,RS为低电平,RW为高电平时,可以读状态
RW=1;
E=1;
//E=1,才允许读写
_nop_();
//空操作
//空操作四个机器周期,给硬件反应时间
result=BF;
//将忙碌标志电平赋给result
E=0;
returnresult;
将模式设置指令或显示地址写入液晶模块
dictate
voidWriteInstruction(unsignedchardictate)
{
while(BusyTest()==1);
//如果忙就等待
//根据规定,RS和R/W同时为低电平时,可以写入指令
RW=0;
//E置低电平(根据表8-6,写指令时,E为高脉冲,
//就是让E从0到1发生正跳变,所以应先置"
0"
//空操作两个机器周期,给硬件反应时间
P0=dictate;
//将数据送入P0口,即写入指令或地址
//空操作四个机器周期,给硬件反应时间
//E置高电平
//当E由高电平跳变成低电平时,液晶模块开始执行命令
指定字符显示的实际地址
x
voidWriteAddress(unsignedcharx)
WriteInstruction(x|0x80);
//显示位置的确定方法规定为"
80H+地址码x"
将数据(字符的标准ASCII码)写入液晶模块
y(为字符常量)
voidWriteData(unsignedchary)
RS=1;
//RS为高电平,RW为低电平时,可以写入数据
P0=y;
//将数据送入P0口,即将数据写入液晶模块
对LCD的显示模式进行初始化设置
voidLcdInitiate(void)
delay(15);
//延时15ms,首次写指令时应给LCD一段较长的反应时间
WriteInstruction(0x38);
//显示模式设置:
16×
2显示,5×
7点阵,8位数据接口
delay(5);
//延时5ms
WriteInstruction(0x0C);
显示开,有光标,光标闪烁
WriteInstruction(0x06);
光标右移,字符不移
WriteInstruction(0x01);
//清屏幕指令,将以前的显示内容清除
/************************************************************
对4个字节的用户码和键数据码进行解码
说明:
解码正确,返回1,否则返回0
出口参数:
dat
*************************************************************/