学习型红外遥控器实验报告_第1页
学习型红外遥控器实验报告_第2页
学习型红外遥控器实验报告_第3页
学习型红外遥控器实验报告_第4页
学习型红外遥控器实验报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

wordword文档可自由复制编辑名目第1章背景介绍 1第2章设计任务要求 2根本要求 2提高要求 2设计指标 2第3章红外遥控设计方案 3遥控编码表制作 3遥控编码表实现 3遥控编码表检测 3主要器材选择 5第4章红外接收解码装置设计方案 6硬件局部 6软件局部 7遇到的困难 8第5章红外编码放射装置设计方案 9硬件局部 9软件局部 10遇到的困难 11第6章学习型遥控器设计方案 11硬件局部 11软件局部 11遇到的困难 11第7章仿真波形图 12第8章总结与心得体会 13第8章附页—程序 14一、背景介绍本次小学期创试验是以我们小组申请的创工程——“基于NFC技术的智能空间节能系统设计”为依托实现的。工程期望借助兴的NFC技术,在人流量变化符合统计规律的公共空间〔如博物馆、商城、写字楼〕入口处设置NFC读卡器,读取进场人员信息;基于统计得出的人流量数据,对公共空间的环境变量进展智能调控,到达控温、控电、控能量,在节能减排的同时提高用户舒适度。系统模块图:智能空间节能系统NFC温度办公NFC双向通信软件开发的温度作为争论对象14:00-15:00到达顶峰,此时应增大空调功率抵消人体散发的热量,使参观者感觉更舒适;在8:00-10:00参观人数较少,可减小功率,降低能耗。我们依据系统模块图:智能空间节能系统NFC温度办公NFC双向通信软件开发人闭提流环醒量调体统节验计系优统化NFC软件数学空调程序信开模红开息发型外发读建控取立制1本次小学期所做的是温度闭环调整系统中的空调红外掌握局部PC通信、对空调温度进展掌握的工具。经过调研,我们最终选择用单片机来实现这一功能。二、设计任务要求根本要求:设计一个红外遥控器,能够放射NEC协议的红外编码。设计一个红外接收显示装置,能够接收NEC协议的红外编码,并将编码显示在LCD屏上。提高要求:综合以上两个功能,设计一个学习型遥控器,要求能实现红外编码学习和复原。设计指标在系统功能实现的根底上,系统性能的优异需要通过设计指标来衡量,具体如表2.1所示。2.1设计指标表设计指标预期1解码类型NEC2解码准确率>95%3红外放射距离>54载波放射频率38KHz±1KHz5编码复原误差1ms/T三、红外遥控设计方案基于功能,系统设计为三个单元:1、遥控编码表制作单元;2、遥控编码表实现单元;3、遥控编码表检测单元。三个单元属于递进关系,如图3.1所示:遥控编码表制作单元遥控编码表实现单元遥控编码表制作单元遥控编码表实现单元遥控编码表检测单元遥控编码表检测单元

图3.1三大功能单元关系示意图遥控编码表制作主要包含编码提取局部,该单元设计如图3.2所示:红外接收红外接收编码分析3.2编码提取模块比照图2.2,编码提取通过红外接收头接收,送至单片机解码,对于较为简单的编码,也可以通过PC关心分析波形,进展解码。最终制作的遥控编码表包括:1、遥控编码格式;2、按键遥控代码表。2、遥控编码表实现遥控编码表实现分为外观和功能两个局部该单元设计如图3.3所示:控编码表实现单元控编码表实现单元按键操作液晶显示系统状态外观显示模块按键操作红外编码红外放射红外放射模块图3.3遥控编码表实现单元构造图2.3,LCD液晶,显示放射的红外信号编码;功能模拟承受微处理器,通过程序掌握放射红外信号。3、遥控编码表检测遥控编码表检测分为基于内容和基于功能的两种方法,该单元的设计如图2.4所示:控编码表检测单元控编码表检测单元红外接收红外解码编码显示基于内容检测一般遥控板空调操作比照万能遥控板基于功能检测图3.4遥控器编码表检测单元构造图比照图3.4,从设计角度考虑,可承受基于内容的检测方法,解析红外编码,检测结果以字符,可承受基于功能的检测方法,承受现有设备(如电视、空调)直接接收红外信号,检测设备是否正常工作,具有肯定的容错量。为协作硬件实现功能设计,系统实现和调试分三个制作的进展,即:1、根底制作:红外接收解码装置,2、中级制作:红外编码放射装置,3、高级制作:万能学习型遥控器,3.5所示:3.5系统功能硬件实现将以上设计集中到一起,模块化处理,如表3.1所示:3.1模块模块功能说明1IR_SEND红外放射模块2IR_RECEIVE红外接收模块3KEY功能键盘〔掌握放射、输出功能的切换〕4LCD_1602液晶显示模块5BEEP蜂鸣器模块〔指示成功接收红外信号〕6MCU0_IR单片机1,集成放射接收模块7MCU1_LCD单片机2,检测并显示放射的红外信号器材实物图单片机:STC89C52RC仿真器:hc6800开发板仿真芯片:STC89C52RC红外接收头:SM0038器材实物图单片机:STC89C52RC仿真器:hc6800开发板仿真芯片:STC89C52RC红外接收头:SM0038红外遥控器〔测试用〕四、红外接收解码装置设计方案硬件局部:如方案设计所述,制作红外接收解码装置,该装置主体为hc6800开发板,使用的芯片为常见的stc89c51〔晶振为12MHz〕,其中开发板还自带1602-lcd〔放射端使用开发板自带的遥控器4.1,4.27.3接收板实物图4.2常用一体化红外接收头VDD(5V)、GND和OUT38KHZ红外载波引脚OUT为低电平,否则为高电平(5V)4.34.3红外接收电路图软件局部:主程序系统初始化:1TO设置21602液晶初始化3INT0主程序系统初始化:1TO设置21602液晶初始化3INT0下降沿有效中断检测:等待红外触发中断效劳程序读取遥控接收头状态接收完毕红外解码LCD显示编码INT0中断退出中断图4.4液晶显示红外接收板软件流程图NEC编码协议。NEC38KHz4.5560us1传输需要2.25s560us+1680us低电平0传输需要1.125ms560us+560us低电平,占空比约为1/3或1/〔该占空比下的放射距离比较远。4.5NEC一个典型的NEC遥控指令是由同步码头、用户码、用户反码、操作码、操作反码构成。其中9ms4.5ms8〔其中承受反码是为了保证传输的牢靠性4.6NEC4.6典型NEC遇到的困难:①在编写解码程序时有一个格外需要留意的问题是一体化红外接收头接收到的信号与放射信号的电平刚好相反,这就导致接收到的用户码、操作码刚好是放射的用户码、操作码的反码,会引起一大串的连锁反响,使最终学习型遥控器学习到的是错误的编码。②如何推断规律1010〔高电平〕和一段低电平组成,所以只能依据低电平持续时间来计算规律1或规律0〔在解码局部中其为计算高电平持续时间N与延时函数dela〔delay〔1〕0.14ms。当N40N121,所以取N=8N<80,假设N>81。③在整机调试时,为了测试中断程序是否正确运行,以及远距离接收的性能,又在中断函数中加了蜂鸣器,假设其有声音,则表示中断正确运行。这样使整个程序更为直观的表现出来。五、红外编码放射装置设计方案硬件局部:制作红外放射装置,该装置主体与红外接收装置一样,同为hc6800开发板,使用的芯片也stc89c518550PNP一个51Ω,一个1000Ωstc89c51单片机的VccGnd5.15.2图7.2放射板实物图图5.2红外放射电路当stc89c51单片机检测到按键状态时,当按键被按下以后,单片机依据其键位来查询对应编码〔此阶段使用的编码为事先存在数组中的编码,并不是学习后的编码,然后由软件产38KHz3.6软件局部:8位数据发送函数V=00.56ms1.6ms0.56msV=V+1NV<8Y完毕8位数据发送函数V=00.56ms1.6ms0.56msV=V+1NV<8Y完毕主函数

