红外线吸取节制器的制作 在糊口中,我们常用到红外线节制种种电器,如彩电、空调、电电扇等。为我们带来较多的利便。但偶然我们仍感想不利便。如看完电视后,用遥控器只能关掉电视主电源,电视仍处于待机状态。行使者还得走到电视跟前.按下电小 视电源开关方能安心。若想看电视。还得启航开电视,显得很贫困。尤其是冬天躺在床上看电视,上上下下,深感未便。本文以操作红外遥控器来遥控电扇的制作要领为例(可任选一只红外线遥控器.能调速,软件稍作改变,可增进 按时成果等),来先容红外线吸取节制器的制作要领,假如制作电视交换电源的开、关节制器,可与电视共用一只遥控器,制作也较简朴些。 制作思绪 红外遥控发射器是操作红外线作载体传送信息的,发射周期不等的颠末调制后串行码.该串行码一样平常由引导码、用户辨认码、操纵码构成。经红外吸取头解码后获得一串周期不等的矩形波。如表示图1。 差异型号的遥控发射器的波形宽度差异。即周期T1、T2……差异.在不知手头遥控发射器的波形周期的环境下.起主要制作一个检测红外线周期的器材。按照测得的周期纪律来制作红外线吸取节制器。 制作要领 检测红外周期的器件制作.见图2。 当红外吸取头没有吸取到发射器发送来的红外线.其输出端输出高电平(约 5V)。当吸取到红外线,输出端电平变低.送到单片机AT89C2051的外部间断1口即INT1,使其产生间断而进入间断处事:启动按时器1并开M-I-数。相等于在图1的A点.1个周期后即C点。单片机第二次间断。关按时器1.记下周期T1(现实上只记下TH1的数值。 TL1的值可以扬弃)。然后清TH1、TL1,再启动按时器1从头计数,第二个周期完后,同样会引起单片机产生间断.再记 下周期T2'…一,云云记下40-50个周期(一样平常红外编码为4字节.即32BIT.之前尚有引导码。又因吸取到的红外数据不必然是从引导码开始,要说明一次完备的串行码,应尽也许多记下红外矩形波周期数)。吸取完后,通过按轻触开关将各记下的各周期的THl在数码管表现出来以作说明(每按一次轻触开关,表现下一个周期数)。 编程要领 在main()中开间断。启动按时器1.即EA=I;EX1=1:IT1=1;TRI=I: 在外部间断1的处事措施中编写如下语名:#defineCNT50//猜测50个红外线周期 DATA Byte value_h[CNT]://记录周期的变量(数组) DATA Byte count=0;//吸取到的周期数 void int1(void)interrupt 2{ if(TH1==TL1&&TL1==0)//判定是否是第一次吸取到红外数据 { TR1=1: }elseI TRl=0;value_h[count]:THl; THl=TLl=0;TRI=I:count ; if(count==CNT) { EXl=0:count=u; l} l 假设吸取到的TH的数值为:30,50.04,08,08,08,04,04,04,04,04,08,08,08,04,04,04,04。08,04,04,08,04,04,04,04,04,04,08,08,04.08,08,08,08,3f,50.... 稍作说明可知。暗示坎坷电平的有用数为:04,08。若将04定作低电平.08定作高电平.舍弃其他数据,获得4字节数据即:01110000。01110000,10010000。01101111。转为十六进制后得:70h,70h,90h,6fh,至此获得遥控发射器适才按下的键值码.用同样的要领可以测得其他键键值码。假设有:70h,70h,0x90,0x6f。//0键70h,70h.0x00,0xff。//1键70h,70h.0xd0,0x2f//power键 按照以上数据说明得.每键码为4字节.前2字节牢靠稳固,为用户辨认码。后2字节均差异,是操纵码。将遥控器上的各键键值码测出后,按照这些数据可以按照制作必要举办编程了。因键值码为4字节太长。倒霉于编程,必要将各键键值转为相对应的1字节的数据,如:70h,70h,0x90,0x6f,对应于O,70h,70h,0x00,0xff对应于1..…· 转换要领: 成立一个数组,将上述测得的各键码按次序放入数组中(去掉用户辨认码) code Byte arr[][2]= { 0x90,0x6f.//0,尽也许按键0、键1..·…的先后次序放,以切合风俗 0x00,0xff,//1 …… Oxl0,0xef.//9 0xd0, Ox2f //power 13 }; 在吸取红外线的外部间断1函数中编写如下的键码转换语句: DATA Byte arrtmp[4]; DATA Byte Keytmp;//转换后的键值寄存变量 DATA Byte Keyval=NOKEY; bit KeyOk;//键值转换完成与否的符号 bit d_Ok;//吸取到一个完备的键码符号 void Ex_int(void)interrupt 2 { Byte i; Byte(*p)[2]; …… if(d_Ok)//若吸取到完备的键码 { d_Ok=0://破除 if(arrtmp[0]==0x70&&arrtmp[1] ==0x70){//键码转换 for(p=arr,bO:i<14:i 。p ) {if(arrtmp[2]==*(*p 0)&&arrtmp[3] ==*(*p 1)) { Keytmp=i:KeyOk=1;//键值 转换乐成符号 break; }else{Keytmp=NOKEY;l//未 吸取到完备的键值 } }eIse{Keytmp=NOKEY;} } l 颠末转换后的Keytmp为0、1、2……的整数.然后再编写主函数、调速函数(参源措施)。来举办电电扇调速。 有关电路的一些表明:单片机U1(AT89C2051)P37脚输出坎坷电平通过R13节制光耦可控硅MOC3041(参数可在《电子制作》网站查找)通断.通过节制其通断时刻比来到达电电扇调速。 有关红外周期检测和电电扇调速实例的源措施可在本刊网站上下载。 (责任编辑:admin) |