数字电子时钟.docx
《数字电子时钟.docx》由会员分享,可在线阅读,更多相关《数字电子时钟.docx(18页珍藏版)》请在冰豆网上搜索。
数字电子时钟
数字电子时钟
前言
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。
该电子时钟由89C51,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。
应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
本设计主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89S51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
一、设计目的及性能
1.1设计目的
(1)掌握51系列内部定时/计数器的原理和基本应用;
(2)掌握使用单片机处理复杂逻辑的方法;
(3)掌握多位数码管动态显示的方法;
(4)掌握独立式(和矩阵)键盘的编程方法;
(5)掌握利用汇编语言编写单片机系统的应用软件的方法;
(6)巩固,加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(7)培养针对课题需要,选择和查阅有关手册,图表及文献资料的自学能力,提高组成系统,编程,调试的动手能力;
(8)熟悉单片机用系统开发,研制的过程,软硬件设计方法,内容及步骤.
(9)了解数字钟的组成及工作原理.
1.2设计性能
(1)用51单片机的定时/计数器TMR0产生一秒的定时时间,作为秒计数时间;
(2)当一秒产生时,秒计数加1;
(3)开机时,显示00.00.00,并开始连续计时;
(4)计时满23.29.59时,返回00.00.00重新开始计时;
(5)在以上设计基础上,在单片机的I/O口上分别接入四个按键:
K0—控制“秒”的调整,每按一次加1秒;K1—控制“分”的调整,每按一次加1分;K2—控制“时”的调整,每按一次加1小时;K3—时间复位按键。
二、项目设计方案
2.1实现时钟计时的基本方法
用AT89C51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1开机时。
显示00-00-00的时间,开始计时;计时满23-59-59时,返回00-00-00重新计时
AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完成。
定时/计数器何时工作也是通过TCON特殊功能寄存器来设置的。
在此设计中,选择16位定时工作方式。
对于T0来说,系统时钟为12MHz,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,必须通过软件来处理这个问题,假设取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。
对于这20次计数,就可以采用软件的方法来统计了。
设定TMOD=01H,设置定时/计数器0工作在方式1。
给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出:
N=t/Ty=(50×10^-3)/(1×10^-6)=50000
X=65536-50000=15536=3CB0H
即TH0=3CH,TL0=0B0H.
这样,当定时/计数器0计满50ms时,产生一个中断,我们可以在中断服务程序中,对中断次数加以统计,以实现数字钟的逻辑功能。
2.2数字钟的时间显示
显示器的时间显示采用动态扫描电路驱动形式,以达到简化电路的目的。
但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。
可采用74LS244或者晶体管;其中74LS244是用来驱动段选码,晶体管是驱动位选码。
电子钟的时钟时间在六位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共8个单元。
LED6
LED5
LED4
LED3
LED2
LED1
35H
34H
33H
32H
31H
30H
小时
分钟
秒
三、系统的硬件设计
3.1单片机的功能介绍
AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示。
图3.1单片机AT89C52引脚功能简化图
3.2时钟振荡电路
时钟振荡器即时钟脉冲发生器,产生整个芯片内部各功能电路正常操作所需的时钟脉冲和定时信号。
最常用的一种电路连接方法是,在XTAL1和XTAL2这2只引脚之间外接一只晶体振荡器XTAL和2只电容C1和C2到地(如图5-3所示),与片内电路共同构成一个多谐振荡器电路。
其振荡频率取决于外接石英晶体振荡器元件XTAL的固有频率,常选取12MHZ或6MHZ的晶振。
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)特别注意:
对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行。
图3.2时钟振荡电路图
3.3键盘控制电路
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;
在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:
独立键盘和行列式(又称为矩阵式)键盘。
下图3.3是非编码键盘式控制电路。
图3.3键盘控制电路
按键在闭合和断开时,触点会存在抖动现象为使CPU能正确地读出端口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:
硬件方法和软件方法。
单片机中常用软件法,软件法其实很简单,就是在单片机获得端口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或更长一些时间后再次检测端口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。
而在检测到按键释放后(端口为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。
不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。
四、系统的软件设计
4.1系统软件设计流程图
这次的数字钟设计用到很多子程序,最好将它们分为若干个相对独立且相互联系的部分。
主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。
以下是数字钟工作的流程图。
图4.1数字钟工作流程图
4.2系统中断流程图
单片机一般允许有多个中断源,当几个中断源同时向CPU请求中断时,就存在CPU优先响应哪一个中断请求源的问题(优先级问题),一般根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,于是便规定每一个中断源都有一个中断优先级别,并且CPU总是响应级别最高的中断请求。
当CPU正在处理一个中断源请求的时候,又发生了另一个优先级比它高的中断源请求,如果CPU能够暂时中止对原来中断处理程序的执行,转而去处理优先级更高的中断源请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套。
以下图是定时器中断服务子程序流程图
图4.2定时器中断服务子程序流程图
4.3子程序说明
4.3.1按键扫描
按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就检测复位键是否按下,复位健按键如果按下,时钟就复位。
如果没有按下,把时间显示出来。
4.3.2数码管动态扫描
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留特性,使人的感觉好像各位数码管同时都在显示。
五、数字钟元件清单和软件介绍
5.1数字钟元件清单
列元件清单的主要目的是为了更好地理论联系实际,为了硬件设计和仿真起到了不可磨灭的作用,做到心中有数。
以下是数字钟的元件清单
元件名称
规格型号
数量(个)
单片机
AT80C51
1
电阻
RES/10K,RES/220
5,8
晶振
11.0592MHz
1
电容
30pF/220uf
2,1
按键
BUTTON
4
排阻
RESPACK-8/10K
1
锁存器
74LS245
1
液晶显示
7SEG-MPX6-CC
1
二极管
1N4148
4
表5.1电子钟元器件清单
5.2软件调试
打开程序调试软件keiluVision3,在里面新建一个工程,接着新建文件,编写相应程序。
编写好的各个程序进行编译与连接。
但若是在该过程中,看见我们编好的程序有错误,那么根据他相应的提示来修改错误,直到该程序能够正确编译为止。
能够正常编译的程序说明没有什么问题了,此时我们在点击相关栏目,让它生成我们在硬件仿真时所需要的.ASM文件。
5.3硬件调试
打开Proteus仿真软件,按照方案所选的电路元件来设计整体电路,先把芯片按一定的位置放好,然后按相应的对象进行连接,连接时需仔细,以免调试时发生错误。
做好之后把编程所生成的。
ASM文件加载到AT89C51中,运行仿真软件,查看运行效果。
如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。
六、电路设计运行图
图6.1程序无错
图6.2程序运行开始,显示00:
00:
00
图6.3时钟开始工作在00:
02:
04
图6.4通过调节按钮调到23:
29:
30
通过调节按钮(图3.3)可以对时间进行调节,按钮从上到下分别是对秒针位,分钟位,时钟位进行调节,每按一次按钮,相应位的数加1。
七、源程序
s_setbitp1.0%设定秒钟按钮
m_setbitp1.1%设定分钟按钮
h_setbitp1.2%设定时钟按钮
secondequ30h
minuteequ31h
hourequ32h
tcntequ34h%上面四句是代码代替
org0000h%初始地址
sjmpstart
org000bh
ljmpint_t0
start:
movdptr,#table%将要显示的数全部送入数据指针钟
movhour,#0
movminute,#0
movsecond,#0%时分秒全部清零
movtcnt,#0
movtmod,#01h
movth0,#3ch
movtl0,#0b0h
movie,#82h
setbtr0
a1:
lcalldisplay%调用显示子程序
jnbs_set,s1
jnbm_set,s2
jnbh_set,s3%上面三句判断按钮是否按下,没有按下继续增加。
ljmpa1
s1:
lcalldelay
jbs_set,a1
incsecond%秒钟加1
mova,second
cjnea,#60,j0%判断是否到60秒
movsecond,#0%秒钟清零
ljmpk1%分位加1
s2:
lcalldelay
jbm_set,a1
k1:
incminute%加分
mova,minute
cjnea,#60,j1%判断是否到60分
movminute,#0%分为清零
ljmpk2%时位加1
s3:
lcalldelay
jbh_set,a1
k2:
inchour%加时
mova,hour
cjnea,#24,j2%比较是否到24小时
movhour,#0
movminute,#0
movsecond,#0
ljmpa1
j0:
jbs_set,a1%下面是按钮和各种子程序部分
lcalldisplay
sjmpj0
j1:
jbm_set,a1
lcalldisplay
sjmpj1
j2:
jbh_set,a1
lcalldisplay
sjmpj2
int_t0:
movth0,#3ch
movtl0,#0b0h
inctcnt
mova,tcnt
cjnea,#20,retune
incsecond
movtcnt,#0
mova,second
cjnea,#60,retune
incminute
movsecond,#0
mova,minute
cjnea,#60,retune
inchour
movminute,#0
mova,hour
cjnea,#24,retune
movhour,#0
movminute,#0
movsecond,#0
movtcnt,#0
retune:
reti
display:
mova,second
movb,#10
divab
clrp3.4
movca,@a+dptr
movp0,a
lcalldelay
setbp3.4
mova,b
clrp3.5
movca,@a+dptr
movp0,a
lcalldelay
setbp3.5
MOVA,MINUTE
MOVB,#10
divab
clrp3.2
movca,@a+dptr
movp0,a
lcalldelay
setbp3.2
mova,b
clrp3.3
movca,@a+dptr
movp0,a
lcalldelay
setbp3.3
mova,hour
movb,#10
divab
clrp3.0
movca,@a+dptr
movp0,a
lcalldelay
setbp3.0
mova,b
clrp3.1
movca,@a+dptr
movp0,a
lcalldelay
setbp3.1
ret
table:
db3fh,06h,5bh,4fh,66h
db6dh,7dh,07h,7fh,6fh
delay:
movr6,#10
d1:
movr7,#250
djnzr7,$
djnzr6,d1
ret
end
8、设计总结
通过本次仿真的设计,我遇到很多自己不理解的问题及书本上或是我以前没有看见过的知识点。
在面对这些问题时,我首先采用的是上网搜寻的方法,在根据别人的提示,想想自己的问题出在哪里,该怎么解决。
当我还是无法想到解决的办法时,我就带着自己的问题到图书馆查阅资料或找同学互相交流,如果我的问题还是没有解决,我就带着问题去问我们的指导老师,让他帮我解决。
采用这样的方法,我的很多问题都迎刃而解了!
其次,我不但努力解决自己遇到的问题,还帮助同学解决他们遇到的问题。
这样一来,我的知识得到了进一步的巩固,同学的问题也得到了相应的解决,我达到了一举双收的效果,我为此而感到高兴。
在这次课程设计的调试过程中,我遇到很多问题,如:
由于跳转指令出错,导致整个程序在运行时进入死循环,修改时没有根据流程盲目查找原因浪费许多时间,又由于考虑不周,由于能力和时间问题,但在查找资料的过程中学到了许多,同时在协作过程中终于解决了。
让我觉得仿真的最大成果是:
知道了将理论用到实际当中时,会遇到很多的问题。
需要我们一个一个地把它解决,根据自己所学的专业基础知识分析具体原因,具体问题具体分析,再逐一把它克服掉。
知道理论与实际的差距,所以以后要多加强实际动手的能力。
因此,学习就应该采取理论与实践相结合的方式,理论的问题,也就是实践性的课题。
这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
最后,我相信以后不管遇到什么困难和挫折,不要畏惧,要敢于向前探索。
这样问题才能迎刃而解。
九参考资料
江力主编《单片机原理与应用技术》清华大学出版社2011年
郑阿奇主编《Protel实用教程》电子工业出版社2010年
张志良主编《单片机原理与控制技术》第二版机械工程出版社2013年