课程设计论文-单片机的红外遥控系统内容摘要:

键盘扫描 从 AT24C04 中取出对应数据 发射 结束 14 图 19 此时说明该红外遥控分析器的接受功能已经正常实现。 发射时,通过键盘矩阵输入一个键值,则在另外的一块电路板的显示器上显示相应的键值。 例如,输入键值“ 4”,则有如下结果: 图 20 由此,说明该遥控器的学习功能已经正常实现。 、软件测试 接收程序测试 软件测试通过仿真软件 Proteus 进行仿真 .测试接收程序时,利用信号源产生类似红外线脉冲,由单片机接收口输入,通过液晶显示相应的波形数值。 仿真模型如图 21,波形设置如图 22 15 图 21 图 22 发射程序测试 用示波器接在发射电路的发射端,仿真时,通过程序发射红外波形, 在示波器上观察波形图。 如图 23 图 23 总结与展望 本次课程设计要求 基于 51 单片机 ,设计制作一个红外遥控器,可分析解读并显示红外信号 ,扩展电路要求制作具有学习功能的红外遥控器。 从接到任务要求开始,我们便开始进行相关资料的查阅,同时初步考虑制作方案。 随后,认真研究了红外一体接收头的内部原理,如何用单片机分析出接收到的信号,以及16 LCD 液晶屏的显示,从而最终拟定了接收方案的电路,并开始写作程序。 接收电路完成后,便开始对发射电路进行研究。 通过查阅资料,明白了发射原理,并且设计出了发射电路图,用程序实现。 当顺利分别实现发射和接收功能后,再将两个程序综合的过程中,遇到了难题:发射功能不能实现了。 经过请教同学,最终完成了整个要求的电路功能。 这次实验不仅让我们进一步了解了红外遥控技术,增强自己动手能力,最重要的是让我们学会了团队协作,为了共同的目标努力,大家一起查阅资料,探讨设计,遇到难题总是一起寻求解决的方法,当有想放弃的不良情绪产生时,相互鼓 励打气。 尤其是答辩前最后几天,为进行最后的攻坚,大家同吃同睡,一起熬夜,相互解惑,加深了彼此之间的感情。 随着科学技术的飞速发展,红外遥控技术必将有进一步的飞跃,其运用领域也将大大扩展。 无论是在军事还是民用,起作用都将日益增大。 其发展前景会相当美好。 参考文献 [1] 胡汉才 . 单片机原理及接口技术 [M] 北京 : 清华大学 大学出版社 ,2020 [2] 严后选 ,孙建国,张天宏,无线红外智能遥控器的设计 [J] 测控技术, 2020,22( 3) [3]裴彦纯,陈志超,基于单片机系统的红外遥控器应用 [J] 现代电子技术,2020,4 [4]冯成德,刘栋,基于 keil C51的红外遥控器解码设计 [J] 自动化与仪器仪表,2020,6 17 附 件 附件一: 仿真 电路图 18 附件二:实物图 19 附件 二 :程序 include include include define uint unsigned int define uchar unsigned char define yhm 0x40 //用户码 sbit irin=P3^3。 //红外接收口( int1) sbit irout=P1^4。 //红外发射口 sbit rs = P1^0。 //指令数据选择 sbit rw = P1^1。 //读写选择 sbit e = P1^2。 //lcd 使能 sbit led=P1^3。 //指示灯 sbit scl=P3^6。 //at24c02 时钟 sbit sda=P3^7。 //at24c02 数据 sbit learn=P1^5。 //学习键 sbit fashe=P1^6。 //发射键 char code Tab[16]=0123456789ABCDEF。 char data TimeNum[]=。 char data Test1[]=。 uchar irtime。 //红外用全局变量 bit irpro_ok,irok。 uchar IRcord[4]。 //处理后的红外码,分别是 客户码,客户码,数据码,数据码反码 uchar irdata[33]。 //33 个高低电平的时间数据 /************初值 *********************/ define m9 (655369000) define m4_5 (655364500) define m1_6 (655361630) define m_65 (65536580) define m_56 (65536560) define m40 (6553640000) define m56 (6553656000) define m2_25 (655362250) /******************************************************************/ /* 函数声明 */ /******************************************************************/ void Ir_work(void)。 void Ircordpro(void)。 20 void ShowString (uchar line,char *ptr)。 void irfa(uchar temp)。 void date(uchar temp)。 void maichong(bit op,uint temp)。 /******************************************************************/ /* 定时器 0 中断服务函数 */ /******************************************************************/ void tim0_isr() interrupt 1 //定时器 0 中断服务函数 { irtime++。 //用于计数 2 个下降沿之间的时间 } /******************************************************************/ /* 外部中断 0 函数 */ /******************************************************************/ void ex0_isr (void) interrupt 2 using 0//外部中断 0 服务函数 { uchar i。 //接收红外信号处理 static bit startflag。 //是否开始处理标志位 static if(startflag) { if(irtime63amp。 amp。 irtime=33)//引导码 9ms+ i=0。 irdata[i]=irtime。 //存储每个电平 的持续时间,用于以后判断是 0 还是 1 irtime=0。 i++。 if(i==33) { irok=1。 i=0。 } } else { irtime=0。 startflag=1。 } } /******************************************************************/ 21 /* 定时器 0 初始化 */ /******************************************************************/ void TIM0init(void)//定时器 0 初始化 { TMOD=0x02。 //定时器 0 工作方式 2, TH0 是重装值, TL0 是初值 TH0=0x00。 //重载值 TL0=0x00。 //初始化值 ET0=1。 //开中 断 TR0=1。 } void TIM1init(void) { TMOD=0x01。 } /******************************************************************/ /* 外部中断初始化 */ /******************************************************************/ void EX1init(void) { IT1 = 1。 //指定外部中断 1 下降沿触发, INT1 () EX1=1。 //使能外部中断 EA = 1。 //开总中断 } /******************************************************************/ /* 红外键值处理 */ /******************************************************************/ void Ir_work(void) //红外键值散转程序 { TimeNum[5] = Tab[IRcord[0]/16]。 //处理客户码并显示 TimeNum[6] = Tab[IRcord[0]%16]。 TimeNum[8] = Tab[IRcord[1]/16]。 //处理客户码并显示 TimeNum[9] = Tab[IRcord[1]%16]。 TimeNum[11] = Tab[IRcord[2]/16]。 //处理数据码并显示 TimeNum[12] = Tab[IRcord[2]%16]。 TimeNum[14] = Tab[IRcord[3]/16]。 //处理数据反码并显示 TimeNum[15] = Tab[IRcord[3]%16]。 ShowString(1,TimeNum)。 //显示处理过后的码值 irpro_ok=0。 //处理完成后复位标志位 } 22 /******************************************************************/ /* 红外解码函数处理 */ /******************************************************************/ void Ircordpro(void)//红外码值处理函数 { uchar i, j, k。 uchar cord,value。 k=1。 for(i=0。 i4。 i++) //处理 4 个字节 { for(j=1。 j=8。 j++) //处理 1 个字节 8 位 { cord=irdata[k]。 value=value1。 if(cord7)//跟晶振有关 { value=value|0x80。 } k++。 } IRcord[i]=value。 value=0。 } irpro_ok=1。 //处理完毕标志位置 1 } /******************************************************************/ /* 微秒延时函数 */ /******************************************************************/ void Delay。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。