资源描述
河南理工大学本科课程设计报告河南理工大学单片机课程设计报告作息时间控制器设计姓 名: 学 号: 专业班级: 自动化06-3班 指导老师: 所在学院:电气工程与自动化学院2009年6月14日 摘要本设计是作息时间控制器的设计,由单片机AT89C52芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子作息时间控制器。该功能的实现主要通过软件编程来完成,降低了硬件电路的复杂性,成本也有所降低。设计内容包括了秒信号指示、时间“时”和“分”显示电路、按键调整电路、供电电源以及闹铃指示电路等几部分的设计。采用四个开关来控制作息时间控制器的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。当作息时间控制器达到课程设计的要求,在到达设定的定时时间时蜂鸣器便被控制立即发出声音,持续一分钟,而后按K4键退出显示闪烁状态,即恢复时钟状态。显示采用的四位数码管电路,定时提示采用蜂鸣器发声指示。本设计方案也可以经过改进作为实现定时控制系统的控制定时电路。关键词:作息时间 单片机 显示 定时目录1 概述31.1 课程设计的目的和意义31.2 单片机课程设计的要求31.3 作息时间控制器的设计要求32 系统总体方案及硬件设计42.1 系统总体设计42.2 系统各个部分的电路设计53 软件的设计83.1 概述83.2 主模块的设计83.3显示模块设计93.4 时间设定模块设计93.5 闹铃功能的实现104 Proteus软件仿真124.1仿真结果124.2性能及误差分析145课程设计体会15参考文献15附1 程序源代码16附2原理图261 概述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 图22、系统时钟电路设计对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于实际工作过程中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在实际应用中一定要注意正确选择参数(3010 PF),并保证对称性(尽可能匹配),这两个电容元件对闹钟的走时误差有很大关系,并且选用正规的瓷片或云母电容,如果可能的话,温度系数要尽可能低。另外,瓷片电容的实际焊接距离不应该离单片机太远否则误差较大。具体的时钟电路如图三所示: 图 33、闹钟指示电路设计闹铃指示可以有声或光两种形式。本系统采用声音指示。关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用需要。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。其电路设计参见系统原理图。4、显示电路的设计本设计采用了4位数码管显示电路。在4位LED显示时,为了简化电路,降低成本,采用动态显示的方式,4个LED显示器共用一个8位的I/O, 4位LED数码管的位选线分别由相应的P2.2P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。由于采用了四位数码管,所以数码管显示“时”、“分”;秒的显示选用了一个发光二极管,两灭周期为两秒,即点亮和熄灭时间均为一秒。到达定时时间时,由计时系统的输出状态产生一脉冲信号,然后去触发蜂鸣器实现闹铃。校时电路是用来对“时”、“分”显示数字进行校对调整的。具体的电路设计如图4示: 图45、定时和调时电路的设计本设计因为使用到的键数目比较少,不宜采用矩阵式键盘,采用了功能直观简洁方便的独立式键盘,而且考虑了键盘的消抖问题。比较容易理解。每个键的具体功能如下:K1,设置时间和闹钟的小时;K2,设置小时以及设置闹钟的开关;K3,设置分钟和闹钟的分钟;K4;设置完成退出。按键定义如图5所示:图53 软件的设计3.1 概述软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。基于软件的秒脉冲信号通常有延时法和定时中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。本设计使定时器每50ms中断1次,则20次的周期为1s。这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。本系统中所使用的晶振频率为12MHZ。3.2 主模块的设计单片机系统初始化定时初始化中断初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否?显示刷新启动走时有关变量初始化刷新显示判时或分变化否?秒指示判秒到否?闹铃判是否到闹铃时间?延时YYYY主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下图6所示: 图63.3显示模块设计显示是由显示代码取得相应的段码,显示段码数据的并行发送,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。程序流程如图7所示。 图73.4 时间设定模块设计时间设定模块的设计要点是按键的去抖处理与多种状态公用一个键的处理问题。即只涉及4个键完成了4位时间参数的设定。软件法去抖动的实质是用延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。按键消抖流程图原理如图8所示:图83.5 闹铃功能的实现闹铃功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。在每次循环扫描的过程中,判断现在的时间和定时的时间是否一致。一致的话,闹铃电路根据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器发声实现报时。时间调节电路根据不同状态下的具体按键意义将相对应的计数器加以改变,并通过数码管显示出来。具体如图9示:时十位、个位,分十位、个位改变了设置闹铃标志是否设置了闹铃清除闹铃标志判当前时间是设定时间中断返回中断返回闹铃判别处理图9在该电子钟的设计中修改定时或调整时间时采用了闪烁。在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。在显示程序段中主要进行了闪烁的处理,采用定时器中断置标志位,再与位选相互结合的方法来控制调时或定时中的闪烁。时,分,秒显示则是用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。初始化之后,用中断方式对其计数,计数的同时采用了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标志位置数,使得蜂鸣器工作。4 Proteus软件仿真本次课程设计所采用的程序调试软件为wave6000集成调试软件,所采用的仿真软件为protus 6 professional软件。本设计在Proteus软件上进行了仿真,实现了设计所要求的具体内容。4.1仿真结果1、定时初值(如图10)图102、调整后的定时值(如图11)图113、时钟显示时间初值(如图12)图124、调整后的时间值(如图13)图134.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 SECONDMOV 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=1SETB 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 LOOPSETTIME: 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 RETSETATIME: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 RETTIMEPRO: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 LOOPXIAODOU1: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 RETDELAY:MOV R4,#14H DL00:MOV R5,#0FFH DL11:DJNZ R5,DL11 DJNZ R4,DL00 RETTIME:PUSH ACC PUSH PSW MOV TH0,#03CHMOV TL0,#0B0HDJNZ R2,RET0 MOV R2,#14HMOV A,20H CPL P3.5CLR C INC A CJNE A,#3CH,GO1MOV 20H,#0MOV 30H,#0MOV 31H,#0MOV A,21HINC ACJNE A,#3CH,GO2 MOV 21H,#0H MOV 32H,#0 MOV 33H,#0MOV A,22HINC ACJNE A,#18H,GO3MOV 22H,#00HMOV 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,#30HMOV R3,#0FEHMOV 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:RETDISPLAY2:PUSH ACC PUSH PSW MOV R0,#36H MOV R3,#0FBHMOV 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,DLRETDSEG1:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FHEND附2原理图26
展开阅读全文