单片机数字时钟控制课程设计.docx
《单片机数字时钟控制课程设计.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟控制课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
单片机数字时钟控制课程设计
单片机原理及系统课程设计
专业:
电气工程及其自动化
班级:
姓名:
学号:
指导教师:
评语:
平时(40)
修改(30)
报告(30)
总成绩
兰州交通大学自动化与电气工程学院
2012年7月1日
1引言
1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
2设计方案及原理
2.1系统方案介绍
用AT89C51单片机设计一个简单的数字时钟,能进行时分秒的调整,能够较准确地显示时间。
用单片机控制6位LED数码管显示时、分、秒;并且具有二十四小时循环记时功能,走时要准。
能够用按键开关可实现时、分调整。
2.2系统原理
一个AT89C51单片机做为控制电路,用P0、P2口来控制数码管的段码和位码,利用动态扫描来实现数码管的显示。
开通定时器T0中断来对数码管的查表和1秒的准确计时,然后利用P3口的低三位作为判断程序,判断是否分时秒是否溢出,若无溢出则显示当前值,若溢出则清零实现时分秒的加一。
3硬件设计
主要用到这些元件:
AT89C51单片机与单片机的最小系统,八位显示数字管,74LS245锁存器。
用12MHZ的晶振和两个较小的22pF的电容组成振荡器电路,用一个按键,一个电解电容,一个10K电阻组成具有上电自动复位和手动复位两种操作的复位电路。
用P0口作为输出需接上拉电阻,即需RESPACK-8排阻,74LS245锁存器保存要开通的位码。
通过控制P0,P2,P3口来控制时间的计时。
P0口送入要显示的字段,P2口送入要显示的位码,P3口低三位即为查询是否需要调整时分秒数。
开通计时器中断0来查表得到要显示的数字。
图3.1硬件电路图
4软件设计
整个程序先给数码管送初值120000,然后进行初始化工作。
程序由一个主函数,一个定时器中断程序,一个延时子程序,三个判断子程序,一个显示子程序构成。
程序通过按键扫描程序来确定是否调用中断程序来对时间进行调整。
用一子程序完成时分秒的调整,通过循环扫描三个按键的电平变化来判断对应按键是否按下,并带有去抖动功能,当某个按键按下时,则对应的进行增一操作。
若分秒增一到达60次或者时增一到达24次,将对其清零,各个操作均实时的通过数码管显示。
图4.1显示程序流程图
图4.2主程序流程图
5设计总结
课程设计还是很有挑战性的,从开始选择课题到最后的成型阶段遇到了很多的困难。
但在其中收获的比遇到的困难要多的多,因此还是非常乐意去将课程做好。
我所选的课程设计题目是数字时钟。
刚拿到这个课题时,不只如何动手去做。
就去上网查询资料和源程序,认真研究了其他学长学姐的程序之后,才有了基本的思路,先将整个系统根据不同的功能化分成模块,再分别进行设计,逐个攻破,最后将其整合即可。
知道最重要的是1秒定时部分和如何把时分秒在数码管中显示出来,同时设计出来的产品还必须具备一些基本的人机交互功能。
在做的过程中用到proteus软件时,由于对软件的不熟悉,第一次做的时候就将八管电子显示屏选错极性,反复测试都没有出理想的效果,在逐一排除错误后,终于找到错误并改正,才有了合适的结果。
总的来说这次课程设计我收获了很多东西,使我的动手能力有了极大的提高,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
参考文献
[1]李建忠.单片机原理及应用[M].西安:
西安电子科技大学出版社,2008.
[2]张迎新.单片机初级教程—单片机基础[M].北京:
北京航空航天大学出版社,2006.
[3]李华.王思明单片机原理及应用[M].兰州:
兰州大学出版社,2009.
附录A源程序
ORG00H
LJMPSTART
ORG0BH;定时器0中断入口地址
LJMPINT_T0
START:
MOV30H,#00H;程序初始化
MOV31H,#00H
MOV32H,#12
MOV48H,#00H
MOV49H,#00H
MOV4AH,#00H
MOVTMOD,#01H
MOVTH0,#248
MOVTL0,#248
SETBTR0;启动定时器0
SETBET0;允许T0中断
SETBEA;开中断
ADDMIAO:
JBP3.2,ADDFEN
LCALLDELY10MS;去抖动
JBP3.2,ADDFEN
INC30H
MOVA,30H
CJNEA,#60,NS60;满60清零
MOV30H,#00H
NS60:
LCALLDISP
JNBP3.2,$
ADDFEN:
JBP3.1,ADDSHI
LCALLDELY10MS
JBP3.1,ADDSHI
INC31H
MOVA,31H
CJNEA,#60,NM60
MOV31H,#00H
NM60:
LCALLDISP
JNBP3.1,$
ADDSHI:
JBP3.0,RETURN
LCALLDELY10MS
JBP3.0,RETURN
INC32H
MOVA,32H
CJNEA,#24,NH24
MOV32H,#00H
NH24:
LCALLDISP
JNBP3.0,$
RETURN:
LJMPADDMIAO
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
DISP:
MOVA,#40H
ADDA,#8
DECA
MOVR1,A
MOVA,32H
MOVB,#10
DIVAB
MOV@R1,A
DECR1
MOVA,B
MOV@R1,A
DECR1
MOVA,#10
MOV@R1,A
DECR1
MOVA,31H
MOVB,#10
DIVAB
MOV@R1,A
DECR1
MOVA,B
MOV@R1,A
DECR1
MOVA,#10
MOV@R1,A
DECR1
MOVA,30H
MOVB,#10
DIVAB
MOV@R1,A
DECR1
MOVA,B
MOV@R1,A
DECR1
RET
INT_T0:
MOVTH0,#248
MOVTL0,#248
MOVA,#40H
ADDA,48H
MOVR0,A
MOVA,@R0
MOVDPTR,#TABLE;送表头
MOVCA,@A+DPTR
MOVP2,#0FFH
MOVP0,A
MOVA,48H
MOVDPTR,#TAB;扫描控制位
MOVCA,@A+DPTR
MOVP2,A
INC48H
MOVA,48H
CJNEA,#08H,KNA;8个数码管送数是否结束
MOV48H,#00H
KNA:
INC49H
MOVA,49H
CJNEA,#100,DONE
MOV49H,#00H
INC4AH
MOVA,4AH
CJNEA,#05H,DONE
MOV4AH,#00H
INC30H
MOVA,30H
CJNEA,#60,NEXT
MOV30H,#00H
INC31H
MOVA,31H
CJNEA,#60,NEXT
MOV31H,#00H
INC32H
MOVA,32H
CJNEA,#24,NEXT
MOV32H,#00H
NEXT:
LCALLDISP
DONE:
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
TAB:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
END
附录B仿真结果及说明
(1)系统初始化时,仿真如下:
附图1初始状态图
(2)时键按下,增加一小时,仿真如下:
附图2增加一小时仿真图
(3)分键按下,增加一分钟,仿真如下:
附图3增加一分钟仿真图