单片机课程设计作息时间控制器设计报告.docx
单片机课程设计作息时间控制器设计报告 XX高校 单片机课程设计报告 作息时间限制器设计 姓 名: 学 号: 专业班级: 自动化班 指导老师: 所在学院:电气工程与自动化学院 2009年X月X日 摘要 本设计是作息时间限制器的设计,由单片机AT89C52芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子作息时间限制器。该功能的实现主要通过软件编程来完成,降低了硬件电路的困难性,成本也有所降低。 设计内容包括了秒信号指示、时间“时”和“分”显示电路、按键调整电路、供电电源以及闹铃指示电路等几部分的设计。采纳四个开关来限制作息时间限制器的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。当作息时间限制器达到课程设计的要求,在到达设定的定时时间时蜂鸣器便被限制马上发出声音,持续一分钟,而后按K4键退出显示闪耀状态,即复原时钟状态。显示采纳的四位数码管电路,定时提示采纳蜂鸣器发声指示。本设计方案也可以经过改进作为实现定时限制系统的限制定时电路。关键词:作息时间 单片机 显示 定时 书目 1 概述 3 1.1 课程设计的目的和意义 3 1.2 单片机课程设计的要求 3 1.3 作息时间限制器的设计要求 3 2 系统总体方案及硬件设计 4 2.1 系统总体设计 4 2.2 系统各个部分的电路设计 5 3 软件的设计 8 3.1 概述 8 3.2 主模块的设计 8 3.3显示模块设计 9 3.4 时间设定模块设计 9 3.5 闹铃功能的实现 10 4 Proteus软件仿真 12 4.1仿真结果 12 4.2性能及误差分析 14 5课程设计体会 15 参考文献 15 附1 程序源代码 16 附2原理图 26 1 概述 1.1 课程设计的目的和意义 综合利用所学单片机学问完成一个单片机应用系统设计并仿真、由硬件实现,从而加深对单片机软硬学问的理解,获得初步的应用阅历,为走出校门从事单片机应用的相关工作打下良好基础。1.2 单片机课程设计的要求 1、进一步熟识和驾驭单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤; 2、驾驭单片机仿真软件Proteus的运用方法; 3、驾驭键盘和显示器在的单片机限制系统中的应用。4、驾驭撰写课程设计报告的方法。1.3 作息时间限制器的设计要求 1、设计制作一个单片机数字钟及限制电路。2、运用4位七段显示器来显示现在的时间。显示格式为“时-分”,由LED闪动作为秒计数表示。3、可以设定作息时间,并进行到时提示。4、能够依据预先设定好的作息时辰表自动启停限制电路,完成对外部设备的实时限制。5、可以设置现在的时间及显示定时设置时间。 2 系统总体方案及硬件设计 2.1 系统总体设计 1、方案比较 方案一:采纳数字电路实现。数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。若用数字电路完成,所设计的电路相当困难,也许须要十几片数字集成块,其功能也主要依靠于数字电路的各功能模块的组合来实现,焊接的过程比较困难,成本也特别高。 方案二:用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的困难性,而且其成本也有所降低, 经过上面的对比本设计采纳单片机作为设计的主体。2、单片机的选型 AT89C52是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, AT89C51的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。基于以上优点,本设计采纳AT89C52单片机。3、总体电路的设计 电子闹钟的主体电路应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。按键功能说明:K1,设置时间和闹钟的小时;K2,设置小时以及设置闹钟的开关;K3,设置分钟和闹钟的分钟;K4;设置完成退出。电子闹钟的系统框图1如下所示: AT89C52 复位、时钟等电路 按钮电路 4位数码管显示电路 闹铃声指示电路 电源供电 电路 图1 2.2 系统各个部分的电路设计 1、系统复位电路的设计 单片机系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:)RC复位电路;)专用µ监控电路。前者实现简洁,成本低,但复位牢靠性相对较低;后者成本较高,但复位牢靠性高,尤其是高牢靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采纳这种方式。复位电路主要用来在单片机的程序进入死循环后,能使单片机重新从头执行程序而不会无休止的执行程序。本设计采纳了上电按钮电平复位电路,如图2 图2 2、系统时钟电路设计 对于时间要求不是很高的系统,只要按图进行设计就能使系统牢靠起振并稳定运行。但由于实际工作过程中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在实际应用中肯定要留意正确选择参数(30±10 PF),并保证对称性(尽可能匹配),这两个电容元件对闹钟的走时误差有很大关系,并且选用正规的瓷片或云母电容,假如可能的话,温度系数要尽可能低。另外,瓷片电容的实际焊接距离不应当离单片机太远否则误差较大。详细的时钟电路如图三所示: 图 3 3、闹钟指示电路设计 闹铃指示可以有声或光两种形式。本系统采纳声音指示。关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者须要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用须要。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,假如计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。其电路设计参见系统原理图。4、显示电路的设计 本设计采纳了4位数码管显示电路。在4位LED显示时,为了简化电路,降低成本,采纳动态显示的方式,4个LED显示器共用一个8位的I/O, 4位LED数码管的位选线分别由相应的P2.2P2. 5限制,而将其相应的段选线并联在一起,由一个8位的I/O口限制,即P0口。由于采纳了四位数码管,所以数码管显示“时”、“分”;秒的显示选用了一个发光二极管,两灭周期为两秒,即点亮和熄灭时间均为一秒。到达定时时间时,由计时系统的输出状态产生一脉冲信号,然后去触发蜂鸣器实现闹铃。校时电路是用来对“时”、“分”显示数字进行校对调整的。详细的电路设计如图4示: 图4 5、定时和调时电路的设计 本设计因为运用到的键数目比较少,不宜采纳矩阵式键盘,采纳了功能直观简洁便利的独立式键盘,而且考虑了键盘的消抖问题。比较简单理解。每个键的详细功能如下: K1,设置时间和闹钟的小时;K2,设置小时以及设置闹钟的开关;K3,设置分钟和闹钟的分钟;K4;设置完成退出。按键定义如图5所示: 图5 3 软件的设计 3.1 概述 软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。基于软件的秒脉冲信号通常有延时法和定时中断法。延时法一般采纳查询方式,在延时子程序前后必定须要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。本设计使定时器每50ms中断1次,则20次的周期为1s。这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。本系统中所运用的晶振频率为12MHZ。3.2 主模块的设计 单片机系统初始化 定时初始化 中断初始化 串口初始化 显示待机指示符 设定闹铃时间 判设置闹铃时间否? 显示刷新 启动走时 有关变量初始化 刷新显示 判时或分改变否? 秒指示 判秒到否? 闹铃 判是否到闹铃时间? 延时 Y Y Y Y 主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下图6所示: 图6 3.3显示模块设计 显示是由显示代码取得相应的段码,显示段码数据的并行发送,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的敏捷性好。程序流程如图7所示。 图7 3.4 时间设定模块设计 时间设定模块的设计要点是按键的去抖处理与多种状态公用一个键的处理问题。即只涉及4个键完成了4位时间参数的设定。软件法去抖动的实质是用延时,即检测到某一键状态改变后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。 按键消抖流程图原理如图8所示: 图8 3.5 闹铃功能的实现 闹铃功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。在每次循环扫描的过程中,推断现在的时间和定时的时间是否一样。一样的话,闹铃电路依据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器发声实现报时。时间调整电路依据不同状态下的详细按键意义将相对应的计数器加以变更,并通过数码管显示出来。 详细如图9示: 时十位、个位,分十位、个位变更了 设置闹铃标记 是否设置了闹铃 清除闹铃标记 判当前时间是设定时间 中断返回 中断返回 闹铃判别处理 图9 在该电子钟的设计中修改定时或调整时间时采纳了闪耀。在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的起先定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。在显示程序段中主要进行了闪耀的处理,采纳定时器中断置标记位,再与位选相互结合的方法来限制调时或定时中的闪耀。时,分,秒显示则是用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。初始化之后,用中断方式对其计数,计数的同时采纳了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标记位置数,使得蜂鸣器工作。 4 Proteus软件仿真 本次课程设计所采纳的程序调试软件为wave6000集成调试软件,所采纳的仿真软件为protus 6 professional软件。本设计在Proteus软件上进行了仿真,实现了设计所要求的详细内容。 4.1仿真结果 1、定时初值(如图10) 图10 2、调整后的定时值(如图11) 图11 3、时钟显示时间初值(如图12) 图12 4、调整后的时间值(如图13) 图13 4.2性能及误差分析 该作息时间限制器有四个按键: K1, K2,K3和K4。初始加电时数码管显示时钟计数初值并运行。按K1键进行校时,可以分别按K2和K3键进行对时及分进行单独校时,使其校正到标准时间;并按K4键退出。时钟正常显示运行状态时,按K2键显示闪耀并进行定时时间设置,按K1键和K3进行分和时的定时时间设定;并按K4键退出。该电路显示的误差主要由晶振自身的误差所造成,晶振的误差约为0. 00010. 000001。在软件的编程过程中所产生的误差比较小,另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累计误差很小,可以忽视。综合以上分析,本次设计时钟误差较小,能得到比较志向结果,性能稳定。 5课程设计体会 本次是基于单片机的开发设计,通过此次硬件和软件的设计,可以对单片机开发设计有了更多的心得体会和了解,并驾驭了肯定的设计思想和硬件安装分析调试技巧,对整个单片机开发设计的流程有了更深刻的相识和驾驭。 分析题目并结合实际,我们选择了自己感爱好而且有很好用的电子时钟作息限制器作为本次课程设计的题目。通过近两周时间的学习和探究,使我对所学的学问进行了系统的复习和巩固,并得到了有效的应用。在以前的学习过程中不够清楚的概念得到了更好的理解。本次课程设计我们不但进行了程序的编写调试和设计报告的整理,更重要的是,我们做出了实际的设计作品,很好的培育和熬炼了我的动手实力,提高了分析软硬件之间的差别和联系的技巧。这不仅对我以后的学习有帮助,还可以为以后的工作打下肯定的基础。在此期间,通过与老师和同学们之间的沟通,加强了自身的分析问题、解决问题的实力,并驾驭了基本的设计思想,对以后的设计有很大的指导意义。此次软硬结合的设计要求,充分调动了我的主动性,对硬件的设计是最难忘的;调试硬件对设计者来说是很有挑战意义,更能考验设计者的耐性与毅力。当然硬件须要软件相结合,变更硬件后只要稍改程序就可以实现相同的功能要求。更可以通过本次的设计把设计思想应用到更大的系统限制设计中。软硬结合使我真正相识到了理论与实际的区分,这在以后的工作和学习中赐予我更好的提示,注意理论与实际相结合,注意分析选择解决问题的思路和方法,注意设计方案的分析选择和设计思想的分析选择。总之,本次设计让我受益匪浅。 参考文献 1 余发山,王福忠编著. 单片机原理及应用技术.徐州:中国矿业高校出版社,2008. 2 陈奥初,窦振中等编著.单片机应用系统设计与实践.北京:北京航空航天高校出版社,1991. 3陈伟人编著.MCS-51系列单片机好用子程序集锦M.北京:清华高校出版社.1993. 附1 程序源代码 K1 EQU P1.0 ;在程序起先前定义变量 K2 EQU P1.1 K3 EQU P1.2 K4 EQU P1.3 ORG 0000H LJMP MAIN ORG 000BH LJMP TIME ORG 0100H ;主程序: MAIN:MOV SP,#50H MOV 20H,#00H ;时间 PIN SECOND MOV 21H,#00H ; PIN MINUTE MOV 22H,#00H ; PIN HOUR MOV 23H,#05H ;闹铃 PIN MINUTE MOV 24H,#06H ; PIN HOUR MOV 25H,#00H ;定义一个标记位 MOV 30H,#00H ;时间 BCD SECOND MOV 31H,#00H ; MOV 32H,#00H ; BCD MINUTE MOV 33H,#00H ; MOV 34H,#00H ; BCD HOUR MOV 35H,#00H ; MOV 36H,#05H ;闹铃 BCD MINUTE MOV 37H,#00H ; MOV 38H,#06H ; BCD HOUR MOV 39H,#00H CPL P3.0 ; MOV TMOD,#01H ;16位计数器 T0,方式 MOV TH0,#03CH ;赋初值 MOV TL0,#0B0H MOV IE,#87H ;开中断 T0,EA=1 SETB TR0 ;T0启动计数 MOV R2,#14H ;计数器 MOV P2,#0FFH LOOP:LCALL TIMEPRO ; 调用现在时间与闹铃时间比较程序 LCALL DISPLAY1 ; 调用现在时间显示子程序 JB K1,M1 ; 推断按键是否按下 LCALL XIAODOU1 ; 调用消抖程序 MOV C,25H.0 JC A1 A1:CLR 25H.0 LCALL SETTIME ; 调用设置现在时间子程序 LJMP LOOP M1:JB K2,M2 ;推断P1.1键是否按下 LCALL XIAODOU2 MOV C,25H.0 JC A2 A2:CLR 25H.0 LCALL SETATIME ; 调用设置闹钟的程序 LJMP LOOP M2:JB K4,M3 A3:LCALL XIAODOU3 MOV C,25H.0 JC A4 A4:CLR 25H.0 M3:LJMP LOOP SETTIME: L0:LCALL DISPLAY1 JB K2,L1 LCALL XIAODOU4 MOV C,25H.0 JC A5 A5:CLR 25H.0 INC 22H MOV A,22H CJNE A,#18H,GO12 MOV 22H,#00H MOV 34H,#00H MOV 35H,#00H LJMP L0 L1:JB K3,L2 LCALL XIAODOU5 MOV C,25H.0 JC A6 A6:CLR 25H.0 INC 21H MOV A,21H CJNE A,#3CH,GO11 MOV 21H,#00H MOV 32H,#00H MOV 33H,#00H LJMP L0 GO11:MOV B,#0AH DIV AB MOV 32H,B MOV 33H,A LJMP L0 GO12:MOV B,#0AH DIV AB MOV 34H,B MOV 35H,A LJMP L0 L2:JB K4,L0 LCALL XIAODOU3 MOV C,25H.0 JC AX AX:CLR 25H.0 RET SETATIME:LCALL DISPLAY2 ;调用闹钟设置,闹铃响时的显示程序 N0:LCALL DISPLAY2 JB K3,N1 LCALL XIAODOU6 MOV C,25H.0 JC A7 A7:CLR 25H.0 INC 24H MOV A,24H CJNE A,#24,GO22 MOV 24H,#00H MOV 38H,#00H MOV 39H,#00H LJMP N0 N1:JB K1,N2 LCALL XIAODOU7 MOV C,25H.0 JC A8 A8:CLR 25H.0 INC 23H MOV A,23H CJNE A,#60,GO21 MOV 23H,#00H MOV 36H,#00H MOV 37H,#00H LJMP N0 GO21:MOV B,#0AH DIV AB MOV 36H,B MOV 37H,A LJMP N0 GO22:MOV B,#0AH DIV AB MOV 38H,B MOV 39H,A LJMP N0 N2:JB K4,N0 LCALL XIAODOU3 MOV C,25H.0 JC A9 A9:CLR 25H.0 RET TIMEPRO:MOV A,21H MOV B,23H CJNE A,B,BK MOV A,22H MOV B,24H CJNE A,B,BK SETB 25H.0 MOV C,25H.0 JC XX XX:LCALL TIMEOUT BK:RET TIMEOUT: X1:LCALL BZ LCALL DISPLAY2 CLR 25H.0 JB K4, X1 RET BZ:SETB P3.0 MOV R7,#250 T2:MOV R6,#124 T3:DJNZ R6,T3 DJNZ R7,T2 CLR P3.0 JB K4,XY LCALL XIAODOU3 MOV C,25H.0 JC XY1 XY:RET XY1:LJMP LOOP XIAODOU1:LCALL DISPLAY1 JB K1,XIAODOU1 MOV C,K1 JC XIAODOU1 LCALL DELAY MOV C,K1 JC XIAODOU1 STOP1:MOV C,K1 JNC STOP1 LCALL DELAY MOV C,K1 JNC STOP1 SETB 25H.0 RET XIAODOU2:LCALL DISPLAY2 JB K2,XIAODOU2 MOV C,K2 JC XIAODOU2 LCALL DELAY MOV C,K2 JC XIAODOU2 STOP2:MOV C,K2 JNC STOP2 LCALL DELAY MOV C,K2 JNC STOP2 SETB 25H.0 RET XIAODOU3:LCALL DISPLAY1 JB K4,XIAODOU3 MOV C,K4 JC XIAODOU3 LCALL DELAY MOV C,K4 JC XIAODOU3 STOP3:MOV C,K4 JNC STOP3 LCALL DELAY MOV C,K4 JNC STOP3 SETB 25H.0 RET XIAODOU4:LCALL DISPLAY1 JB K2,XIAODOU4 MOV C,K2 JC XIAODOU4 LCALL DELAY MOV C,K2 JC XIAODOU4 STOP4:MOV C,K2 JNC STOP4 LCALL DELAY MOV C,K2 JNC STOP4 SETB 25H.0 RET XIAODOU5:LCALL DISPLAY1 JB K3,XIAODOU5 MOV C,K3 JC XIAODOU5 LCALL DELAY MOV C,K3 JC XIAODOU5 STOP5:MOV C,K3 JNC STOP5 LCALL DELAY MOV C,K3 JNC STOP5 SETB 25H.0 RET XIAODOU6:LCALL DISPLAY2 JB K3,XIAODOU6 MOV C,K3 JC XIAODOU6 LCALL DELAY MOV C,K3 JC XIAODOU6 STOP6:MOV C,K3 JNC STOP6 LCALL DELAY MOV C,K3 JNC STOP6 SETB 25H.0 RET XIAODOU7:LCALL DISPLAY2 JB K1,XIAODOU7 MOV C,K1 JC XIAODOU7 LCALL DELAY MOV C,K1 JC XIAODOU7 STOP7:MOV C,K1 JNC STOP7 LCALL DELAY MOV C,K1 JNC STOP7 SETB 25H.0 RET DELAY:MOV R4,#14H DL00:MOV R5,#0FFH DL11:DJNZ R5,DL11 DJNZ R4,DL00 RET TIME:PUSH ACC PUSH PSW MOV TH0,#03CH MOV TL0,#0B0H DJNZ R2,RET0 MOV R2,#14H MOV A,20H CPL P3.5 CLR C INC A CJNE A,#3CH,GO1 MOV 20H,#0 MOV 30H,#0 MOV 31H,#0 MOV A,21H INC A CJNE A,#3CH,GO2 MOV 21H,#0H MOV 32H,#0 MOV 33H,#0 MOV A,22H INC A CJNE A,#18H,GO3 MOV 22H,#00H MOV 34H,#0 MOV 35H,#0 AJMP RET0 GO1:MOV 20H,A MOV B,#0AH DIV AB MOV 31H,A MOV 30H,B AJMP RET0 GO2:MOV 21H,A MOV B,#0AH DIV AB MOV 33H,A MOV 32H,B AJMP RET0 GO3:MOV 22H,A MOV B,#0AH DIV AB MOV 35H,A MOV 34H,B AJMP RET0 RET0:POP PSW POP ACC RETI DISPLAY1:MOV R0,#30H MOV R3,#0FEH MOV A,R3 PLAY1:MOV P2,A MOV A,R0 MOV DPTR,#DSEG1 MOVC A,A+DPTR MOV P0,A LCALL DL1 MOV P2,#0FFH MOV A,R3 RL A JNB ACC.6,LD1 INC R0 MOV R3,A LJMP PLAY1 LD1:RET DISPLAY2:PUSH ACC PUSH PSW MOV R0,#36H MOV R3,#0FBH MOV A,R3 PLAY2:MOV P2,A MOV A,R0 MOV DPTR,#DSEG1 MOVC A,A+DPTR MOV P0,A LCALL DL1 MOV P2,#0FFH MOV A,R3 RL A JNB ACC.6,LD2 INC R0 MOV R3,A LJMP PLAY2 LD2:POP PSW POP ACC RET DL1:MOV R7,#05H DL:MOV R6,#0FFH DL6:DJNZ R6,$ DJNZ R7,DL RET DSEG1:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH END 附2原理图