定时闹钟设计毕业设计.docx
《定时闹钟设计毕业设计.docx》由会员分享,可在线阅读,更多相关《定时闹钟设计毕业设计.docx(34页珍藏版)》请在冰豆网上搜索。
定时闹钟设计毕业设计
河南工业职业技术学院
毕业设计报告
定时闹钟
姓名:
学号:
专业班级:
指导老师:
所在学院:
年月日
摘要
本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。
电子钟设计可采用数字电路实现,也可以采用单片机来完成。
数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。
设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。
采用四个开关来控制定时闹钟的工作状态,分别为:
A、设置时间和闹钟的小时;B、设置小时以及设置闹钟的开关;C、设置分钟和闹钟的分钟;D、设置完成退出。
课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真试验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。
设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。
显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。
也可以改蜂鸣器为继电器,通过控制继电器从而进一步扩展的来控制一些家电开关。
1概述………………………………………………………………………………3
2系统总体方案及硬件设计………………………………………………………4
2.1总体设计……………………………………………………………………4
2.2系统时钟电路设计…………………………………………………………4
2.3系统复位电路设计…………………………………………………………4
2.4闹钟指示电路设计…………………………………………………………5
2.5电子闹钟的显示电路设计…………………………………………………5
3软件设计
3.1概述…………………………………………………………………………6
3.2主模块的设计………………………………………………………………6
3.3基本显示模块设计…………………………………………………………7
3.4时间设定模块设计…………………………………………………………7
3.5闹钟功能的实现……………………………………………………………8
4Proteus软件仿真………………………………………………………………11
5课程设计体会……………………………………………………………………14
参考文献……………………………………………………………………………16
附1:
源程序代码…………………………………………………………………17
附2:
系统原理图…………………………………………………………………27
1概述
该电子钟是以单片机AT89C51为核心来完成的,在硬件电路中采用P0口作为6位LED数码管的驱动接口,这是由于P0口输出驱动电路工作处于开漏状态,它的驱动能力强,故只需外接上拉电阻便可以把LED数码管点亮。
因为共阴的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故该电路中的6位LED数码管均用共阴极的数码管。
在6位LED显示时,为了简化电路,降低成本,6个LED显示器共用一个8位的I/O,6位LED数码管的位选线分别由相应的P2.0~P2.5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。
在电路中还设有三个按键A,B和C用来进行定时,选时和调时的选择,他们分别与单片机的P1.0,P1.1,P1.2口相连接。
P3.7口与蜂鸣器相连接。
利用AT89C51单片机结合七段显示器完成的简易的定时闹铃时钟,干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、闹钟电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
译码显示电路将“时”、“分”、“秒”计数器的输出送到七段显示译码驱动器译码驱动,通过六个七段LED显示器显示出来。
闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。
通过设置现在的时间及显示闹铃设置时间,并在定时时间发出一阵声响,可以进—步扩充控制电器的启停等。
用单片机来设计数字钟,软件实现各种功能比较方便,但因软件的执行需要一定的时间,所以就会出现误差。
因此我进一步努力,通过对比实际的时钟,查找出误差的来源,并作出调整,使得误差尽可能减小,达到实际数字钟系统的允许误差范围。
在程序设计中,采用模块化的程序设计思想,对整个设计划分了若干个模块,先对各个模块分别进行设计,然后整合各个模块,进行仿真模拟,对出现的错误进行分析,然后找出问题的所在,改进程序,再仿真模拟,观察结果、分析结果,直至最终结果满足设置要求。
2系统总体方案及硬件设计
2.1总体设计
电子闹钟应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。
按键功能说明:
A,设置时间和闹钟的小时;B,设置小时以及设置闹钟的开关;C,设置分钟和闹钟的分钟;D;设置完成退出。
电子闹钟的系统框图如下所示:
图1电子闹钟的系统框图
电子闹钟的主电路指的是图1中虚线框内部分,主要涉及到CPU电路和按键按钮电路。
主机的设计具体地说有:
1)系统时钟电路设计;2)系统复位电路设计;3)按键与按钮电路设计;4)闹铃声指示电路设计。
2.2系统时钟电路设计
对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。
但由于原理图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。
实验表明,这2个电容元件对闹钟的走时误差有较大关系。
2.3系统复位电路的设计
智能系统一般应有手动或上电复位电路。
复位电路的实现通常有两种方式:
1)RC复位电路;2)专用µP监控电路。
前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。
对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。
本次课程设计采用了上电按钮电平复位电路。
2.4闹钟指示电路设计
闹铃指示可以有声或光两种形式。
本系统采用声音指示。
关键元件是蜂鸣器。
蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。
市场上的有源蜂鸣器分为3V、5V、6V等系列,以适应不同的应用需要。
闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。
其电路设计参见系统原理图。
2.5电子闹钟的显示电路设计
本次课程设计采用了6位数码管显示电路。
在6位LED显示时,为了简化电路,降低成本,采用动态显示的方式,6个LED显示器共用一个8位的I/O,6位LED数码管的位选线分别由相应的P2.0~P2.5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。
译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过6位LED七段显示器显示出来。
到达定时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现闹铃。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。
图26位数码管显示电路
3软件设计
3.1概述
软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。
基于软件的秒脉冲信号通常有延时法和定时中断法。
延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。
例如,设定某定时器每100ms中断1次,则10次的周期为1s。
这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。
本系统中所使用的晶振频率为12MHZ。
3.2主模块的设计
N
N
N
Y
N
延时
闹铃
判是否到闹铃时间
秒指示
设置闹铃时间
判设置闹铃时间否
判1秒到否
刷新时间
显示待机指示符
串口初始化
中断初始化
刷新时间
判时或分变化否
启动走时
有关变量初始化
定时0初始化
CPU系统初始化
主模块是系统软件的主框架。
结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。
它的合理与否关系到程序最终的功能的多少和性能的好坏。
本系统的主模块的程序框图如下图2所示:
Y
图3主模块的程序框图
3.3基本显示模块设计
基本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
程序流程如图3所示。
关显示以免显示抖动
通过串口将时分秒数据传入数码管
打开显示
图4程序流程图
3.4时间设定模块设计
时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。
即只涉及4个键完成了6位时间参数的设定。
软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。
去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。
“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。
其流程图如下图4所示:
图5时间设定流程图
3.5闹铃功能的实现
闹铃功能的实现涉及到两个方面:
闹铃时间设定和是否闹铃判别与相应处理。
闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。
闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。
当时十位、时个位、分十位、分个位中任一位发生改变(进位)时,就必须进行闹铃判别。
译码显示电路将“时”、“分”、“秒”计数器的输出送到七段显示译码驱动器译码驱动,通过六个七段LED显示器显示出来。
闹铃电路根据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器发声实现报时。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
其流程图如下所示:
图6闹铃功能流程图
虑到实用性,在该电子钟的设计中修改定时或调整时间时采用了闪烁,而且以定时20组闹钟。
在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。
在显示程序段中主要进行了闪烁的处理,采用定时器中断置标志位,再与位选相互结合的方法来控制调时或定时中的闪烁。
时,分,秒显示则是用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。
初始化之后,用中断方式对其计数,计数的同时采用了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标志位置数。
由于定义了定时闹钟组,在这里采用中断组次,每中断一次比较一组闹钟,避免了一次比较中断时间过长,影响下次中断时间。
显示之后查询闹铃标志位是否与前面所置数相等,若相等则响铃。
为了避免响铃影响显示,采用了每显示几屏以后在显示程序中出现脉冲,驱动喇叭,不会影响显示。
之后用查询方式对按键进行判断,若有键按下,则进行软件延时消抖,避免了抖动引起的干扰,执行相应的定时,选时或调时程序段。
对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。
4.Proteus软件仿真
本次课程设计所采用的程序调试软件为wave6000集成调试软件,所采用的仿真软件为protus6professional软件。
图7protus6professional软件启动界面
本次试验的效果图如下所示:
图8试验的效果图
性能及误差分析
该电子钟有三个按键:
A,B和C键。
按A键进行校时,可以分别对时及分进行单独校时,使其校正到标准时间,校时时需要校正哪一位哪一位就闪烁。
按B键是对闪烁位进行加一或返回的操作。
按C键调整定时时间和定时组数,需要调整哪一位哪一位就闪烁,该电子钟最多可定时20组闹钟。
经测试该电子钟在一天的累计误差约为0.1秒。
该电子钟的误差主要由晶振自身的误差所造成,晶振的误差约为0.0001~0.000001。
在软件的编程过程中所产生的误差比较小,在重装初值的过程中大概需要约8个机器周期,但在程序开始对定时器赋初值时,多加了8个机器周期,减小了这方面的误差。
另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累计误差很小,可以忽略。
结构化软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。
软件调试可以采取离线调试和在线调试两种方式。
前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。
本次课设,采用wave6000集成调试软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。
仿真部分采用protus6professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。
首先打开protus6professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课设的要求再修改程序,再运行查,直到满足要求。
5课程设计体会
近几年,单片机在各个领域得到广泛的应用。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
在它问世之前,自动控制设备不能被广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。
在第一台微处理器成功研制不久,第一个单片机就问世了。
因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。
今天,单片机成为了解决低复杂度,中等复杂度控制问题的传统选择。
我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。
这一次的单片机课程设计,使我考虑了很多的东西。
在刚开始的时候,对于很多东西都不明白,又去查书复习了一遍才开始动手去做。
通过一个礼拜的学习和实践,使我对所学的知识进行了系统的复习和巩固,在以前的学习中不够清晰的概念得到了更好的理解,对于以前没有掌握的东西也得到了进一步的学习。
同时,通过课设,培养和锻炼了我的动手能力,这一点非常重要,不仅对我以后的学习有帮助,还可以为以后的工作打下一定的基础。
通过这段时间的学习,使我真正了解到了理论和实际之间的差别,并且第一次接触到了实际中的一些问题,通过和同学交流,加强了自身的分析问题、解决问题的能力。
与此同时,我也发现了自己在某些方面的不足,这是我以后要加以改进的方面。
这一次的课设对我的帮助很大,使我真正的认识到了理论与实际的区别,通过这次亲自动手设计并仿真,使我了解到了自己在平时学习中的很多不足之处,在做设计的时候碰到了很多困难,但是这些困难最后都通过查找资料和向同学请求帮助得到了解决,通过这次动手还使自己更加熟悉Proteus的使用,了解了这个软件的使用特点及其优点。
发现了以前学习中的一些遗忘的东西,并去重新学习。
发现问题并解决难题这一过程让学习单片机变的更有意思,这将成为我的学习目标和动力,更进一步的挖掘自己的能力,使自己获得进一步的提高。
这次课程设计让我对学习单片机的了解深入了很多,我会不断的通过与老师、同学交流一起查找资料等方式来更加深入的学习这门课程。
并且告戒自己要时常复习以前学习的资料,以避免学着新的忘着旧的这种事情重新发生。
在以后的学习过程中要更加努力,不断的去发现问题并去解决问题。
让自己在单片机这门课程中得到进一步的提高
参考文献
[1]余发山单片机原理及应用技术,徐州:
中国矿业大学出版社,2003
[2]杨刚,周群.电子系统设计与实践.电子工业出版社.2004:
18-23341-347118-122
[3]何立民.单片机高级教程(应用与设计).北京:
北京航空航天大学出版社,2000年.53-98
[4]涂时亮,张友德.单片微机控制技术.清华大学出版社.1994:
86-87146-147
[5]《融会贯通Protel99电路设计》弘道工作室北京人民交通出版设,2000.
[6]《单片机原理及接口技术实验》朱定华北京北方交通大学出版社2002.11
附1:
源程序代码
K1EQUP1.0;在程序开始前定义变量
K2EQUP1.1
K3EQUP1.2
K4EQUP1.3
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME
ORG0100H
MAIN:
MOVSP,#50H
MOV20H,#00H;时间BINSECOND
MOV21H,#00H;BINMINUTE
MOV22H,#00H;BINHOUR
MOV23H,#01H;闹铃BINMINUTE
MOV24H,#01H;BINHOUR
MOV25H,#00H;定义一个标志位
MOV30H,#00H;时间BCDSECOND
MOV31H,#00H;
MOV32H,#00H;BCDMINUTE
MOV33H,#00H;
MOV34H,#00H;BCDHOUR
MOV35H,#00H;
MOV36H,#01H;闹铃BCDMINUTE
MOV37H,#00H;
MOV38H,#01H;BCDHOUR
MOV39H,#00H;
MOVTMOD,#01H;16位计数器T0,方式1
MOVTH0,#03CH;赋初值
MOVTL0,#0B0H
MOVIE,#10000111B;开中断T0,EA=1
SETBTR0;T0启动计数
MOVR2,#14H;计数器
MOVP2,#0FFH
LOOP:
LCALLTIMEPRO;调用现在时间与闹铃时间比较程序
LCALLDISPLAY1;调用现在时间显示子程序
JBK1,M1;判断按键是否按下
LCALLXIAOZHEN1;调用消抖程序
MOVC,25H.0
JCA1
A1:
CLR25H.0
LCALLSETTIME;调用设置现在时间子程序
LJMPLOOP
M1:
JBK2,M2
LCALLXIAOZHEN2
MOVC,25H.0
JCA2
A2:
CLR25H.0
LCALLSETATIME;调用设置闹钟的程序
LJMPLOOP
M2:
JBK4,M3
A3:
LCALLXIAOZHEN3
MOVC,25H.0
JCA4
A4:
CLR25H.0
M3:
LJMPLOOP
SETTIME:
L0:
LCALLDISPLAY1
JBK2,L1
LCALLXIAOZHEN4
MOVC,25H.0
JCA5
A5:
CLR25H.0
INC22H
MOVA,22H
CJNEA,#18H,GO12
MOV22H,#00H
MOV34H,#00H
MOV35H,#00H
LJMPL0
L1:
JBK3,L2
LCALLXIAOZHEN5
MOVC,25H.0
JCA6
A6:
CLR25H.0
INC21H
MOVA,21H
CJNEA,#3CH,GO11
MOV21H,#00H
MOV32H,#00H
MOV33H,#00H
LJMPL0
GO11:
MOVB,#0AH
DIVAB
MOV32H,B
MOV33H,A
LJMPL0
GO12:
MOVB,#0AH
DIVAB
MOV34H,B
MOV35H,A
LJMPL0
L2:
JBK4,L0
LCALLXIAOZHEN3
MOVC,25H.0
JCAX
AX:
CLR25H.0
RET
SETATIME:
LCALLDISPLAY2;调用闹钟设置,闹铃响时的显示程序
N0:
LCALLDISPLAY2
JBK3,N1
LCALLXIAOZHEN6
MOVC,25H.0
JCA7
A7:
CLR25H.0
INC24H
MOVA,24H
CJNEA,#24,GO22
MOV24H,#00H
MOV38H,#00H
MOV39H,#00H
LJMPN0
N1:
JBK1,N2
LCALLXI