红外线接收控制器的制作

2011-08-21 22:48:13来源: EEWORLD

    在生活中,我们常用到红外线控制各类电器,如彩电、空调、电风扇等,为我们带来较多的方便,但有时我们仍感到不方便。如看完电视后,用遥控器只能关掉电视主电源,电视仍处于待机状态,使用者还得走到电视跟前,按下电视电源开关方能放心。若想看电视,还得动身开电视,显得很麻烦,尤其是冬天躺在床上看电视,上上下下,深感不便。本文以利用红外遥控器来遥控风扇的制作方法为例(可任选一只红外线遥控器,能调速,软件稍作改变,可增加定时功能等),来介绍红外线接收控制器的制作方法,如果制作电视交流电源的开、关控制器,可与电视共用一只遥控器,制作也较简单些。

制作思路

     红外遥控发射器是利用红外线作载体传送信息的,发射周期不等的经过调制后串行码,该串行码一般由引导码、用户识别码、操作码组成。经红外接收头解码后得到一串周期不等的矩形波,如示意图1。

     不同型号的遥控发射器的波形宽度不同,即周期T1、T2……不同,在不知手头遥控发射器的波形周期的情况下,首先要制作一个检测红外线周期的工具。根据测得的周期规律来制作红外线接收控制器。

制作方法

     检测红外周期的器件制作,见图2。

    当红外接收头没有接收到发射器发送来的红外线,其输出端输出高电平(约+5V)。当接收到红外线,输出端电平变低,送到单片机AT89C2051的外部中断1口即INT1,使其发生中断而进入中断服务:启动定时器1并开始计数,相当于在图1的A点,1个周期后即C点,单片机第二次中断,关定时器1,记下周期T1(实际上只记下TH1的数值,TL1的值可以丢弃),然后清TH1、TL1,再启动定时器1重新计数,第二个周期完后,同样会引起单片机发生中断,再记下周期T2……,如此记下40-50个周期(一般红外编码为4字节,即32BIT,之前还有引导码,又因接收到的红外数据不一定是从引导码开始,要分析一次完整的串行码,应尽可能多记下红外矩形波周期数),接收完后,通过按轻触开关将各记下的各周期的TH1在数码管显示出来以作分析(每按一次轻触开关,显示下一个周期数)。

编程方法

在main()中开中断,启动定时器1,即EA=1; EX1=1; IT1=1; TR1=1;
 在外部中断1的服务程序中编写如下语名:
#define CNT 50//预测50个红外线周期
DATA Byte value_h[CNT];//记录周期的变量(数组)
DATA Byte count=0;//接收到的周期数
void int1(void) interrupt 2
{
 if(TH1==TL1&&TL1==0)  //判断是否是第一次接收到红外数据
   { 
 TR1=1;
 } else{
 TR1=0;  value_h[count]=TH1;     TH1=TL1=0; TR1=1;  count++;
      if(count==CNT)
      {
         EX1=0;  count=0;      
      } 
  }
}
 假设接收到的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,对应于0 ,70h,70h,  0x00,0xff对应于1……
 转换方法:
 建立一个数组,将上述测得的各键码按顺序放入数组中(去掉用户识别码)
code Byte arr[][2]=
{
  0x90,0x6f,  //0,尽可能按键0、键1……的先后顺序放,以符合习惯
  0x00,0xff,  //1
 ……
  0x10,0xef,  //9
  0xd0,0x2f   //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,i=0;i<14;i++,p++)
 { if(arrtmp[2]==*(*p+0)&&arrtmp[3]
        ==*(*p+1))
 {   Keytmp=i;  KeyOk=1;   //键值
 转换成功标志
            break;
           } else {Keytmp=NOKEY; }  //未
       接收到完整的键值
        }
     }else {  Keytmp=NOKEY; }   
  }       
}
 经过转换后的Keytmp为0、1、2……的整数,然后再编写主函数、调速函数(参源程序),来进行电风扇调速。
 有关电路的一些解释:单片机U1(AT89C2051)P37脚输出高低电平通过R13控制光耦可控硅MOC3041(参数可在《电子制作》网站查找)通断,通过控制其通断时间比来达到电风扇调速。
 

关键字:接收  控制器  制作

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2011/0821/article_8132.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
接收
控制器
制作

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved