红外线遥控数据的学习和转发_第1页
红外线遥控数据的学习和转发_第2页
红外线遥控数据的学习和转发_第3页
红外线遥控数据的学习和转发_第4页
红外线遥控数据的学习和转发_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、红外线遥控数据的学习和转发(基于新唐M0单片机实现)本文只是研发的一点心得,是产品化证明了非常实用的东西,文字组织相对不那么严谨,适合有一定经验的自动控制工程师借鉴。红外线遥控的基础知识有不太多的阐述,目前为止我所见到的红外线遥控器基本都是基于送脉冲+停止等待的循环,所以学习红外线遥控数据主要是要获取如下参数送出脉冲的脉冲频率(就是所谓载波)送出脉冲的宽度停止等待到下一个送出脉冲的宽度采样就会有误差,实际测试过程中发现实际红外解码设备其实比较粗糙,即使有点误差也能100%动作执行单元,毕竟我们学习的过程中没有累计误差。要采样到数据必须有合适的硬件电路,其实最简单的方法就是用一个家电用的接收管来

2、实现,里面有现成的带通滤波器出来就是方波不过载波就没法学习了,因为家电一般都是用一个频率所以也基本可以实现,因为我们设计产品时是定位于万能遥控器,要做好就必须要采集载波,为此采用的是不过硬件带通的办法实现采集的,算法麻烦一点,但是可以实现所有红外信号的复制。由于采样数据时数据序列是整块发下来的,有的遥控器发出来的数据比较长,所以在单片机选型时要选择内存相对大一点的,想一边接受数据一边往FLASH写是比较困难的,我觉得不太容易实现,现在单片机也不是很贵这个费用还是值得的,否则整个开发过程会很费劲。实战中我们采用如下的硬件电路:经过大量的验证,学习的方法可以适应所有红外遥控器,目前还没有发现学习后

3、转发出来会有问题的设备。下面一段代码是主程序中启动红外学习的过程,供参考U8learning(MENU_HEADm_head,CONTROL_HEAD*ctr_head,U8Continue)U16x,y,count;U8flag;CONTROL_HEADctr_head_copy;IFR_IN_POWER=0;OpenInt1();flag=TRUE;touch_flag=TOUCH_RELEASE;count=0;if(Continue=TRUE)MY_PICTUREpic;ReadGD25Q16B(ctr_head-address,(U8*)&pic,sizeof(MY_PICTURE)

4、;/ShowLearning(ctr_head-x,ctr_head-y+pic.y_size+20,0,0 xffff);#ifdefCHINESEShowString(ctr_head-x,ctr_head-y-24,学习中,0,0 xffff);#elseShowString(ctr_head-x,ctr_head-y-24,leaning,0,0 xffff);#endif/while(touch_flag=TOUCH_PRESS);while(flag)/flag为按键退出的标志/IFR_LEARN_TOO_LONG:TIMER_Reset(TIMER2);learn_step=0;

5、learn_count=0;memset(U8*)&learn.InfraredBuf,0,MAX_BUF*2);while(1)/等待中断中获取脉冲数据(等待MAX_LEARN_IDLE)if(learn_step1)/*if(InfraredBuf0MAX_LEARN_IDLE)空闲大于100ms退出等待break;/if(learn_step(MAX_BUF-1)if(learn_stepget_learn_step_length(m_head.attribute)#ifdefCHINESEMessageBox(学习数据太长,2);#elseMessageBox(learntoolong

6、,2);#endifbreak;if(learn_step=0)if(GetTouchxy(&x,&y,TRUE)U16x1,y1;while(GetTouchxy(&x1,&y1,TRUE);/确实释放触摸了才能往下执行flag=FALSE;/学习时收到按键信号if(Continue=TRUE)break;/连续学习状态遇到键盘就退出学习状态if(juge_press(m_head,x,y,&ctr_head_copy)/if(!IsFunctionKey(ctr_head_copy.attribute)|(ctr_head_copy.attribute=ESC_CTRL)memcpy(ct

7、r_head,&ctr_head_copy,sizeof(CONTROL_HEAD);/有效按键则返回被点击的控件头部break;if(flag)/是否按键退出if(learn_step20)&(learn.InfraredBuf05)/获得最少脉冲才有用,第一个脉冲没有小于这个的Timer1Count=0;CloseInt1();/保证数据处理完成前不会改变学习到的红外数据TIMER_Reset(TIMER2);if(Continue=TRUE)chartempbuf16;if(gCmd.cmd=HID_CMD_READ)&(gCmd.chip_name=LEARN_INFRARED)lea

8、rn.InfraredBufMAX_BUF-1=pulse_head_number;CmdReadFirst(&gCmd);while(gCmd.cmd=HID_CMD_READ);/等待中断传输完毕数据#ifdefCHINESEsprintf(tempbuf,学至U%03d个数据,+count);#elsesprintf(tempbuf,learn%03ddata,+count);#endifShowString(ctr_head-x-XUEHUI_BACK,ctr_head-y-48,(U8*)tempbuf,0,0 xffff);elseFillLearnData(m_head,ctr_

9、head-attribute);/实现学习至数据的存储OpenInt1();if(!Continue)break;/while(flag)if(Continue)MY_PICTUREpic;ReadGD25Q16B(ctr_head-address,(U8*)&pic,sizeof(MY_PICTURE);ClrString(ctr_head-x,ctr_head-y-24,6,BACK_COLOR);ClrString(ctr_head-x-XUEHUI_BACK,ctr_head-y-48,13,BACK_COLOR);touch_flag=TOUCH_RELEASE;TIMER_Rese

10、t(TIMER2);returnflag;下面代码是硬件中断程序,是采样红外数据的关键,该程序虽然比较短看起来也简单,但是属于时序程序一点不能错。uint32_tTimer2Count;externU16learn_step,learn_count;externLEARN_STRUCTlearn;uint32_tTimer3Count;U16pulse_head_number;voidTMR2_IRQHandler(void)Timer2Count+;Timer3Count+;if(learn_step0)if(learn_step%2)/奇数次时间if(learn_step10)if(Tim

11、er3CountMAX_LEARN_IDLE)TIMER_Reset(TIMER2);/TIMER_Reset(TIMER3);TIMER2-ISR=3;/清除中断标志voidTMR3_IRQHandler(void)Timer3Count+;TIMER3-ISR=3;/清除中断标志U8tel_flag=0;/数据传输标志voidEINT1_IRQHandler(void)/红外学习中断if(tel_flag)elselearn_count+;if(learn_step=0)learn_step+;Timer2Count=0;Timer3Count=0;TIMER_Start(TIMER2);if(learn_step0)if(learn_step10)learn.InfraredBuflearn_step-1=Timer2Count;/偶数位脉冲宽度Timer2Count=0;learn_step+;Timer3Count=0;Timer2Count=0;GPIOB-ISR=115;/EINT1(GPB15)Cleartheinterrupt上面从软件和硬件角度阐释了红外遥控学习的

温馨提示

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

最新文档

评论

0/150

提交评论