时钟计时器课程设计.docx
- 文档编号:3766699
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:31
- 大小:117.23KB
时钟计时器课程设计.docx
《时钟计时器课程设计.docx》由会员分享,可在线阅读,更多相关《时钟计时器课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
时钟计时器课程设计
课程设计报告
微机原理与单片机课程设计
微机原理与单片机课程设计
单片机课程设计——时钟计时器的设计
专业
电气工程及其自动化
班级
133521
姓名
刘合琛尹锥丁大胜
学号
133521016133521017133521026
指导教师
万青
2015年12月
时钟计时器的设计
1.引言
1.1.设计意义
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字时钟计时器,本数字时钟计时器,可以显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可实现时、分调整,秒表/时钟功能转换,省电(关闭显示)及定时设定提醒(蜂鸣器)等功能。
人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字时钟计时器就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字时钟计时器与传统的计时器相比,具有读数方便,操作简单,计时精准,还能实现整点提醒,定时提醒等功能。
其输出时间采用数字显示,主要用于对时间要求精度高的场所,或科研实验室使用,该设计控制器使用单片机AT89C52,用6位共阳极LED数码管以串口传送数据,实现数字显示功能,能准确达到以上要求。
1.2.系统功能要求
用单片机及6位LED数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可实现时、分调整,秒表/时钟功能转换,省电(关闭显示)及定时设定提醒(蜂鸣器)等功能。
2.方案设计
1.3.数字时钟计时器设计方案论证
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,接口复杂一些,又考虑到时钟显示只有6位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现LED的显示。
单片机采用易购的AT89C52系列,这种单片机具有足够的空余硬件资源,可以实现其他的扩充功能。
如果考虑使用电池供电,则可采用LV系列单片机。
1.4.硬件系统的总体设计框图
时钟计时器硬件系统的总体设计方框图如图2-1所示,控制器采用单片机AT89C52,数字输出采用6位共阳极LED数码管以动态扫描法实现数字显示。
图2-1硬件系统的总体设计方框图
3硬件设计
时钟计时器的硬件电路如图2.2所示。
该电路采用AT89C52单片机最小化应用设计,采用共阳7段LED显示器,P0口段码数据,P2.0~P2.5口作列扫描输出,P1.0,P1.1,P1.2,P1.3口接4个按钮开关,用于调时及功能设置,P1.7端口接5V的小蜂鸣器,用于按键发音及定时提醒、整点到时提醒等,为了提供共阳LED数码管的列扫描驱动电压,用三极管9012做电源驱动输出,采用12MHZ晶振,可提高秒计时的精确性。
图3-1时钟计时器的硬件电路
2.软件设计
1.5.主程序
本设计中计时采用定时器T0中断完成,秒表使用定时器T1中断完成。
主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。
其主程序执行流程如图2.3所示。
图4-1主程序流程图
1.6.显示子程序
时间显示子程序每次显示6个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。
内存中50H~55H为闹钟定时单元,60H~66H为秒表计时单元,70H~75H为时钟显示单元。
由于采用7段共阳极LED数码管动态扫描实现数据显示,所以显示用十进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
为了显示小数点及“—”、“A”等特殊字符,在显示班级和计时时应采用不同的显示子程序。
1.7.定时器T0中断服务程序
定时器T0用于时间计时。
定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断累计20次时,对秒计数单元进行加1操作。
时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)、78H~79H(时)中,最大计时值为23时59分59秒。
7AH单元内存放“熄灭符”数据(#0AH),用于时间调整时的闪烁功能。
在计数单元中,采用十进制BCD码计数,满10进位。
T0中断计时程序流程图如图2.4所示。
图4-2T0中断计时程序流程图
1.8.定时器T1中断服务程序
T1中断程序用于指示时间调整单元数字的闪烁或秒表计数,在时间调整状态下,每过0.3s左右,将对应调整单元的显示数据换成“熄灭符”数据(#0AH).这样,在调整时间时,对应调整单元的显示数据会间隔闪亮。
在做秒表计时时,每10ms中断一次,计数单元加1,每100次为1s.秒表计数单元地址在60H~61H(10毫秒)、62H~63H(秒)、64H~65H(分)中,最大计数值为99分59.99秒。
T1中断服务程序流程图如图2.5所示。
图4-3T1中断服务程序流程图
1.9.调时功能程序
调时功能程序的设计方法是:
按下P1.0口按键,若按下时间小于1s,则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。
当再按下P1.0口按键时,若按下时间小于0.5s,则时间加1分钟;若按下时间大于0.5s,则进入小时状态。
按下P1.1口按键时,可进行减1调整。
在消失调整状态下,当按键按下的时间大于0.5s时,退出时间调整状态,时钟从0s开始计时。
1.10.秒表功能程序
在正常时钟状态下,若按下P1.1口按键,则进行时钟/秒表显示功能的转换,秒表中断计时程序启动,显示首地址改为60H,LED将显示秒表计时单元60H-65H中的数据。
按下P1.2口的按键开关,可实现秒表清0、秒表启动、秒表暂停功能;当再按下P1.1口按键时,关闭T1秒表中断计时,显示首址又改为70H,恢复正常时间的显示功能。
1.11.闹钟时间设定功能程序
在正常时钟状态下,若按下P1.3口的按键开关,则进入这顶闹时调分状态,显示首地址改为50H。
LED将显示50H-55H中的闹钟设定时间,显示式样为00:
00—,其中高2位代表时,低2位代表分,在定时闹铃时精确到分。
按P1.2键,分加1;按P1.0键,分减1.若再按P1.3键,则进入时调整状态,显示式样为00:
00:
—,再按P1.2键,时加1,按P1.0键,时减1.按P1.1键,闹铃有效,显示式样变为00:
00:
-0;再按P1.1键,闹铃无效,显示式样又变为00:
00:
—。
再按P1.3键,调整闹钟时间结束,回复正常时间的显示。
在闹铃时,可按一下P1.3口的按键开关使蜂鸣停止,不按则蜂鸣器将鸣叫1min后自行停止。
在设定闹钟后,若要取消闹时功能,则可按下P1.3键,当听到“滴”的一声时表明已取消了闹铃功能。
2.调试及性能分析
1.12.硬件调试
在上电前先对照硬件电路原理图检查电路板的焊接情况,看有没有虚焊及漏焊的地方,检查的方式是用万用表欧姆档对照电路原理图一块块的检查,最主要的是对数码管之间连接的检查,这一块接线较多,检查时一定要每一个管脚都对应上,比如a脚对a脚,b脚对b脚,按此顺序一步步检查。
接着就是列驱动电路的检查也就是三极管的检查,先要弄清三极管的每个脚对应的是哪个极,然后再按线路检查。
最后是单片机的检查,先要检查是否接入正负极,其次要检查晶振是否接上,后再检查其他部位。
待所有都检查完后再上电,此时一般都没什么问题,都能得出实验现象。
我在调试时主要问题是晶振没有接入,所以刚开始只是显示0而没其他现象,后来接入后就好了。
1.13.软件调试
软件调试是在KeilC51编译器下进行的,主要改的地方是日期显示地方。
在提供的汇编源程序中,显示日期和学号的子程序中将STAB表,启动时显示2006年12月23日、C04-2-28(学号)用
STAB:
DB0AH,0AH,0AH,0AH,0AH,0AH,08H,02H,0CH,02H,0CH,04H,00H,0BH,0AH,0AH
DB03H,02H,0CH,02H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
改为
STAB:
DB0AH,0AH,0AH,0AH,0AH,01H,05H,00H,02H,02H,05H,03H,08H,00H,0AH,0AH
DB00H,02H,0CH,05H,00H,0CH,01H,01H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
通过编译可以正确显示学号:
083522051日期:
2011-5-20,然后通过下载工具将此程序烧到单片机内。
1.14.性能分析
根据设计程序的分析可知,LED显示器动态扫描的频率约为167Hz,实际使用观察时完全没有闪烁。
由于计时中断中加了中断延时误差处理,所以实际计时精度很高,可满足多种场合要求。
根据设计,可以设计一个滚动显示子程序,使制作日期,学号以一定速度滚动显示。
2.设计总结
通过此次的单片机课程设计,使我学到了很多知识,也提高了动手实践能力。
在这次课程设计中,我们首先要进行原理图的设计,然后把所有原件检测和整理好,待所有的元器件配齐后再进行元件的布局,布局的好坏很重要,一方面它会影响到整体的美观性,另一方面也影响焊接的难易程度及用线的数量。
接着就是要对原理图进行分析,这是至关重要的环节,原理是否弄懂直接关系到实验能不能成功,原理图的分析主要包括弄懂各芯片、各器件的功能,比如说要清楚74LS244芯片的各引脚图的功能,还要知道6位LED数码管的引脚图以及三极管的各个脚对应的是哪个极等问题。
在这些都弄懂后接下来就是焊接了,,焊接时既要要焊的牢,又要焊的美观,这些都需要在焊接过程中十分注意。
焊接工作完成后需要进行调试,调试一般情况下都会出现各种各样的问题,幸运的是,我第一次调试就成功了,从而证明了硬件没问题啦。
剩下就是软件的调试,软件的调试比较简单,主要看懂程序的每一部分,并正确修改有错误的地方就行啦。
本次课程设计时间虽然不是很长,但它是一个很好的实践机会。
上学期我们对单片机的理论进行了学习,使我对单片机有了初步的了解,通过本次的课程设计使我对单片机的理解更深刻了,许多的知识动手后掌握的也更好。
总之,通本次课程设计,使我收获很大,我也会在今后的学习中加强这方面知识的学习和掌握。
2.附录A:
汇编源程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;AT89C52时钟程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;*********************************************************************************************;
;以下程序能用于24小时计时,能作为秒表使用,能定时闹铃1分钟(也可关).
;使用方法:
开机后在00:
00:
00起开始计时,
(1)长按P1.0进入调分状态:
分单元闪烁
;按P1.0加1,按P1.1减1.再长按P1.0进入时调整状态,时单元闪烁,加减调整同调分.
;按长按退出调整状态.
(2)按下P1.1进入秒表状态:
按P1.2暂停,再按P1.2秒表清零,再按
;P1.2秒表又启动,按P1.1退出秒表回到时钟状态.(3)按P1.3进入设定闹时状态:
00:
00:
-,可进
;行分设定,按P1.2分加1,再按P1.3为时调整,00:
00:
-,按P1.2时加1,按P1.1闹铃有效,显示为00:
00:
-0,再按
;P1.1闹铃无效(显示00:
00:
-,),按P1.3调闹钟结束.在闹铃时可按P1.3停闹,不按闹铃1分钟.
;定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁及秒表定时用,
;P1.0、P1.1、P1.2、P1.3为调整按钮,P0口为字符输出口,P2为扫描口,P1.7为蜂呜器口,采用共阳显示管。
;50H-55H为闹钟定时单元,60H-65H为秒表计时单元,70H-75H为显示时间单元,76H-79H为分时计时单元。
;03H标志=0时钟闪烁,=1秒表,05H=0,不闹铃,=1要闹铃.07H每秒改变一次,用作间隔呜叫.
;***********************************************************************************************;
DISPFIRSTEQU30H;显示首址存放单元
BELLEQUP1.7;小喇叭
CONBSEQU2FH;存放报时次数
;
;****************************************
;;中断入口程序;;
;****************************************
;
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断程序入口
LJMPINTT0;跳至INTTO执行
ORG0013H;外中断1中断程序入口
RETI;外中断1中断返回
ORG001BH;定时器T1中断程序入口
LJMPINTT1;跳至INTT1执行
ORG0023H;串行中断程序入口地址
RETI;串行中断程序返回
;
;****************************************
;;以下程序开始;;
;****************************************
;整点报时用
QQQQ:
MOVA,#10H
MOVB,79H
MULAB
ADDA,78H
MOVCONBS,A
BSLOOP:
LCALLDS20MS
LCALLDL1S
LCALLDL1S
LCALLDL1S
DJNZCONBS,BSLOOP
CLR08H;清整点报时标志
AJMPSTART1
;
;****************************************
;;主程序开始;;
;****************************************
;
START:
LCALLST;上电显示年月日及班级学号
MOVR0,#00H;清00H-7FH内存单元
MOVR7,#80H;
CLEARDISP:
MOV@R0,#00H;
INCR0;
DJNZR7,CLEARDISP;
MOV20H,#00H;清20H(标志用)
MOV7AH,#0AH;放入"熄灭符"数据
MOVTMOD,#11H;设T0、T1为16位定时器
MOVTL0,#0B0H;50MS定时初值(T0计时用)
MOVTH0,#3CH;50MS定时初值
MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;50MS定时初值
SETBEA;总中断开放
SETBET0;允许T0中断
SETBTR0;开启T0定时器
MOVR4,#14H;1秒定时用计数值(50MS×20)
MOVDISPFIRST,#70H;显示单元为70-75H
;以下主程序循环
START1:
LCALLDISPLAY;调用显示子程序
JNBP1.0,SETMM1;P1.0口为0时转时间调整程序
JNBP1.1,FUNSS;秒表功能,P1.1按键调时时作减1加能
JNBP1.2,FUNPT;秒表STOP,PUSE,CLR
JNBP1.3,TSFUN;定时闹铃设定
JB08H,QQQQ
AJMPSTART1;P1.0口为1时跳回START1
;
FUNPT:
LJMPFUNPTT
;以下闹铃时间设定程序,按P1.3进入设定
TSFUN:
LCALLDS20MS
JBP1.3,START1;
WAIT113:
JNBP1.3,WAIT113;等待键释放
JB05H,CLOSESP;闹铃已开的话,关闹铃
MOVDISPFIRST,#50H;进入闹铃设定程序,显示50-55H闹钟定时单元
MOV50H,#0CH;"-"闹铃设定时显示格式00:
00:
-
MOV51H,#0AH;"黑"
;
DSWAIT:
SETBEA
LCALLDISPLAY
JNBP1.2,DSFINC;分加1
JNBP1.0,DSDEC;分减1
JNBP1.3,DSSFU;进入时调整
AJMPDSWAIT
;
CLOSESP:
CLR05H;关闹铃标志
CLRBELL
AJMPSTART1
DSSFU:
LCALLDS20MS;消抖
JBP1.3,DSWAIT
LJMPDSSFUNN;进入时调整
;
SETMM1:
LJMPSETMM;转到时间调整程序SETMM
;
DSFINC:
LCALLDS20MS;消抖
JBP1.2,DSWAIT
DSWAIT12:
LCALLDISPLAY;等键释放
JNBP1.2,DSWAIT12
CLREA
MOVR0,#53H;
LCALLADD1;闹铃设定分加1
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH22;
ADDHH22:
JCDSWAIT;小于60分时返回
ACALLCLR0;大于或等于60分时分计时单元清0
AJMPDSWAIT
DSDEC:
LCALLDS20MS;消抖
JBP1.0,DSWAIT
DSWAITEE:
LCALLDISPLAY;等键释放
JNBP1.0,DSWAITEE
CLREA
MOVR0,#53H;
LCALLsub1;闹铃设定分减1
LJMPDSWAIT
;以下秒表功能/时钟转换程序
;按下P1.1可进行功能转换
FUNSS:
LCALLDS20MS
JBP1.1,START11
WAIT11:
JNBP1.1,WAIT11
CPL03H
JNB03H,TIMFUN
MOVDISPFIRST,#60H;显示秒表数据单元
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H;10MS定时初值()
MOVTH1,#0D8H;10MS定时初值
SETBTR1
SETBET1
START11:
LJMPSTART1
TIMFUN:
MOVDISPFIRST,#70H;显示时钟数据单元
CLRET1
CLRTR1
START12:
LJMPSTART1
;以下秒表暂停\清零功能程序
;按下P1.2暂停或清0,按下P1.1退出秒表回到时钟计时
FUNPTT:
LCALLDS20MS
JBP1.2,START12
WAIT22:
JNBP1.2,WAIT21
CLRET1
CLRTR1
WAIT33:
JNBP1.1,FUNSS
JBP1.2,WAIT31
LCALLDS20MS
JBP1.2,WAIT33
WAIT66:
JNBP1.2,WAIT61
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
WAIT44:
JNBP1.1,FUNSS
JBP1.2,WAIT41
LCALLDS20MS
JBP1.2,WAIT44
WAIT55:
JNBP1.2,WAIT51
SETBET1
SETBTR1
AJMPSTART1
;以下键等待释放时显示不会熄灭用
WAIT21:
LCALLDISPLAY
AJMPWAIT22
WAIT31:
LCALLDISPLAY
AJMPWAIT33
WAIT41:
LCALLDISPLAY
AJMPWAIT44
WAIT51:
LCALLDISPLAY
AJMPWAIT55
WAIT61:
LCALLDISPLAY
AJMPWAIT66
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;1秒计时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0:
PUSHACC;累加器入栈保护
PUSHPSW;状态字入栈保护
CLRET0;关T0中断允许
CLRTR0;关闭定时器T0
MOVA,#0B7H;中断响应时间同步修正
ADDA,TL0;低8位初值修正
MOVTL0,A;重装初值(低8位修正值)
MOVA,#3CH;高8位初值修正
ADDCA,TH0;
MOVTH0,A;重装初值(高8位修正值)
SETBTR0;开启定时器T0
DJNZR4,OUTT0;20次中断未到中断退出
ADDSS:
MOVR4,#14H;20次中断到(1秒)重赋初值
CPL07H;闹铃时间隔呜叫用
MOVR0,#71H;指向秒计时单元(71H-72H)
ACALLADD1;调用加1程序(加1秒操作)
MOVA,R3;秒数据放入A(R3为2位十进制数组合)
CLRC;清进位标志
CJNEA,#60H,ADDMM;
ADDMM:
JCOUTT0;小于60秒时中断退出
ACALLCLR0;大于或等于60秒时对秒计时单元清0
MOVR0,#77H;指向分计时单元(76H-77H)
ACALLADD1;分计时单元加1分钟
MOVA,R3;分数据放入A
CLRC;清进位标志
CJNEA,#60H,ADDHH;
ADDHH:
JCOUTT0;小于60分时中断退出
ACALLCLR0;大于或等于60分时分计时单元清0
LCALLDS20MS;正点报时
SETB08H
MOVR0,#79H;指向小时计时单元(78H-79H)
ACALLADD1;小时计时单元加1小时
MOVA,R3;时数据放入A
CLRC;清进位标志
CJNEA,#24H,HOUR;
HOUR:
JCOUTT0;小于24小
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时钟 计时器 课程设计