单片机简易时钟课程设计.docx
《单片机简易时钟课程设计.docx》由会员分享,可在线阅读,更多相关《单片机简易时钟课程设计.docx(34页珍藏版)》请在冰点文库上搜索。
单片机简易时钟课程设计
1.概论..............................................................1
2.整体设计思路......................................................2
2.1硬件各部分所能完成的功能....................................3
2.2系统工作原理................................................4
2.3时钟各功能分析及图解........................................4
2.4.1电路各功能图解分析....................................4
2.4.2电路功能使用说明......................................7
3.软件设计思路.....................................................8
3.1主程序模块..................................................8
3.2数码管动态扫描模块..........................................9
3.3当前时间计时模块............................................9
3.4闹钟输入输出模块...........................................10
3.5当前时间调整模块...........................................12
3.6复位模块...................................................13
4.系统的调试和性能分析.............................................14
4.1系统的调试方法.............................................14
4.1.1输入按键的调试.......................................14
4.1.2复位电路的调试.......................................14
4.1.3显示电路的调试.......................................14
4.1.4整个系统的联调.......................................14
4.2心得体会.......................................................15
参考文献...........................................................15
附录...............................................................16
附录A系统原理图.............................................16
附录B程序源代码..............................................17
电气信息学院课程设计评分表.........................................28
1.概论
单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。
如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。
数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。
不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
而且是控制的核心部分。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。
而且向着精确、低功耗、多功能发展。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
另外,程序较为简洁,具有可靠性和较好的可读性。
如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。
数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。
这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,便于功能扩充,精确度高等特点。
1
2.整体设计思路
这部分主要介绍工作安排和整体设计的思想。
工作过程规划如下:
图2.1整体设计思路
2
针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[7]。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为显示程序、调时显示运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
本电子钟设计主要是依照图2.1中的流程做出来的,时间分配比较均匀。
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:
依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和液晶电路等。
第三部分是软件部分:
先学习理解C语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:
设计好电路后进行画图,包括电路图和仿真图的绘制。
第五部分是软件仿真部分:
软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。
第六部分是硬件实现部分:
连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。
2.1硬件各部分所能完成的功能
(1)单片机发送的信号通过程序控制最终在数码管上显示出来。
(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
(3)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。
(4)单片机通过控制闹铃电路来完成定时闹钟的功能。
(5)单片机通过程序对闹铃信号灯进行控制,可方便我们对闹铃的开关以及是否在闹铃进行观察。
(6)由于要设置定时功能,所以配置了对闹钟设置的键盘。
3
2.2系统工作原理
设计的电路主要由四模块构成:
时间显示电路、信号显示电路、键盘控制电路、外设闹铃电路以及核心控制电路
详细电路功能图如图2-2:
图2-2详细电路功能图
本设计采用汇编语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。
时、分、秒的计数结果经过数据处理可直接送显示器显示。
设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。
2.3时钟各功能分析及图解
2.4.1电路各功能图解分析
(1)时钟运行图
仿真开始运行时,或按下K7键时,时钟从00:
00:
00开始运行,其中按下K14
键可进入当前时间调节,K2和K3分别负责加一和减一,K5键为确认键。
时钟运行图如图2-3所示:
图2-3时钟运行图
(2)闹钟开关指示图
当按下K4键后,可进入闹钟设时控制,设置完后按确认,按下K6,即开闹钟,信号显示区得开/关闹钟信号灯点亮,表示当时间到达闹钟的时间时,闹铃响;再次按下闹铃,为关闹铃,此时的信号显示区得开/关闹钟信号灯熄灭。
如下图2-4:
图2-4闹钟开关指示图
5
(3)闹铃运行图
当时间到达闹钟设置的时间时,蜂鸣器会按每秒两次的频率响,闹钟指示灯也会闪烁。
如下图2-5:
图2-5闹铃运行图
该数字钟是用一片AT89C51单片机通过编程去驱动8个数码管实现的。
通过7个开关控制,从上到下7个开关K1-K7的功能分别为:
K1:
设置当前时间时/分/秒
K2:
加一按键
K3:
减一按键
K4:
设置闹钟时间时/分/秒
K5:
确认/关闭闹铃
K6:
开/关闹钟
K7:
复位
控制键分别与P1.0~P1.6口连接,通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.
6
从P3.6输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,P3.7接一个蜂鸣器,若有乐曲可以去驱动扬声器实现。
2.4.2电路功能使用说明
(1)各个控制键的功能:
可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。
(2)AT89C51单片机,通过编写程序对数码显示进行控制。
(3)八个7段数码管显示时钟信号。
7
3.软件设计思路
根据设计的要求与内容,我们将该软件设计成七个模块,他们包括:
主程序、数码管动态扫描模块、当前时间计时模块、闹钟输入输出模块、当前时间调整模块、数制转换模块以及复位模块。
3.1主程序模块
主程序模块是单片机最先编译运行的模块,所以在这个模块里,我们要设置主程序和各个中断服务程序的入口地址、各种初始化以及开关扫描等。
MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为各中断的入口地址。
所以,编程时应在0000H处写一条跳转指令。
当CPU接受到中断请求信号并予以相应后,CPU把当前的PC内容压入栈中进行保护,然后转入相应的只能中断服务程序入口处执行。
一般应在相应的中断服务程序入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的起始地址进行编程。
初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。
下图3-1是我们设计该主程序模块的程序框图。
图3-1主程序设计框图
8
3.2数码管动态扫描模块
在数码管动态扫描模块里,包含了两个子程序,一个是显示子程序,另一个是显示延时1MS子程序。
其中显示延时1MS子程序是用软件延时的方法进行的,过程较简单,这里就不画出它的程序框图,下图3-2为显示子程序的程序框图。
图3-2显示子程序
3.3当前时间计时模块
本软件中的当前时间计时模块实际上是T0定时器的中断服务程序,我们将T0定时器工作在方式一中,并让它每50MS产生一次中断。
每产生一次中断,进入中断服务程序后,T0定时器重新转载初始值。
MS50(它是对50MS中断次数统计的存储单元地址标号)就会自加一,接着对MS50进行判断,如果MS50没有到达20次(即一秒的时间),就返回到主程序。
如果到达20次,MS50将清零,并将MIAO(MIAO是对秒进行计数的存储单元地址标号)将自加一。
接着判断MIAO是否到达60次,没到就返回,到了60秒,MIAO将被清零,FEN(FEN是对分进行计数的存储单元地址标号)自加一。
再判断FEN,过程与判断MIAO相识,也是到达60分就进1时并对分清零,时的9
寄存器地址标号是SHI,因为一天只有24小时,所以,如果SHI计数到了24时,它将对SHI、FEN、MIAO同时清零。
下图3-3为该中断服务的程序框图
图3-3T0中断服务程序
3.4闹钟输入输出模块
由于闹钟输入输出模块要实现的功能较多,所以它是我们该软件中设计耗时最长的一个模块,也是最复杂的一个模块。
而我们对其采取再分子模块策略,我们对该模块划分了6个子模块:
设置闹钟时间子模块、闹钟开关子模块、检查闹钟子模块、闹钟指示灯亮子模块、闹钟转换子模块、蜂鸣器子模块。
下面将逐个说明各个子模块的功能。
设置闹钟时间子模块:
该模块实现的功能是,当设置闹钟时间的键盘被按下时,则进入该子模块,通过对各个指定按键的操作来实现闹钟时间的设置。
闹钟开关子模块:
该模块实现的功能是,对闹钟的工作状态进行开关,当为开时,闹钟时间到后,闹钟指示灯会亮以及蜂鸣器会响;当为关时,即便闹钟时间到了,闹钟指示灯不会亮以及蜂鸣器不会响。
10
检查闹钟子模块:
该模块实现的功能是,它是在主程序中被循环调用的,每调用一次,它会把当前时间与闹钟时间进行比较,如果当前时间与闹钟时间相同且闹钟开关为开,则调用闹钟指示灯亮子模块和蜂鸣器子模块;否则继续运行主程序。
闹钟指示灯亮子模块:
该模块的功能是,当时间到时,它将使闹钟指示灯以每秒两次的频率闪烁,闪烁三十秒后熄灭。
蜂鸣器子模块:
该模块的功能是,当时间到时,它将使闹钟指示灯以每秒两次的频率响,响三十秒后停止响声。
闹钟转换子模块:
由于在寄存器中存储的是十六进制的数,不能存储十进制的数,且我们用的LED灯是共阳极的,所以在要输出显示闹钟的时间前,要进行闹钟数制转换。
故该模块的功能是实现对闹钟时间寄存器中的内容进行数制转换。
对闹钟设计成六个子模块,使我们更容易得设计出闹钟所要实现的功能,这也就是模块化的好处,将一个大型的问题划分为若干个小问题,对这若干小问题进行设计,最好通过参数把这些小模块连成一个大的模块,从而解决问题。
下图3-4是对这六个模块之间的联系的描述。
图3-4闹钟输入输出模块
11
3.5当前时间调整模块
当前时间调整模块是用来按用户的需要对当前所显示的时间进行设置,本软件的设计思路是通过对相关的时间设置按键的扫描进行时间设置。
具体思路如下图3-5:
图3-5时间调整模块
12
3.6复位模块
复位模块是对当前时间和闹钟时间进行复位,复位后的结果是当前时间变为00-00-00,闹钟时间变为00-00-00。
由于该模块较为简单,就不展示其设计思路了。
就将其结果仿真图展示如下图3-6。
图3-6复位结果图
13
4.系统的调试和性能分析
4.1系统的调试方法
整个系统调试的主要思想是:
先每个模块进行调试,然后整个系统一起调试。
先软硬件分开调试,然后一起调试。
遵循先部分后整体的原则。
系统的在调试过程中要注意以下几点:
(1)硬件电路焊完之后,在上电之前一定要先用万用表检测电源和地之间是否短路。
(2)上电之后要用示波器观察信号的在电路中变化的情况,与设计当初的情况相比较,找出差别,并进行分析。
(3)软件调试过程中可以使用断点、单步执行等常用的方法。
(4)软硬件联调时,要注意软件部分要一个功能一个功能的调试。
4.1.1输入按键的调试
输入按键的调试,只要按键按下去时,按键有相应的反应就行,通过程序来判断,单片机I/O是否能够识别出。
4.1.2复位电路的调试
当电源刚接通时,接通电源就完成了系统的初始化。
4.1.3显示电路的调试
在本设计中,显示电路只需完成,当输入数字时能正确显示数字。
4.1.4整个系统的联调
在系统各个部分都调试完毕之后,即可以进行整个系统的调试。
由于前面各个部分的调试做的都比较充分,所以在实际调试过程中,能够较顺利的实现整个系统预期的功能。
14
4.2心得体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在这两个星期的日子里,可以说得是苦多于甜,但是可以学到很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好„„通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师那里我学得到很多实用的知识,在次我表示感谢!
参考文献
1、《单片机原理及应用》李建忠编西安电子科技大学出版社
2、《单片微型计算机原理与接口技术》高峰编电子工业出版社
3、《单片机应用新技术教程》邹逢兴编高等教育出版社
4、《16位微型计算机原理接口及其应用》朱宇光编电子工业出版社
5、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社
6、《微型计算机接口技术》邓亚平编清华大学出版社
7、《单片机原理及及应用》王迎旭编机械工业出版社
15
附录附录A系统原理图
16
附录B程序源代码
MS50EQU30HSHIEQU31H
FENEQU32H
MIAOEQU33HBUFEQU34H
HHEQU40HFFEQU41HMMEQU42H
DENGBITP3.5
BIAOZBITP3.6
SPKBITP3.7
ALBEQU20H.0
K1BITP1.0
K2BITP1.1
K3BITP1.2
K4BITP1.3
K5BITP1.4
K6BITP1.5
K7BITP1.6
MOVSP,#60H
;--------------------------------------------ORG00H
AJMPMAIN
ORG0BHAJMPTIME0MAIN:
SETBDENG
CLRALBACALLCHUSHIACALLINTO
LOOP:
ACALLNAOPROACALLCONV
ACALLDISPLAYJBK6,LOOP1
ACALLBIAO
SJMPLOOP
LOOP1:
JBK1,LOOP2
ACALLSETTIMESJMPLOOP
LOOP2:
JBK4,LOOP3
ACALLSETNAOSJMPLOOP
17
LOOP3:
JBK7,LOOP
ACALLRST
SJMPLOOP
;--------------------------------------------------------
CONV:
;转换子程序
MOVA,SHI;转换小时存到3435HMOVB,#10
DIVAB
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVBUF,A
MOVA,B
MOVCA,@A+DPTR
MOVBUF+1,A
MOVA,FEN;转换分存到3738HMOVB,#10
DIVAB
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVBUF+3,A
MOVA,B
MOVCA,@A+DPTR
MOVBUF+4,A
MOVA,MIAO;转换秒存到4041HMOVB,#10
DIVAB
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVBUF+6,A
MOVA,B
MOVCA,@A+DPTR
MOVBUF+7,A
MOVBUF+2,#0BFH;第三个位置显示一杠MOVBUF+5,#0BFH;第五个位置显示一杠RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;-------------------------------------------------------------------
DISPLAY:
;显示子程序
MOVR1,#BUF
MOVA,#01H
MOVR2,#8
Dp1:
MOVP2,A
PUSHACC
MOVA,@R1
;阳码表18
MOVP0,A
ACALLDELAY
POPACC
RLA
INCR1
CJNER1,#BUF+8,DY
MOVR1,#BUF
DY:
DJNZR2,Dp1
RET
;------------------------------------------------------------------BIAO:
CPLALB;闹钟开关
CPLBIAOZ
BIAO1:
ACALLCONV
ACALLDISPLAY
JNBK6,BIAO1
RET
;---------------------------------------------------------------------SETTIME:
;设置时间
CLRTR0
TT:
ACALLDISPLAY;设置小时
TS:
JNBK1,TT
TSS:
ACALLDISPLAYS
JNBK1,TF
JNBK2,JIAS
JNBK3,JIANS
JNBK5,QUE
SJMPTSS
JIAS:
INCSHI;加时子程序
MOVA,SHI
CJNEA,#24,K2S
MOVSHI,#0
K2S:
ACALLCONV
ACALLDISPLAY
JNBK2,K2S
SJMPTSS
JIANS:
DECSHI;减时子程序
MOVA,SHI
CJNEA,#255,K3S
MOVSHI,#23
K3S:
ACALLCONV
ACALLDISPLAY
JNBK3,K3S
SJMP