毕业设计--基于51单片机的灯光控制系统.docx_第1页
毕业设计--基于51单片机的灯光控制系统.docx_第2页
毕业设计--基于51单片机的灯光控制系统.docx_第3页
毕业设计--基于51单片机的灯光控制系统.docx_第4页
毕业设计--基于51单片机的灯光控制系统.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机的灯光控制系统 摘 要:本设计主要以atmel公司生产的at89c52为核心处理器,利用其内部的定时器进行精确定时,并通过74hc573锁存器做驱动通过i/o口在数码管显示时间,通过cpu检测程序设定的时间,控制5v继电器的通断已达到控制照明器件的通断。本系统还具有外部可调时间部分以便対误差进行修正,以及备用电源防止停电造成单片机复位,使下次来电时不能对程序设定的时间进行准确响应。本试验通过在研展yz200单片实验箱上进行硬件调试,用keil uvision3进行软件的调试。通过调试仿真是单片机能精确地控制电源的通断时间即照明设备的通断时间,调试之后定时可以精确到秒。关键词:at89c52 定时器 仿真调试1 方案比较,设计与论证照明设备at89c52继电器方案一:通过单片机内部定时,不接外部显示设备(数码管)以及外部调整设备(独立键盘)。只要单片机内部定时器到程序设定的时间就控制继电器的通断,以达到控制照明设备通断的目的,但存在误差不能修正 方案二:通过单片机控制数码管把单片机内部程序控制时间直观的在数码管上显示出来,在用三个独立键盘来控制时间即便是出现误差也可以通过键盘来调整,是误差始终在容许范围之内已实现精确的定时。独立键盘数码管 at89c52 继电器照明设备 方案一:不能直观的显示单片机内部情况,而且对系统产生的误差时间不能修正,虽说可以通过仿真调试减小误差短时间内影响不是很大但是长时间使用的话误差还是很大的。 方案二:不但直观地显示了单片机内部的情况,而且对系统经过时间累积产生的误差进行修正,再加上仿真调试减小误差,以达到定时精确到秒的要求。2 理论分析系统设计2.1定时显示模块单片机时钟产生方式有两种,一是内部时钟方式(图a),二是外部时钟方式(图b) ,内部时钟方式要在单片机的和引脚外接晶振即可。图中电容器和的作用是稳定频率和快速起振,电容值在,典型值为。晶振的振荡频率要小于,典型值为,或。振荡器外部时钟方式是把外部已有的时钟信号引如单片机内,此方式多用于多片单片机同时工作,并要求各单片机同步运行的场所。本实验因为是定时所以采用晶振。图 图晶振周期为最小的时序单位,晶振信号经分频后形成两相错开的信号和。和的周期也称为状态,他是晶振周期的倍,即一个状态包含个晶振周期。在每个状态的前半周期,相位()信号有效;在每个状态的前后半周期,相位()信号有效;每个状态有两个节拍(相),和,以和为基本节拍指挥各个部件协调工作。晶振信号分频后形成机器周期,即一个机器周期包含个晶荡周期。这样以来采用晶振则机器周期为,本设计用定时器的定时方式,即十六位,设定=(-)/=(-)%这样定时时间为,计数次就是一秒。满秒则分钟加而秒清零,满分钟时小时数加分钟清零,把时分秒分成两位分别在数码管上显示,显示电路如下: 本设计选用的数码管是共阳极的及图中所示的com1到com4,而p00到p07则控制相应的各段及图中二极管的a,b,c,d,e,f,dp.分别送十六进制显示码是不同的二极管发光已达到显示不同数的目地,如要左边第一个显示显示1其他不显示,则p1口要送0x80而p0口要送0xf9以此类推就可以显示各数字了。本设计锁存器74hc573主要做驱动使数码管发光因为单片机的驱动能力很弱不能驱动数码管显示,而显示原理是数码管动态显示原理,分别给每个数码管送十六进制显示编码,然后延时在给下一个数码管送十六进制显示编码,以此类推给八位送完后循环再送新的一组十六进制编码,使数码挂动态显示时间。值得注意的是要在显示过程中消隐,及送完一位后要给p0口送0xff,使数码管短时熄灭(小于5ms),再给下一位送数显示,以不影响下一位的显示。使显示更清晰以防出现乱码。2.2 键盘模块本设计再用三个独立键盘来控制数码管的时分秒显示,相应按键按下后时分秒相对应的加1,已达到调整时间的目的,更可以对内部程序的时间进行修正。使系统误差也得到修正,这样单片机就能更准确地定时。但需要注意的是,按键按下时由于机械接触点的弹性作用,按键在闭合时不会马上接通,在断开时也不会一下断开。所以在闭合瞬间伴有一连串的抖动,抖动时间长短由按键的机械性及操作人员按键动作决定,一般为5到20毫秒,按键稳定闭合时间的长短是有操作人员按键按压时间长短决定的,一般为零点几秒至数秒不等。所以在程序中要用程序进行延时消抖。按键原理是单片机上电后所有的io口都是高电平,而当按键按下后是单片机的io口接地这样一相应的io口就变成了低电平,只要通过单片机检测接键盘的哪个io口变成低电平就知道哪个键按下了,再通过相应的程序控制显示时间达到修正时间的目的,本设计是当按键按下时,对应的时分秒各自加1,使时间得到调整保持精确这样定时时间就更加准确,之所以加这个显示电路和控制电路是因为单片机自身执行程序时要消耗时间,即便是经过精确的调试修改延时等手段这个时间误差总是存在的,随所短时间内影响不大但长时间的工作后日积月累这个误差当然就不可忽视了。加这个电路后当发现时间误差在秒上时就可以修正了,让时间更加精确,还有当长时间停电时备用电池电量耗完,如果没这个电路当再次来电时内部程序复位这样定时就乱了,而加上这的电路后当点来时就可以人工调整时间,时使用更加方便,定时更加精确。 独立键盘原理图2.3继电器模块本设计采用的继电器是5v继电器,有电路图可知当通电时led2点亮说明继电器模块电源正常反之则没有电,而led1的作用是当开关三极管导通也就是说继电器工作时它点亮,而二极管d1的作用是当继电器断电后,防止继电器内部的电磁感应现象所产生的反向电动势,对发光极管等造成损害。因为平时d1是不导通的而当继电器产生反向电动势时,产生的电动势就会经过二极管形和继电器本身形成通路,这样就保护了整个电路中的器件。当单片机输出一个低电平时三极管导通,继电器通电内部就产生了磁场把开关k1通过磁力吸下使其与3闭合这样使外部设备的电路接通达到了用低电压控制高压的的目的。 3 软件设计程序如下: #include #define uchar unsigned char uchar shi,shi1,shi2,fen,fen1,fen2,miao,miao1,miao2,num,tt,h,h1,h2,f,f1,f2,m,m1,m2; uchar code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void display();void display1();void keyscan1();sbit s1=p30;sbit s2=p31;sbit s3=p32;sbit s4=p33;sbit relay=p35;void delay(uchar z) uchar x,y; for(x=z;x0;x-) for(y=110;y0;y-); void init() shi=0; fen=0; miao=0; tt=0; tmod=0x01; th0=(65536-49990)/256 tl0=(65536-49990)%256 ea=1; et0=1; tr0=1; p3=0xff; void keyscan() if(s1=0) delay(5) ; if(s1=0) tr0=0; shi+; if(shi=24) shi=0;while(!s1);tr0=1; else display(); if(s2=0) delay(5); if(s2=0) tr0=0; fen+; if(fen=60) fen=0;while(!s2);tr0=1; else display(); if(s3=0) delay(5); if(s3=0) ea=0; th0=(65536-49990)/256 tl0=(65536-49990)%256 miao+; if(miao=60) miao=0;while(!s3);ea=1; else display(); void main() init(); while(1) shi2=shi/10; shi1=shi%10; fen2=fen/10; fen1=fen%10; miao2=miao/10; miao1=miao%10; keyscan(); display(); void time() interrupt 1 th0=(65536-49990)/256 tl0=(65536-49990)%256 tt+; if(tt=20) tt=0; miao+; if(shi=1)&(fen=1)&(miao=3) relay=0; if(shi=1)&(fen=1)&(miao=9) relay=1; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+; if(shi=24) shi=0; void display() p1=0x01; p0=tablemiao1; delay(5); p0=0xff; p1=0x02; p0=tablemiao2; delay(5); p0=0xff; p1=0x04; p0=0xbf; /送间隔符 delay(5); p0=0xff; p1=0x08; p0=tablefen1; delay(5); p0=0xff; p1=0x10; p0=tablefen2; delay(5); p0=0xff; p1=0x20; p0=0xbf; /送间隔符 delay(5); p0=0xff; p1=0x40; p0=tableshi1; delay(5); p0=0xff; p1=0x80; p0=tableshi2; delay(5); p0=0xff; 4仿真调试本设计主要通过对定时时间进行调试,已达到精确定时的目的。仿真工具是keil uvision3,当给定时器t0分别装th0=(65536-50000)/256, th0=(65536-50000)%256;调试结果如下图: 则每分钟的误差=0.01289400秒; 每小时误差=0.74915800秒;24小时误差= 24*0.7491588=17.9798112秒; 最终调试后当给th0=(65536-49983)/256; tl0=(65536-49983)%256;则每分钟的误差=0.000113秒; 每小时误差=0.031233秒;24

温馨提示

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

评论

0/150

提交评论