基于单片机的定时闹钟设计.docx
- 文档编号:17688282
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:31
- 大小:805.01KB
基于单片机的定时闹钟设计.docx
《基于单片机的定时闹钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的定时闹钟设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于单片机的定时闹钟设计
基于单片机的定时闹钟设计
一设计题目
基于单片机的定时闹钟
二设计要求
1、能显示时时-分分-秒秒。
2、能够设定定时时间、修改定时时间。
3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。
三作用与目的
以单片机为核心的数字时钟是很有社会意义和社会价值的。
钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等功能
数字闹钟通过数字电路实现时、分、秒。
数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
多功能数字钟的应用非常普遍。
由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
输出设备显示器可以用液晶显示技术和数码管来显示技术。
本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”、“分”、“秒”使其具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
四设备及软件
1.AT89C51单片机
在本电子闹钟设计中就是采用利用我们熟悉的AT89C51单片机为主控芯片。
AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。
其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128个字节。
89C51单片机有4个8位的并行I/O口:
P0口,P1口,P2口和P3口。
各个接口均由接口锁存器,输出驱动器,和输入缓冲器组成。
P1口是唯一的单功能口,仅能用作通用的数据输入/输出口。
P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。
在需要外部程序存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。
P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号.它的引脚图如图4.1所示:
2.Proteus仿真软件
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
3.Keil软件
Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。
Keil公司由两家私人公司联合运营,分别是德国慕尼黑的KeilElektronikGmbH和美国德克萨斯的KeilSoftwareInc。
Keil公司制造和销售种类广泛的开发工具,包括ANSIC编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-timekernel)。
有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。
其KeilC51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。
五系统设计方案
1电路的总体原理框图
2工作原理
当给电路足够的电源时,电路开始正常初始化,此时显示“00:
00:
00”,若不进行时间调整和定时,时钟将正常计时下去。
若按下按键1,由于按下次数的不同,出现光标闪烁的位置不同,即可进行时间的时分秒的调整和定时时间的时分秒的调整,按键2和3分别是进行时间的加和减,若确定好时间,时钟将正常运行,到达定时时间后蜂鸣器将会响一段时间后停止。
如果按复位键,时钟将重新初始化,需要重新定制时间。
如果不做任何改动,到下一个定时的时间,时钟将会继续鸣叫
六系统硬件设计
1.系统总体设计
电子闹钟应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。
按键功能说明:
A,设置时间和闹钟的小时;B,设置小时以及设置闹钟的开关;C,设置分钟和闹钟的分钟;D;设置完成退出。
电子闹钟的系统框图如下所示:
电子闹钟的主电路指的是图1中虚线框内部分,主要涉及到CPU电路和按键按钮电路。
主机的设计具体地说有:
1)系统时钟电路设计;2)系统复位电路设计;3)按键与按钮电路设计;4)闹铃声指示电路设计。
2.系统时钟电路设计
对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。
但由于原理图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。
实验表明,这2个电容元件对闹钟的走时误差有较大关系。
3.系统复位电路的设计
智能系统一般应有手动或上电复位电路。
复位电路的实现通常有两种方式:
1)RC复位电路;2)专用µP监控电路。
前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。
对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。
本次课程设计采用了上电按钮电平复位电路。
4.闹钟指示电路设计
闹铃指示可以有声或光两种形式。
本系统采用声音指示。
关键元件是蜂鸣器。
蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。
市场上的有源蜂鸣器分为3V、5V、6V等系列,以适应不同的应用需要。
闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。
其电路设计参见系统原理图。
5.电子闹钟的显示电路设计
本次课程设计采用了6位数码管显示电路。
在6位LED显示时,为了简化电路,降低成本,采用动态显示的方式,6个LED显示器共用一个8位的I/O,6位LED数码管的位选线分别由相应的P2.0~P2.5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。
译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过6位LED七段显示器显示出来。
到达定时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现闹铃。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。
七系统软件设计
软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。
基于软件的秒脉冲信号通常有延时法和定时中断法。
延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。
例如,设定某定时器每100ms中断1次,则10次的周期为1s。
这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。
本系统中所使用的晶振频率为12MHZ。
1.主模块的设计
主模块是系统软件的主框架。
结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。
它的合理与否关系到程序最终的功能的多少和性能的好坏。
本系统的主模块的程序框图如下图4所示:
2.基本显示模块设计
基本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
程序流程如图5所示。
3.时间设定模块设计
时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。
即只涉及4个键完成了6位时间参数的设定。
软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。
去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。
“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能
其流程图如下图6所示:
4.闹铃功能的实现
闹铃功能的实现涉及到两个方面:
闹铃时间设定和是否闹铃判别与相应处理。
闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。
闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。
当时十位、时个位、分十位、分个位中任一位发生改变(进位)时,就必须进行闹铃判别。
译码显示电路将“时”、“分”、“秒”计数器的输出送到七段显示译码驱动器译码驱动,通过六个七段LED显示器显示出来。
闹铃电路根据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器发声实现报时。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
其流程图如图7所示:
虑到实用性,在该电子钟的设计中修改定时或调整时间时采用了闪烁,而且以定时20组闹钟。
在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。
在显示程序段中主要进行了闪烁的处理,采用定时器中断置标志位,再与位选相互结合的方法来控制调时或定时中的闪烁。
时,分,秒显示则是用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。
初始化之后,用中断方式对其计数,计数的同时采用了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标志位置数。
由于定义了定时闹钟组,在这里采用中断组次,每中断一次比较一组闹钟,避免了一次比较中断时间过长,影响下次中断时间。
显示之后查询闹铃标志位是否与前面所置数相等,若相等则响铃。
为了避免响铃影响显示,采用了每显示几屏以后在显示程序中出现脉冲,驱动喇叭,不会影响显示。
之后用查询方式对按键进行判断,若有键按下,则进行软件延时消抖,避免了抖动引起的干扰,执行相应的定时,选时或调时程序段。
对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。
八Proteus软件仿真
本次课程设计所采用的程序调试软件为wave6000集成调试软件,所采用的仿真软件为protus6professional软件。
1.本次试验的效果图
如下所示:
2.性能及误差分析:
该电子钟有三个按键:
A,B和C键。
按A键进行校时,可以分别对时及分进行单独校时,使其校正到标准时间,校时时需要校正哪一位哪一位就闪烁。
按B键是对闪烁位进行加一或返回的操作。
按C键调整定时时间和定时组数,需要调整哪一位哪一位就闪烁,该电子钟最多可定时20组闹钟。
经测试该电子钟在一天的累计误差约为0.1秒。
该电子钟的误差主要由晶振自身的误差所造成,晶振的误差约为0.0001~0.000001。
在软件的编程过程中所产生的误差比较小,在重装初值的过程中大概需要约8个机器周期,但在程序开始对定时器赋初值时,多加了8个机器周期,减小了这方面的误差。
另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累计误差很小,可以忽略。
结构化软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。
软件调试可以采取离线调试和在线调试两种方式。
前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。
本次课设,采用wave6000集成调试软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。
仿真部分采用protus6professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。
首先打开protus6professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课设的要求再修改程序,再运行查,直到满足要求。
九设计中的问题及解决方法
在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;
1.做实物时无法驱动数码管显示,后来了解到可以加锁存器,如74LS253,74LS573等等,还可以加三极管用来加大电流。
当然如果换成液晶显示屏的话就不需要考虑驱动不了的问题了。
2.烧程序时没发烧进去,需要改变最高和最低波特率,才能按照步骤把程序烧进去。
3.仿真时没问题的电路,在做好实物时发现无法运行。
原因可能是程序出现问题,或者在连实物时线路连接错误等等都有可能。
这是很难的一部分,需要查找出原因。
在做实物的过程中我进行的很多检查,有很多连接错误,最终又重新焊接的。
4.复位电路在实物中可以运行,但是在仿真中不能正常运行。
目前还未找到原因。
十设计心得
这次设计中遇到了很多问题,例如刚开始我在在仿真时程序出现了每次按按钮时总是显示测量时需要关闭仿真的字样,试了很多方法都没有找到原因,最后才知道是因为按钮太近的缘故。
很多类似的经历让我明白:
1.在设计程序之前,务必要对所学单片机课程的内容有一个系统的了解,知道单片机片内片外的内容及其功能。
2.设计程序关键要有一个清晰的思路和一个完整的软件流程图。
模块化的设计思想在程序设计中的作用是重大的,它可以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在编写一个程序时感觉到无从下手。
3.在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路。
程序刚开始编好时,一般情况下会存在很多错误,要不断地修改,不断的改进才能达到预期的目的,编写程序的时间并不是很长,主要是花很多时间去修改程序。
4.要养成注释程序的好习惯,让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写科研报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,一切的辛苦和艰难都是值得的。
参考文献
[1]康年光.电子技术基础(数字部分)[M].高等教育出版社.2005.07
[2]曾屹.单片机原理与应用(第2版)[M].长沙:
中南大学出版社,2009年5月.
[4]刘乐喜.微机计算机接口技术及应用[M].华中科技大学出版社.2005.08
[5]杨刚,周群.电子系统设计与实践.电子工业出版社.2004:
18-23341-347118-122
[6]李群芳,肖看.单片机原理、接口及应用—嵌入式系统技术基础.清华大学出版社.2005.03
[7]张毅刚,MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004
[8]张淑清,姜万录等,单片微型计算机接口技术及应用[M].国防工业出版社,2003
[9]吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M].清华大学出版社,2001
致谢
这次课程设计能够得以顺利完成,是所有曾经指导过我的老师,帮助过我的同学,一直支持着我的家人对我的教诲、帮助和鼓励的结果。
我要在这里对他们表示深深的谢意!
首先,要特别感谢我的指导老师——潘湘高老师。
潘老师在我课程设计的过程中,给我提供了极大的帮助和指导。
潘老师给我提供了许多宝贵建议。
老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,朴实无华、平易近人的人格魅力对我影响深远。
不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。
感谢潘老师对我的报告进行认真的评阅和认真的修改。
其次,感谢我的父母亲,你们是我力量的源泉,只要有你们,不管面对什么样的困难,我都不会害怕,谢谢你们对我的支持与鼓励!
第三,要感谢所有曾经给我们班任课的老师,老师们教会我的不仅仅是专业知识,更多的是对待学习、对待生活的态度。
再次,感谢我的室友及其他好友,因为有你们的帮助,我的论文才能得以顺利完成。
谢谢你们在我不懂的时候给我的提点。
在作图和写课程设计报告的时候每当我遇到什么不会的我都是去找陈海东同学,而你每次都会给我满意的答案,我课程设计的完成绝对有你的一份功劳,谢谢你!
感谢曹福明同学在我使用proteus和Kile软件仿真遇到困难时给我的帮助。
在此,我再一次真诚地向帮助过我的老师和同学表示感谢!
附录1系统整体结构电路原理图
附录2程序清单
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
LCALLXIAOZHEN7
MOVC,25H.0
JCA8
A8:
CLR25H.0
INC23H
MOVA,23H
CJNEA,#60,GO21
MOV23H,#00H
MOV36H,#00H
MOV37H,#00H
LJMPN0
GO21:
MOVB,#0AH
DIVAB
MOV36H,B
MOV37H,A
LJMPN0
GO22:
MOVB,#0AH
DIVAB
MOV38H,B
MOV39H,A
LJMPN0
N2:
JBK4,N0
LCALLXIAOZHEN3
MOVC,25H.0
JCA9
A9:
CLR25H.0
RET
TIMEPRO:
MOVA,21H
MOVB,23H
CJNEA,B,BK
MOVA,22H
MOVB,24H
CJNEA,B,BK
SETB25H.0
MOVC,25H.0
JCXX
XX:
LCALLTIMEOUT
BK:
RET
TIMEOUT:
X1:
LCALLBZ
LCALLDISPLAY2
CLR25H.0
JBK4,X1
RET
BZ:
CLRP3.7
MOVR7,#250
T2:
MOVR6,#124
T3:
DJNZR6,T3
DJNZR7,T2
SETBP3.7
JBK4,XY
L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 定时 闹钟 设计