版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、苏州科技学院天平学院单片机课程设计报告作息时间控制器设计名:王亚明学 号:04专业班级:电气0921徐树梅指导老师:2012年6月2日概述课程设计的目的和意义单片机课程设计的要求作息时间控制器的设计要求系统总体方案及硬件设计系统总体设计系统各个部分的电路设计软件的设计概述主模块的设计显示模块设计时间设定模块设计声光显示功能的实现4 Proteus 软件仿真仿真结果性能及误差分析5 课程设计体会参考文献附 1 程序源代码附 2 原理图目录错 误! 未定义书签。错 误! 未定义书签。错 误! 未定义书签。错 误! 未定义书签。10101015第一部分 概述课程设计的目的和意义:综合利用所学单片机知
2、识完成一个单片机应用系统设计并仿真、由硬件实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下良好基础。单片机课程设计的要求:1、进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;2、掌握单片机仿真软件 Proteus 的使用方法;3、掌握键盘和显示器在的单片机控制系统中的应用。4、掌握撰写课程设计报告的方法。作息时间控制器的设计要求:1 、设计制作一个单片机数字钟及控制电路。2、使用 LED 显示器来显示现在的时间。显示格式为 “时-分-秒”,由 LED 闪动作为秒计数表示。3、可以设定作息时间,并进行到时提示。4
3、、能够根据预先设定好的作息时间表自动启停控制电路,完成对外部设备的实时控制。5、可以设置现在的时间及显示定时设置时间。第二部分 系统总体方案及硬件设计系统总体设计:1、方案设计:用单片机来设计制作完成 ,由于其功能的实现主要通过软件编程来完成 ,那么就降低了硬件电路的复杂 性,而且其成本也有所降低 ,2、单片机的选型:AT89C52 是低功耗、高性能的 CMOS 型 8 位单片机。片内带有 4KB 的 Flash 存储器 ,且允许在系统内 改写或用编程器编程。另外,AT89C51的指令系统和引脚与 8051完全兼容片内有128B的RAM、32条I/O 口线、 2 个 16 位定时计数器、 5
4、个中断源、一个全双工串行口等。基于以上优点,本设计采用 AT89C52 单 片机。3、总体电路的设计:时间作息控制的主体电路应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电 路等几部分。按键功能说明:K1设置时间;K2加一;K3,减一;K4 ;声光控制开关。一电源供电电路时间作息控制的系统框图 1如下所示:复位、时钟等电11 fLED显示电路路1111按钮电路AT89C54*声光指示电路f系统各个部分的电路设计:1、系统复位电路的设计:单片机系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:1)RC复位电路;2)专用aP监控电路。前者实现简单,成本低,但复位可靠性
5、相对较低;后者成本较高,但复位可靠性高, 尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。复位电路主要用来在单片机的程序进入死循环后,能使单片机重新从头执行程序而不会无休止的执行 程序。本设计采用了上电按钮电平复位电路,如图2C31卜10UFR1R20CZ10k1k2、系统时钟电路设计:对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于实际工作过程中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在实际应用中一定要注意正确选择参 数(30±10 PF),并保证对称性(尽可能匹配),这两个电容元件对闹钟的走时误差
6、有很大关系,并且选用 正规的瓷片或云母电容,如果可能的话,温度系数要尽可能低。另外,瓷片电容的实际焊接距离不应该离 单片机太远否则误差较大。具体的时钟电路如图三所示:C23、声光指示电路设计:声光指示可以有声或光两种形式。本系统采用声音和光混合指示。关键元件是蜂鸣器和发光二极管。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。 其电路设计参见系统原理图。4、显示电路的设计:本设计采用了 4位数码管显示电路。在4位LED显示时,为了简化电路,降低成本,采用动态
7、显示的方式,P2. 5控制,而将其相应的段时”分”4个LED显示器共用一个8位的I/O, 4位LED数码管的位选线分别由相应的由计分” “秒”显选线并联在一起,由一个8位的I/O 口控制,即 P0 口。由于采用了四位数码管,所以数码管显示 秒的显示选用了一个发光二极管,两灭周期为两秒,即点亮和熄灭时间均为一秒。到达定时时间时, 时系统的输出状态产生一脉冲信号,然后去触发蜂鸣器实现闹铃。校时电路是用来对时”示数字进行校对调整的。具体的电路设计如图 4示:lCLXIJ.M01SLCDr-(TiOL寸LLLL5、定时和调时电路的设计:本设计因为使用到的键数目比较少,不宜采用矩阵式键盘,采用了功能直观
8、简洁方便的独立式键盘, 而且考虑了键盘的消抖问题。比较容易理解。每个键的具体功能如下:K1设置时间;K2加一;K3,减一;K4 ;声光控制开关。 按键定义如图5所示:第三部分软件的设计概述:12MHZ。软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。基于软件的秒脉冲信 号通常有延时法和定时中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序, 导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。 本设计使定时器每50ms中断1次,则20次的周期为1S。这种实现法的特点是精度高,秒脉冲的发生和其 他处理可以并行进
9、行。本系统中所使用的晶振频率为主模块的设计:“自上而主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下图 6所示:显示模块设计:显示段码数据的并行发送, 用LED显示器代替指针显示进而显示显示是由显示代码取得相应的段码,时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活 性好。程序流程如图7所示。j薯弁传到S£打幵垦示图七时间设定模块设计:时间设定模块的设计要点是按键的去抖处理与多种状态公用一个键的处理
10、问题。即只涉及4个键完成了 4位时间参数的设定。软件法去抖动的实质是用延时,即检测到某一键状态变化后延时一段时间,再检 测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一 般参考资料多描述为10ms左右,实际应用中,应大于 20ms,否则,会导致按一次作多次处理,影响程序 正常执行。按键消抖流程图原理如图 8所示:i - 计声光功能的实现:闹铃功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设 计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于 判别何时要进行闹铃。在每次循环扫
11、描的过程中,判断现在的时间和定时的时间是否一致。一致的话,闹 铃电路根据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器 发声实现报时。时间调节电路根据不同状态下的具体按键意义将相对应的计数器加以改变,并通过数码管 显示出来。第四部分Proteus软件仿真本次课程设计所采用的程序调试软件为wave6000集成调试软件,所采用的仿真软件为P roteusProfessional软件。本设计在Proteus软件上进行了仿真,实现了设计所要求的具体内容。仿真结果:1、启动初值(如图9)LCD1Lr0l6L2、声光控制报警(如图 10)LS1 rfIZD2LED-EF
12、7YcT 二IDkC<TEx -r、SPEAKER=T图103、定时响铃功能(如图 11)egu ”屮iCniH/= T4rTl *3列 raorw mm HIRtR13I «Dd |-1匚 T竝lEh « r*iiiX-y u*i?WiFtrmALEw严0T3p-* vrahMJ P >±'4n«Ai.miVI 6*丐'j:MtI J,Tt T2OL2-fi-0£ UEBMU 3丫逹伙P凶爲lly 輛 11箕專一罟誓竺图11性能及误差分析:该作息时间控制器有四个按键:K1, K2 , K3和K4。初始加电时数码管显
13、示时钟计数初值并运行。按K1键进行校时,可以分别按K2和K3键进行对时及分进行单独校时 时钟正常显示运行状态时,按K2键显示闪烁并进行定时时间设置,按设定;并按 K4键退出。该电路显示的误差主要由晶振自身的误差所造成,使其校正到标准时间;并按K4键退出。K1键和K3进行分和时的定时时间,晶振的误差约为0. 00010.000001。在软件的编程过程中所产生的误差比较小,另外在中断的过程中移,而它所产生累计误差很小,可以忽略。,只会在第一次计时时产生时间的偏综合以上分析,本次设计时钟误差较小,能得到比较理想结果,性能稳定。第五部分课程设计体会在整个设计过程中,充分发挥人的主观能动性,自主学习,学
14、到了许多没学到的知识。这次毕业论文 的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。我从资 料的收集中,掌握了很多单片机、LED显示屏的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机、LED显示屏的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在 今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计 中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很 大的帮助。在此次设计中,知道了做凡
15、事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次论文中学了很多很多东西,这是最重要的。我认为这个收获应该说是相当大的。一开始我们从参考书上找来了课题,但是毕竟是参考书,做到后 来发现很多程序都是不完整的,这让我们伤透了脑筋。看着别的小组都弄得有模有样了,可是我们连一个 课题都还没有定好。好不容易又找到了课题,可是结果还是很不尽人意。程序接线什么的都弄好了,调试 也没有问题,可是就是无法达到预期想要的结果。参考书毕竟只是一个参考,设计这种东西最后还是要靠 自己动脑筋。然后我们大家一起齐心协力,从平时做的实验、老师上课的举例、书本上的知识和其他同学 的帮
16、助下终于完成了。应该说这是通过我们小组成员的共同努力和动脑完成的,虽然内容并不是很复杂, 但是我们觉得设计的过程相当重要,学到了很多,收获了很多。我觉得课程设计反映的是一个从理论到实 际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。小组人员的配合 、相处,以及自身的动脑和努力,都是以后工作中需要的。参考文献:1余发山,王福忠编着.单片机原理及应用技术.徐州:中国矿业大学出版社,2008.2 陈奥初,窦振中等编着.单片机应用系统设计与实践.北京:北京航空航天大学出版社,1991.M.北京:清华大学出版社.1993.3 陈伟人编着.MCS-51系列单片机实用子程序集锦
17、附录附录一:程序源代码="am ,pm ,24d"00:00:00 mb "#in clude<>#defi ne uchar un sig ned char#defi ne uintun sig ned intsbit E=P 3人4;sbit RS=P3A5;sbit key1=卩2人4;sbit key2=卩2人5;sbit key3=卩2人6;sbit key4=卩2人7;sbit mbkey=卩2人2;sbit beep=P 2人3;ucharcou nt,shi=1,fe n=59,miao=58,key1 num,flag,flag1 进
18、跚转换参数key2num是key5的计数jinzhi uint nia n=2009,yue=11,ri=19,cou nt2;uchar code table=" 2012-6-06 WED"uchar code table1="24d 01:59:58 ON "ucharcodetable2="MON,TUE,WED,THU,FRI,SA T,SUN "Iuchar code table3uchar code table4="ON ,OFF"uchar code table5= void delay(u int
19、 z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void di(u int x)蜂鸣器发声函数beep=0; delay(x); beep=1;void wnte_com(uchar com)/ 给写液晶命令uchar shi,ge;shi=date/10; ge=date%10; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); "uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+add); w
20、nte_date(0x30+shi); write_date(0x30+ge);RS=0; P0=com; delay(5); E=1; delay(5);E=0; void write_date(uchar date)/ 给液晶写数据 void write_ri(uchar add , uchar date) / 日显示 函数 1/星期显示函数RS=1;P0=date; delay(5); E=1; delay(5); E=0;void ini t()初始化函数uchar n um;E=0;write_com(0x38);write_com(0x0c);write_com(0x06);wri
21、te_com(0x01);/ 清零 write_com(0x80);for( num=0; num<16; num+) vpid write_sfm(uchar add ,uchar date)秒显示函数uchar shi,ge;shi=date/10;ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);void write_week(uchar week)uchar week_ num; week_ num=week; switch(week_ num)write_date(ta
22、ble n um); delay(20);case 1:write_com(0x80+0x40);for(num=0;n um<16 ;n um+)/第二行write_date(table1 num); delay(20);write_com(0x80+13);write_date(table20);write_date(table21); write_date(table22); write_com(0x80+13); break;case 2:TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;
23、TH1=(65536-10000)/256;write_com(0x80+13); write_date(table24); write_date(table25i); write_date(table26); write_com(0x80+13); break;case 3:TL1=(65536-10000)%256;ET1=0;TR1=0;(rje_nian( uchar add , uint date)/年case 4:uchar qia n,bai,shi,ge;qia n=date/1000; bai=(date-1000*qia n)/100; shi=(date-qia nT00
24、0-bai*100)/10; ge=date%10;write_com(0x80+add); write_date(0x30+qia n);wnte_date(0x30+bai); write_date(0x30+shi);write_date(0x30+ge);void wrJ_yue(uchar add , uchar date) /case 5:case 6:write_com(0x80+13);write_date(table28);write_date(table29); write_date(table210);write_com(0x80+13); break;write_com
25、(0x80+13); write_date(table212); write_date(table213i); write_date(table214);write_com(0x80+13); break;write_com(0x80+13); write_date(table216); write_date(table217); write_date(table218);write_com(0x80+13); break;write_com(0x80+13); write_date(table220); write_date(table221i); write_date(table222i)
26、;write_com(0x80+13);break;case 7:write_com(0x80+13);write_date(table2 write_date(table2 write_date(table2 write_com(0x80+13); break;void write_j in zhi(uchar ji nzhi)/jinzhi进制显示函数uchar jzn um; jzn um=j in zhi; switch(jz num)case 1:write_com(0x80+0x40+0); write_date(table30); wnte_date(table31i); wnt
27、e_date(table32i);write_com(0x80+0x40+0); break;case 2:case 3:write_com(0x80+0x40+0); write_date(table34); wnte_date(table35i); wnte_date(table36);write_com(0x80+0x40+0); break;write_com(0x80+0x40+0); write_date(table3 8);wnte_date(table39); wnte_date(table310);write_com(0x80+0x40+0); break;void writ
28、e nao(uchar nao)闹钟开关显示函数/delay(5); if(key4=0)if(key1=0)/while(!key4); beep=1; flag=0;delay(5);/ 消斗 if(key1=0)key1 num+; while(!key1); di(1);if(key1 num=1)TR0=0;wnte_com(0x80+0x40+10);write_com(0x0f);/ 光标闪if(key1 num=2)write_com(0x80+0x40+7);if(key1 num=3)write_com(0x80+0x40+4);if(key1 num=4)write_co
29、m(0x80+0x40);if(key1 num=5)write_com(0x80+2);if(key1 num=6)write_com(0x80+7);uchar naonum; naonum=n ao; switch( naonum)casewrite_com(0x80+0x40+13);write_date(table40);wnte_date(table41);wnte_date(table42i);write_com(0x80+0x40+13);-break;casewrite_com(0x80+0x40+13);-write_date(table44);wnte_date(tabl
30、e45i); wnte_date(table46);write_com(0x80+0x40+13);-break;void keyboard。/按键扫描函数if(flag=1)/闹钟暂停函数if(key4=0)1:2:止闪烁if(key1 num=7)write_com(0x80+10);if(key1 num=8)write_com(0x80+13);if(key1 num=9)write_com(0x80+0x40+13);if(key1 num=10)key1 num=0;亠write_com(0x0c);/ 光标停TR0=1;/打开定时器if(key1 num!=0)if(key2=0
31、)眾ey25=0)while(!key2);/ 等待松手 di(100);if(key1 num=1)miao+;if(miao=60) miao=0;write_sfm(10,miao);write_ nao(naon um); "if(key1 num=10)write_com(0x80+0x40+10);if(key1 num=2)fen+;if(fen=60) fen=0;write_sfm(7,fe n);write_com(0x80+0x40+7);if(key1 num=3)shi+;if(jin zhi=3)if(shi=24) shi=0;elseif(shi>
32、;12)shi=shi-12;write_sfm(4,shi);write_com(0x80+0x40+4);if(key1 num=4)jin zhi+;if(jin zhi=4)jin zhi=1; write_j in zhi (jin zhi);if(key1 num=5)nian+; write_ nian (2, nia n); write_com(0x80+2);if(key1 num=6)yue+;if(yue=13)yue=1;write_yue(7,yue);write_com(0x80+7);if(key1 num=7)ri+;if(ri=32)ri=1; write_r
33、i(10,ri); write_com(0x80+10);标停止闪烁/*if(key1 num=8)xqn um+;if(xqn um=8)xqn um=1; write_week(x qn um);if(key1 num=9)naon um+; if(naon um=3) naon um=1;key1 num=0;write_com(0x0c);/ 光TR0=1;/打开定时器if(key3=0)dekey35=0)while(!key3); di(100);if(key1 num=1)miao-;if(miao=-1) miao=59;write_sfm(10,miao);write_com
34、(0x80+0x40+10);if(key1 num=2)fen-;if(fen=-1) fen=59; write_sfm(7,fe n);write_com(0x80+0x40+7);if(key1 num=3)shi-; if(shi=-1) shi=23;*/ if(ji nzhi=3)if(shi=-1)shi=23;elseif(shi<1)shi=shi+12;write_sfm(4,shi);write_com(0x80+0x40+4);if(key1 num=4)jinzhi-;if(jin zhi=0)jin zhi=3; write_j in zhi (jin zh
35、i);if(key1 num=5)n ia n-; write_ nian (2, nia n); write_com(0x80+4);if(key1 num=6)yue-;if(yue=0)write_com(0x80+7);/*yue=12;write_yue(7,yue);if(key1 num=7)ri-;if(ri=0) ri=31; write_ri(10,ri);write_com(0x80+13); if(key1 门0=8)xqn um-;if(xqn um=0)xqn um=7; write_week(x qn um); write_com(0x80+10);if(key1
36、 num=9) naon um-;if(naon um=0) naon um=2;write_ nao(naon um);write_com(0x80+0X40+13);*/void mai n()void mbiao()秒表函数if(mbkey=0)/时器mbke yn um+; while(!mbkey); if(mbke yn um=1) /关闭时钟定时器TR0=0;ET0=0;write_com(0x80+0x40);for(num=0;n um<16 ;n um+)write_date(table5 num); ms=0;mbmiao=0;mbfe n=0;TR1=0;ET1=0;if(mbke yn um=2)/打开秒表定时器关闭时钟定TR1=1;ET1=1;TR0=0;ET0=0;if(mbke yn um=3)/关闭秒表定时器TR1=0;ET1=0;TR0=0;ET0=0;if(mbke yn um=4)/显示时钟状态打开时钟定时器 TR0=1;ET0=1;TR1=0;ET1=0; write_sfm(10,miao); write_sfm(7,fe n); write_sfm(4,shi); write_ji nzhi(ji nzhi); write_com(0x80+0x40+13); wr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 充电桩安装及安全使用协议范本
- 辽宁省沈阳市沈阳市郊联体2024-2025学年高二上学期11月期中生物试题 含解析
- 2024年度企业级区块链技术研发与许可合同3篇
- 2024年度学校食堂电梯安装与使用合同
- 二零二四年度国际海鲜产品买卖合同
- 担保公司2024年度服务合同担保
- 二零二四年度体育赛事组织承揽合同
- 二零二四年文化艺术活动组织策划合同
- 二零二四年度工厂企业水电供应合同
- 房屋转让协议范本标准版完整版
- 《中华人民共和国文物保护法》知识专题培训
- 森林病虫害防治造林施工承包合同
- 网络安全技术作业指导书
- 2024年信息网络工程分包劳务合同
- 网约车全国公共科目考试题库与答案(一)
- 2024年11月绍兴市2025届高三高考科目诊断性考试(一模) 数学试卷(含答案)
- 四川省成都市2023年中考语文真题试卷
- 煤矿灾害预防及事故应急管理
- 餐饮服务电子教案 学习任务4 鸡尾酒调制
- 统编版 高中语文 必修上册 生命的诗意第三单元大单元教学
- 建筑施工安全生产治本攻坚三年行动工作计划
评论
0/150
提交评论