基于单片机的智能遥控器设计毕业论文.docx_第1页
基于单片机的智能遥控器设计毕业论文.docx_第2页
基于单片机的智能遥控器设计毕业论文.docx_第3页
基于单片机的智能遥控器设计毕业论文.docx_第4页
基于单片机的智能遥控器设计毕业论文.docx_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及系统课程设计报告基于单片机的智能遥控器设计1引言通过一个学期的学习,我意识到课本与实践相结合是学好单片机的唯一途径。本次课设我选择的题目是基于单片机的智能遥控器设计设计。1.1设计背景现代遥控技术也是十分普遍地应用于各类家用电器中,如电视遥控、电灯遥控、电风扇遥控、空调器遥控等,这类应用提高了家用电器的功能和档次,更重要的是给使用者带来极大的方便。单片机红外线遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。同时,由于采用红外线遥控器件时,工作电压低,功耗小,外围电路简单,因此它在日常工作生活中的应用越来越广泛。2设计方案及原理2.1 系统设计方案该红外遥控器包含两个部分,发射装置和接收装置,发射部分由键盘进行控制。键盘为44键盘,当按下其中键,接收部分会进行相应的显示,并实现某种功能。此设计仅完成在按下键1至4时实现对4个led灯亮灭的功能。此外还可以拓展12种功能。2.2遥控器原理单片机遥控系统应用要求用单片机作为控制芯片制作一个遥控器,另一个单片机控制系统能被遥控操作。本设计课程用单片机制作一路电器遥控器,通过键盘输出特定信号给单片机,单片机对信号进行编码并通过某i/o口进行脉冲输出,再通过红外发射装置发射,红外接收装置接受及解调将信号送入另一片单片机,此单片机通过外部中断进行解码,实现相应的显示以及对四个led灯的亮灭进行控制的功能。该遥控器采用软件编码,44键盘开关,可扩充到对16个电器的控制。系统组成框图见图1。图1 系统组成框图3硬件设计3.1电路原理图右为发射部分的单片机,其p3.0口为脉冲信号输出口,p3.7口为指示灯电平输出口。左为接收部分的单片机,其p3.2口为经解调后编码信号的输入口,p3.4至p3.7口为扩展的功能的输出口。系统原理总框图如图2.图2 系统原理总框图3.2系统原理说明如图2,按下按键后,右边单片机发送与之对应的编码,通过p3.0口发送,经三极管将脉冲信号放大,通过红外发射及红外接收装置,将编码信号通过p3.2口送至左边单片机进行解码,做出相应显示,并实现相应功能。4软件设计4.1 proteus软件仿真对此设计的检验,我选择了常用的单片机仿真软件proteus以及keiluvision4进行仿。4.1.1发射部分发射部分的核心为编码过程。此设计编码采用nec协议,发送数据为9ms高电平,4.5ms低电平以及用户码、用户反码、数据码和数据码反码。若按下键1,编码后经三极管放大的波形如图3。图3 键1编码所对应的波形4.1.2接收部分接收部分主要为解码过程,接收头将解调后的码送至单片机中,利用外部中断int0解码,根据解得的数据,进行相应的显示,并完成相应的拓展功能。若按下键1,则lcd显示情况如图4,完成的功能如图5。图4 键1所对的显示 图5 键1所对应的简单的显示功能4.2软件设计流程图4.2.1发射部分流程图14图6发射部分主流程图4.2.2接收部分流程图接收部分是通过跳转至外部中断程序中实现的,进入中断程序后,即刻关掉外部中断,利用定时器t0对输入信号进行计时,通过对各段信号高低电平维持时长不同区别是否为按键所对应的编码,是0还是1,随后将相应的数位存储与设定的变量中加以显示,或者根据解得的数码跳至相应的拓展程序中。如图7,为对一帧数据解码的流程图。图7对一帧数据的解码4.3源程序见附录b。5系统仿真见附录a。总结红外线遥控已经广泛应用于当今社会,以其无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中,本设计仅是红外线遥控的极小部分展示,利用红外线对灯泡的亮灭进行控制。本次课设,让我有机会较为深入的了解单片机课程中所学的相关知识,也因此知道要将单片机真正应用至实际生活中,仅仅是课本上的知识是远远不够的。我们在掌握单片机基础知识的前提上,还应广泛地阅读相关书籍,掌握一定的物理及电子科学知识,由此才能较为容易的驾驭各种设计,真正将单片机变为一门实用性学科。参考文献1 王思明,张金敏,苟军年.单片机原理及应用系统设计m.北京:人民邮电出版社,2008.2 彭为,黄科,雷道仲.单片机典型系统设计实例精讲m.北京:电子工业出版社,2006.3 朱纯益,路建华. 单片机用作通用红外遥控接收器的设计j.2009附录a 系统仿真附录b源程序发射部分发射引脚(接pnp三极管b极)pnp三极管e极接2电阻,c极接红外发射管#include #include #define uchar unsigned char #define uint unsigned int#define sbm 0xf0 /用户码#define m9 (65536-9000) /约9ms#define m4_5 (65536-4500) /约4.5ms#define m1_6 (65536-1630) /约1.65ms#define m_65 (65536-650) /约0.65ms#define m_56 (65536-560) /约0.56ms#define m40 (65536-40000) /约40ms#define m56 (65536-56000) /56ms#define m2_25 (65536-2250) /约2.25mssbit ir = p30; /定义发射引脚(接pnp三极管基极)sbit led = p37; /发射指示灯uchar key(void);void sanzhuan(void);void zz(uchar x);void z0(uchar temp);void tt0(bit bt,uint x);void ys(uchar time);/*函数功能:主函数*/void main(void) tmod = 0x01; /t0 16位工作方式 ir=1; /发射端口常态为高电平 while(1) sanzhuan(); uchar key(void)uchar h,l; /行值,列值 h=0; l=0; p1 = 0xf0; /将键盘端口行值设为1,列值设为0 if(p1!= 0xf0) /检测是否有按键按下,如果有则p1必不为0x0f ys(10); /按键去抖动,延时10毫秒 if(p1!=0xf0) /确实有按键按下 h = p1&0xf0; /按键后得到按键的行标志位 p1 = 0x0f; /翻转键盘接口输出 l = p1&0x0f; /得到列标志位 return (h+l); return 0;/*函数功能:散转程序入口参数:v*/void sanzhuan(void)uchar v; v = key();switch(v) case 0x77:zz(0x01);v=0;break; case 0xb7:zz(0x02);v=0;break; case 0xd7:zz(0x03);v=0;break; case 0xe7:zz(0x04);v=0;break; case 0x7b:zz(0x05);v=0;break; case 0xbb:zz(0x06);v=0;break; case 0xdb:zz(0x07);v=0;break; case 0xeb:zz(0x08);v=0;break; case 0x7d:zz(0x09);v=0;break; case 0xbd:zz(0x10);v=0;break; case 0xdd:zz(0x11);v=0;break; case 0xed:zz(0x12);v=0;break; case 0x7e:zz(0x13);v=0;break; case 0xbe:zz(0x14);v=0;break; case 0xde:zz(0x15);v=0;break; case 0xee:zz(0x16);v=0;break;default:v=0; /*函数功能:发送主程序*/void zz(uchar x) tt0(1,m9); /高电平9ms tt0(0,m4_5); /低电平4.5ms /*发送4帧数据*/ z0(sbm); z0(sbm); z0(x); z0(x);/*结束码*/ tt0(1,m_65); tt0(0,m40); /*重复码*/ while(key() tt0(1,m9);tt0(0,m2_25);tt0(1,m_56); tt0(0,m40);tt0(0,m56);led = !led; /指示灯 led = 1; /*函数功能:单帧发送程序入口参数:1帧数据*/void z0(uchar temp) uchar v; for (v=0;v= 1; /右移一位 /*函数功能:38khz脉冲发射 + 延时程序入口参数:(是否发射脉冲,延时约 x (us))*/void tt0(bit bt,uint x) th0 = x8; /输入t0初始值 tl0 = x; tf0=0; /清0 tr0=1; /启动定时器0 if(bt = 0) while(!tf0); /bt=0时不发射38khz脉冲只延时;bt=1发射38khz脉冲且延时 else while(1) /发射具有一定占空比的的脉波 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; /关闭定时器0 tf0=0; /标志位溢出则清0ir =1; /脉冲停止后,发射端口常态为高电平/*函数功能:按键消抖延时程序入口参数:1mstime (晶振=12mhz)*/void ys(uchar time)uchari,j; for(i=0; itime; i+) for(j=0; j247; j+)_nop_();接收部分使用外部中断0接收p3.2#include #include #include #include #include 1602.h/#define uchar unsigned char /#define uint unsigned intunsigned intlowtime,hightime;sbitir = p32;sbitaa=p34;sbit bb=p35;sbit cc=p36;sbitdd=p37;ucharn4; /识别码,操作码存放uchar dis115;uchar dis215;void xsq(void);void ys(uchar time);intdecode(void);/* 主函数 */void main(void) tmod=0x01;it0 = 1; ex0 = 1;ea = 1;while(1) xsq(); /*lcd显示函数*/void xsq(void)uchar m2; m0=n0&0x0f; m1=n04; if(m09) m0=m0+0x37; elsem0=m0+0x30; if(m19) m1=m1+0x37; elsem1=m1+0x30;sprintf(dis1,-%c%c-,m1,m0);/m1为高位,m0为低位 m0=n2&0x0f; m1=n24; if(m09) m0=m0+0x37; elsem0=m0+0x30; if(m19) m1=m1+0x37; elsem1=m1+0x30;sprintf(dis2,-%c-%c-,m1,m0);lcd(dis1,dis2); ys(1);intdecode(void) unsigned char i,j;unsigned char temp; /储存解码出的数据for(i=0;i4;i+) /连续读取4个用户码和键数据码 for(j=0;j1; /temp中的各数据位右移一位,因为先读出的是高位数据 th0=0; tl0=0; tr0=1; while(ir=0); tr0=0; lowtime=th0*256+tl0; /保存低电平宽度 th0=0; tl0=0; tr0=1; while(ir=1); tr0=0; hightime=th0*256+tl0; /保存高电平宽度 if(lowtime680)return 0; if(hightime400)&(hightime1400)&(hightime8500)&(lowtime4000)&(hightime5000)decode(); gn(n2); ex0=1; /*函数功能:按键消抖延时程序*/void ys(uchar time)/1ms延时去抖时间uchari,j; for(i=0; itime; i+) for(j=0; j247; j+)_nop_();/*拓展函数,亮灯*/void gn(uchar x)switch(x)case 1:aa=aa;break; case 2:bb=bb;break; case 3:cc=cc;break; case 4:dd=dd;break;default:break;1602库函数#include /51寄存器文件#include typedef unsigned char uchar;/用uchar代替unsigned char typedef unsigned intuint;/uint代替unsigned inttypedef bit bool ;/用bool代替bit sbitrs= p20; /复位端sbitrw = p21; /写数据端sbitep = p22;/使能端/*延时函数*/void delay_lcd(ucharms)uchari;while(ms-)for(i = 0; i 250; i+)_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /空执行消耗cpu时间达到等待的效果/*lcd测忙函数*/bool lcd_bz()bool result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (bool)(p1 & 0x80); /检测d最高位是否为1ep = 0;return result; /返回测忙结果voidlcd_wcmd(ucharcmd) / 写入指令数据到lcdwhile(lcd_bz();rs = 0;rw = 0;ep = 0;_nop_();_nop_();p1 = cmd; /将8位指令通过d口传给1602_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间_nop_();_nop_();ep = 1;_n

温馨提示

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

评论

0/150

提交评论