sanzhuan函数系统初始化是否有键按下Y系统初始化是否有键按下YN去抖动检测Ysanzhuan读按键状态由按键查找对应编码发送头码48位数据发送完毕码完毕遇到的困难:38KHzc言才能得到运行一段程序所需要的准确时间。stc89c511212M,所以其一个机器周期所需要的时间为1us38KHz26.3us即26us,所以产生脉冲〔高电平〕的局部转化为汇编语言之后运2638KHz②硬件电路的放射问题。由红外放射电路图可得:当引脚3.6〔IR_out〕为高电寻常,PNP85503.6〔IR_out〕为低电寻常PNP8550导通,红外二极管正向导通放射红外信号。但是由于失误,原来应当用PNP的三极管却用了NPN的三极管,导致红外二极管始终处于放射状态〔人眼看不到,但是可以用手机摄像机看到红外光。后依据模电学问得出了三极管出错导致不能放射的问题,改进后即可以正常放射编码了。六、学习型遥控器设计方案学习型红外遥控器马上前两个红外解码装置与红外编码放射装置的整合而得到。硬件局部:硬件局部与红外编码装置一样。软件局部:另外设置了一个按键来掌握中断的开关。假设中断开启,则该学习遥控器则进入了学习模式,了放射模式,遇到红外信号不会进展学习。软件流程图如图6.1遇到的困难:LEDLED来分别掌握放射与接收。当键按下时,某个LED灯亮起,中断开启,于是就进入接收状态,再按下该键,则LED遥控指令。七、仿真波形图放射板仿真图放射波形仿真图观看图可知,头码高电平9ms,低电平4.5ms;规律“1”总时长2.20ms,规律“0”1.20msNEC八、总结与心得体会本设计完成的万能学习型红外遥控器遵循NEC协议,能够替代承受NEC编码的各类红外遥控7.17.1设计指标实现状况1解码类型NEC2解码准确率100%3红外放射距离104载波放射频率37-39KHZ5功能按键5很长花了很长一段时间,最终把学习型遥控器完整的制作了出来全部预期的功能全部实现,在制作的过程中,我们走了不少的冤枉路,但同时也学到了不少的学问。制作红外接收板并没有什么太大的难度,由于开发板中自带的资料中给了很多例程,只LCD屏幕上显示即可,并没有遇到什么障碍。接下来红外放射的电路才是最难的难点NECPNPNPN处于放射状态。由于这个是硬件问题,不知如何调试。幸亏后来觉察了一款叫PROTEUS的38KHz了不少的资料,有的说用振荡电路,有的用软件调制。由于38KHz=26.3us,用c语言很难的到这么准确的延时,只有使用汇编语言来得到。后来我们觉察keil4软件可以把c换为汇编语言,于是我们依据转换后的汇编语言来进展调试,最终得到38Khz的载波。接下完成,小学期也就到此完成。虽然说小学期做出来的仅仅是这么一个不是很起眼的学习型遥控器,但是我们在这上面花了不少的经受,也学到了不少的学问,信任能在以后的学习工作中能够用到。附页源程序:主程序`/***************************************************************名称:红外线遥控放射〔NEC编码〕单片机:STC89C52RC晶振:12M编译环境:KeiluVision4V9.00***************************************************************/// 放射引脚〔PNP三极管b1K欧电阻〕// PNP三极管e极接电源,c51欧电阻#include<REG51.h>#include“INC\MY_SET.h“#include“INC\LCD1602_6IO.h“sbitIR=P3^6; //放射引脚〔PNP三极管基极〕sbitLED1=P2^0;sbitLED2=P2^1;sbitLED3=P2^2;sbitLED4=P2^3;sbitKEY1=P1^0;sbitKEY2=P1^1;sbitKEY3=P1^2;sbitKEY4=P1^3;sbitKEY5=P1^4;#defineUSER_HP2//8位#defineUSER_LP0//8位uint8tab[16]={ //操作码0x12,0x05,0x1e,0x55,0x01,0x1b,0x03,0x6b,0x07,0x08,0x09,0x68,0x22,0xE6,0x33,0xe2};uint16M=0;#definem9(65536-9000)//9mS#definem4_5(65536-4500)//4.5mS#definem1_6(65536-1650)//1.65mS#definem_56(65536-560)//0.56mS#definem40(65536-40000)//40mS#definem56(65536-56000)//56mS#definem2_25(65536-2250) //2.25mSvoid SanZhuan;uint8KEY(void);void ZZ(uint8x);void Z0(uint8temp);void TT0(bitBT,uint16x);

//NEC编码发送程序//单帧〔8位数据〕发送程序//38KHz载波放射+延时程序/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidmain(void){ucharm;TMOD=0x01;IE=0x81; //允许总中断中断,使能INT0外部中断TCON=0x01; //触发方式为脉冲负边沿触发IRIN=1; //I/O口初始化BEEP=1;IR=1;delay1(10); //延时lcd_init; //LCDlcd_pos(0); //1个字符m=0;while(cdis1[m]!=”\0”){ //显示字符lcd_wdat(cdis1[m]);m++;}lcd_pos(0x40); //1个字符m=0;while(cdis2[m]!=”\0”){lcd_wdat(cdis2[m]); //显示字符m++;}while(1) {if(LED4==0){IE=0x00;}else{IE=0x81;}SanZhuan;}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:4*2独立键盘入口:void┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/uint8KEY(void){uint8Key=0xff;if(KEY1==0){Key=0; LED1=~LED1;}if(KEY2==0){Key=1; LED2=~LED2;}if(KEY3==0){Key=2; LED3=~LED3;}if(KEY4==0){Key=3; LED3=~LED3;}if(KEY5==0){ LED4=~LED4;}returnKey; //返回键值}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:散转程序入口:void┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidSanZhuan{uint8v;//TMOD=0x01;v=KEY; //键盘检测switch(v){case0:ZZ(tab[0]);break;case1:ZZ(tab[1]);break;case2:ZZ(tab[2]);break;case3:ZZ(tab[3]);break;/*case0x7d:ZZ(tab[4]);break;case0xbd:ZZ(tab[5]);break;case0xdd:ZZ(tab[6]);break;case0xed:ZZ(tab[7]);break;case0x7b:ZZ(tab[8]);break;case0xbb:ZZ(tab[9]);break;case0xdb:ZZ(tab[10]);break;case0xeb:ZZ(tab[11]);break;case0x77:ZZ(tab[12]);break;case0xb7:ZZ(tab[13]);break;case0xd7:ZZ(tab[14]);break;case0xe7:ZZ(tab[15]);break; */default:break;}v=0;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:NEC编码发送程序入口:八位操作码┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidZZ(uint8Value){TT0(1,m9); //高电平9mSTT0(0,m4_5); //低电平4.5mS/*4帧数据┈*/Z0(USER_H); //8位Z0(USER_L); //8位Z0(Value); //操作码Z0(~Value); //操作码反码/*┈┈完毕码┈┈*/TT0(1,m_56);TT0(0,m40);/*┈┈重复码┈┈*/while(KEY!=0xFF){TT0(1,m9);TT0(0,m2_25);TT0(1,m_56);TT0(0,m40);TT0(0,m56);}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:单帧〔8位数据〕发送程序入口:temp┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidZ0(uint8temp){uint8v;for(v=0;v<8;v++) //8次移位{TT0(1,m_56); //高电平0.65mSif(temp&0x01)TT0(0,m1_6);//发送最低位else TT0(0,m_56);temp>>=1; //右移一位}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:38KHz+延时程序〔,延时约x〕┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidTT0(bitBT,uint16x){TH0=x>>8; //T0初始值TL0=x;TF0=0; //0TR0=1; //0if(BT==0)while(!TF0); //BT=038KHz载波只延时;BT=138KHz脉冲且延时;e) z〔低电平〕占空比{IR=0;if(TF0)break;if(TF0)break;IR=1;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;}TR0=0; //0TF0=0; //0IR=1;}

//载波停顿后,放射端口常态为高/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:外部中断函数入口:void┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidIR_IN(void)interrupt0 //外部中断效劳程序{unsignedcharj,k,N=0;EX0=0;delay(15);if(IRIN==1){EX0=1;return;}//IR信号消灭while(!IRIN) //IR9ms的前导低电平信号。{delay(1);}for(j=0;j<4;j++) //收集四组数据{for(k=0;k<8;k++) //8位{while(IRIN) //等IR4.5ms的前导高电平信号。{delay(1);}while(!IRIN) //等IR变为高电平{delay(1);}while(IRIN) //IR高电寻常长{delay(1);N++;if(N>=30){EX0=1;return;} //0.14ms计数过长自动离开。} //高电平计数完毕IRCOM[j]=IRCOM[j]>>1; //数据最高位补“0”if(N>=8){IRCOM[j]=IRCOM[j]|0x80;} //数据最高位补“1”N=0;}//endfork}//endforjif(IRCOM[2]!=~IRCOM[3]) //按位取反{EX0=1;return;}IRCOM[5]=IRCOM[2]&0x0F; //取键码的低四位IRCOM[6]=IRCOM[2]>>4; //右移4次,高四位变为低四位if(IRCOM[5]>9){IRCOM[5]=IRCOM[5]+0x37;}elseIRCOM[5]=IRCOM[5]+0x30;if(IRCOM[6]>9){IRCOM[6]=IRCOM[6]+0x37;}elseIRCOM[6]=IRCOM[6]+0x30;lcd_pos(0x4b);lcd_wdat(IRCOM[6]); //第一位数显示lcd_pos(0x4c);lcd_wdat(IRCOM[5]); //其次位数显示Y0=0;switch(IRCOM[2]){case0x09:Y0=0x01;break;case0x1D:Y0=0x02;break;case0x1F:Y0=0x03;break;case0x0D:Y0=0x04;break;case0x19:Y0=0x05;break;case0x1B:Y0=0x06;break;case0x11:Y0=0x07;break;case0x15:Y0=0x08;break;case0x17:Y0=0x09;break;default:break;//case0x13:RELAY=1;break;//case0x14:RELAY=1;break;//case0x51:RELAY=0;break;}tab[M]=IRCOM[2];M=(M+1)%4;beep;EX0=1;}头文件设定:头文件1——MY_SET.h#ifndefMY_SET_H#defineMY_SET_H//data RAM:0x00~0x7F//bdata RAM:0x20~0x2F//idata RAM:0x00~0xFF//xdata RAM:0x0000~0xFFFFRAM:0x0000~0xFFFF//code ROM:0x0000~0xFFFF//无符号类型#defineuint8unsignedchar#defineuint8bunsignedcharbdata#defineuint8iunsignedcharidata#defineuint8xunsignedcharxdata#defineuint8cunsignedcharcode#defineuint16unsignedint#defineuint16iunsignedintidata#defineuint16xunsignedintxdata#defineuint16cunsignedintcode#defineuint32unsignedlong#defineuint32iunsignedlongidata#defineuint32xunsginedlongxdata#defineuint32cunsginedlongcode//有符号类型#defineint8char#defineint8xcharxdata#defineint8ccharcode#defineint16int#defineint16xintxdata#defineint16cintcode#defineint32long#defineint32xlongxdata#defineint32clongcode/////////////#include<intrins.h>#defineNOP_nop_#defineNOP_12_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_;_nop_#define NOP _nop_ /*定义空指令*/#defineucharunsignedchar#defineuint unsignedint#definedelayNOP;{_nop_;_nop_;_nop_;_nop_;};#endif2——LCD1602.h#ifndef LCD1602_6IO_H #define LCD1602_6IO_H sbitIRIN=P3^2; //红外接收器数据线ucharIRCOM[7];ucharcdis1[]={“REMOTECONTROL“};ucharcdis2[]={“ IR-CODE H“};//LCDIOsbitLCD_RW=P2^5;sbitLCD_RS=P2^6;sbitLCD_EN=P2^7;sbitBEEP=P1^5;voiddelay(ucharx); //x*0.14MSvoiddelay1(intms);voidbeep(void);unsignedcharY0;/*******************************************************************//* *//*检查LCD忙状态 *//*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 *//* *//*******************************************************************/bitlcd_busy{bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP;result=(bit)(P0&0x80);LCD_EN=0;return(result);}/*******************************************************************//* *//*写指令数据到LCD *//*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *//* *//*******************************************************************/voidlcd_wcmd(ucharcmd){while(lcd_busy);LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_;_nop_;P0=cmd;dela

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论