1、 毕业(论文)设计基于单片机的数字钟院 系: 机电系 专 业: 电子信息工程技术 指导老师: 郭江涛 姓 名: 张莉 班 级: 08 电信二 学 号: 0804110243 撰写日期: 2011 年 4 月 18 日 1商丘职业技术学院毕业(论文)设计任务书题目:基于单片机的数字时钟姓 名 张莉 学 号 0804110243 班 级 08 电信二班(论文)设计选题的来源、目的与意义:将所学内容与实际问题相结合,实现动手能力,巩固所学知识点(论文)设计的主要内容:本设计主要是利用 AT89C51 单片机设计 24 小时制数字钟,数字钟同时带有时间调整、闹铃、整点报时等功能。进度计划(进度时间、主
2、要工作内容):三月初开始论文的准备,打算于 4 月末完成主要参考文献:1王沫楠.2007.单片机原理及应用.北京:中国计量出版社2于珍珠,赵娜 ,赵刚等.2007.基于 51 单片机的温度测量系统.单片机开发与应用.23(1-2 ):146-1483王沫楠.2007. 单片机原理及应用.北京:中国计量出版社4李朝青.2008. 单片机原理及接口技术(第 3 版).北京:北京航空航天大学出版社(论文)设计工作起讫日期:2011 年 3 月 15 日至 2011 年 4 月 28 日指导教师(签名) 专业教研主任(签名)2摘 要本设计主要是利用 AT89C51 单片机设计 24 小时制数字钟,数字
3、钟同时带有时间调整、闹铃、整点报时等功能。利用汇编语言编写程序,通过 proteus 软件进行仿真验证设计。设计中还用到了外部晶振、四位、两位 LED 数码管作为时钟数字显示,外接两个按键作为调整。按下 B2 进入相应功能的调整,按下第一次为调整时钟的时,按下第二次为调整时钟的分,按下第三次为调整时钟的秒,按下第四次为设定闹钟的时,按下第五次为设定闹钟的分,这时会停止计时,显示屏只会显示相应调整的项,其它项熄灭,调整完后再按 B2 跳回正常计时。经过一系列的测试验证,设计能满足各项要求,经过长时间的运行测试程序都能正常地运行,没出现错误。可应在实际中应用,能满足日常时间显示的需要。关键字:24
4、 小时,数字钟,单片机,设计 3ABSTRACTThis design mainly using AT89C51 microcontroller design 24-hour digital clock, digital clock with time to adjust at the same time, alarm, hourly chime functions. Use of assembly language programming, by proteus simulation software design. Design also uses an external crystal,
5、 four, two LED digital tube, as the clock figures, the two keys as the external adjustment. Press the corresponding function into the adjustment B2 press for the first time to adjust the clock, press to adjust the clock for the second time points, press the third time for the adjustment of the clock
6、s seconds, press the fourth time to set the alarm clock , press the fifth time to set the alarm points, then would stop the timer, adjust the display will show the items, other items off, jump back to the normal adjustment time after then B2. After a series of testing and certification, designed to
7、meet the requirements, after a long run test program can run normally, no errors. Can be applied in practice, to meet the daily needs of the time display.Keyword 24 hours,A digital clock, SCM,Design.KEYWORDS:24 hours, a digital clock, microcontroller, design4目 录1、设计目的 12、设计功能、要求 13、硬件设计 13.1、原理图设计 .
8、13.2、器件清单 .23.3、各元器件作用说明 .23.4、工作过程说明 .24、软件设计 24.1、设计思路 .24.2、工作原理图 .34.3、流程图 .34.4、程序清单 .55、仿真结果 95.1、仿真环境说明 .95.2、程序编译结果 .95.3、软件仿真结果 .96、设计总结 .127、参考文献 .128、附件:电路图 .1351、设计目的利用单片机设计一个数字时钟,加深对单片机的熟悉程度,把学习到的理论知识应用到实际中,把单片机的知识系统地联系起来,增强动手能力,为以后的设计、工作做准备。也是对这学期单片机的学习的一次检验。2、设计功能、要求数字钟要求能 24 小时制时间显示,
9、可随时进行时间校对调整,整点报时以及闹钟功能。原理图设计要求符合项目的工作原理,接线要正确.图中所使用的元器件要合理选择,电阻,电容等器件要求标出相关参数,并通过绘图软件打印出原理图。原理图设计中简要说明设计目的,原理图中所使用的元器件功能在图中的作用,各器件的工作过程及顺序。程序设计中对程序总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的说明画出工作原理图,流程图并给出程序清单。3、硬件设计3.1、原理图设计原理图的设计比较简单,只需要有一个接好晶振的 AT89C51 单片机、LED 显示屏、按键、蜂鸣器以及一些电阻就可以了。用 P1 口作为显示数字输出,P2.0P2
10、.7 口作为动态显示片选信号,P0.0 作为声音信号输出,P3.2、P3.3 接外中断信号,用于调整。蜂鸣器需要用三极管放大,接一 5V 电源发声。3.2、器件清单器件名称 数值、型号 数量 原理图中标号电阻 10k 3 R2-R4电容 10uF 1 C1电容 30pF 2 C2, C3单片机 AT89C51 1 U1三极管 BSX20 1 Q1蜂鸣器 1 LS18 路电阻 300 1 RN1晶振 1 CRYSTAL按键 2 B1,B2LED 显示屏 4 位 1 D1LED 显示屏 2 位 1 D2图 1.电路原理图63.3、各元器件作用说明电容 C2, C3 以及晶振 CRYSTAL 用来为
11、单片机提供外部晶振。电阻 R3、R4 以及三极管 Q1 用于放大 P0 口的输出,提供给蜂鸣器足够大的信号电流。蜂鸣器用于整点报时、闹钟的声音信号输出。显示屏 D1 用于显示时和分;D2 用于显示秒。按键 B2 用来设定调整功能,按下第一次为调整时钟的时,按下第二次为调整时钟的分,按下第三次为调整时钟的秒,按下第四次为设定闹钟的时,按下第五次为设定闹钟的分。按键 B1 用来调整,每按下一次为加一操作。3.4、工作过程说明正常显示:单片机中装入程序后,接通电源即显示屏显示 0000 00,开始计时,D2显示屏每 1 秒加 1,加到 60 分加 1,D2 显示回零,继续从 0 开始计时,分加到 6
12、0 时加1,时加到 24 回零,继续按规则计时。整点报时响铃一次,闹钟响铃两次。调整:按下 B2 进入相应功能的调整,按下第一次为调整时钟的时,按下第二次为调整时钟的分,按下第三次为调整时钟的秒,按下第四次为设定闹钟的时,按下第五次为设定闹钟的分,这时会停止计时,显示屏只会显示相应调整的项,其它项熄灭,调整完后再按 B2 跳回正常计时。4、软件设计4.1、设计思路主程序执行时钟的显示,利用动态显示,先显示时,然后分、秒,每一位中间隔着相应的延时,时分秒的数值分别用三个寄存器存储,主程序只需直接显示寄存器里内容即可。计时子程序由内部定时器中断程序完成,定时器定时 50ms,每 50ms 中断一次
13、,中断20 次后即够一秒,存储秒的寄存器加 1,加够 60 秒分加 1,分加够 60 时加 1,一直计算下去,实现 24 小时的计时。调整程序由两个外中断子程序配合完成,外中断 1 子程序用于设定调整的内容,以区分调整时钟的时、分、秒,以及设定闹钟的时、分。外中断 0 子程序用于对相应的调整项进行加 1 操作。整点报时功能只要在每次时钟的时加 1 的时候输出一声铃声就可以了,闹钟功能即要在每次计时的时候判断时钟的时、分时候与闹钟设定的时、分相同,若相同即响铃两声,不同即继续执行。程序的各部分以及一些功能在程序清单上也有标注。74.2、工作原理图图 2.工作原理图4.3、流程图R4=4? 否 是
14、 R4=0? R4=6? 是 是 R3 减到 0? 是 是 主程序显示时钟 外中断程序调整定时器中断计时开始 显示时钟时 显示闹钟时 显示时钟分 显示时钟时显示时钟秒 显示闹钟时显示闹钟分 图 3.主程序流程图 是 中断响应 秒加 1 否 否 否 中断响应 R4 回 0 中断返回 R4 加 1 否 8秒加到 60? 图 4.外中断 1 子程序流程图是 R4=1? 是 分加到 60? 是 R4=2? 是 时加到 24? R4=3? 是 是 R4=4? 图 3.定时器中断 0 子程序流程图 R4=4? 是 图 4.外中断 0 子程序流程图4.4、程序清单ORG 0000HAJMP MAINORG
15、0003HAJMP S0 ORG 000BHAJMP TIMERORG 0013HAJMP S1分加 1 时加 1 秒回 0 分回 0 时回 0 中断返回 否 否 中断响应 R0(时)加 1 R1(分)加 1 R2(秒)加 1 R5(闹钟时)加 1 R6(闹钟分)加 1 中断返回 否 否 否 否 否 否 是 9ORG 0030HMAIN: MOV R0,#00 ;存储时MOV R1,#00 ;存储分MOV R2,#00 ;存储秒MOV R3,#20 ;中断定时 50MS,2050 定时一秒MOV R4,#00 ;用于存储外中断 1 控制信号MOV R5,#00 ;存储闹钟时MOV R6,#00
16、 ;存储闹钟分MOV R7,#00MOV DPTR,#TABSETB IT1 ;设定外中断为边沿中断SETB IT0MOV IP,#05H ;外中断 0、1 优先级高,定时器低MOV IE,#87HMOV TMOD,#01H ;模式 1MOV TH0,#3CH ;15536 50MSMOV TL0,#0B0HSETB TR0;= 主程序=DIS: CJNE R4,#04,NEXT ;大于等于 4 即转去显示闹钟调节NEXT: JNC DIS3MOV A,R4 ;用于调闹钟时单独显示时JZ D1CJNE R4,#01,DIS1D1: MOV A,R0 ;显示时MOV B,#10DIV ABMOV
17、C A,A+DPTRMOV P2,#80HMOV P1,AACALL DELAYMOV A,BMOVC A,A+DPTRMOV P2,#40HMOV P1,AACALL DELAYDIS1: MOV A,R4 ;用于调闹钟时单独显示分JZ D2CJNE R4,#02,DIS2D2: MOV A,R1 ;显示分MOV B,#10DIV AB10MOVC A,A+DPTRMOV P2,#20HMOV P1,AACALL DELAYMOV A,BMOVC A,A+DPTRMOV P2,#10HMOV P1,AACALL DELAY DIS2: MOV A,R4 ;用于调闹钟时单独显示秒JZ D3CJ
18、NE R4,#03,DISD3: MOV A,R2 ;显示秒MOV B,#10DIV ABMOVC A,A+DPTRMOV P2,#08HMOV P1,AACALL DELAYMOV A,BMOVC A,A+DPTRMOV P2,#04HMOV P1,AACALL DELAYCJNE R7,#00,A1 ;判断闹钟信号是否满足AJMP DIS3A1: MOV A,#0FFH ;闹钟响两声MOV 60H,#02A2: MOV 61H,#50HA3: CPL AMOV P0,AACALL DELAYDJNZ 61H,A3DJNZ 60H,A2DEC R7 ;闹钟响两次AJMP DISDIS3: C
19、JNE R4,#04,DIS4MOV A,R5 ;显示闹钟时MOV B,#10DIV ABMOVC A,A+DPTRMOV P2,#80HMOV P1,AACALL DELAY11MOV A,BMOVC A,A+DPTRMOV P2,#40HMOV P1,AACALL DELAYAJMP DISDIS4: CJNE R4,#05,DIS5 ;如果用 DIS 编译时出现 out of range 错误,转到 DIS5 跳转MOV A,R6 ;显示闹钟分MOV B,#10DIV ABMOVC A,A+DPTRMOV P2,#20HMOV P1,AACALL DELAYMOV A,BMOVC A,A
20、+DPTRMOV P2,#10HMOV P1,AACALL DELAYDIS5: AJMP DIS;=定时器 0 中断服务程序,时间计数,24 小时=TIMER: PUSH ACCCJNE R4,#04,N1 ;调整时钟停止计时(R4=1、2、3 时不计)N1: JNC N2CJNE R4,#00,REN2: DJNZ R3,RE ;20 次定时计完即一秒,重新赋值MOV R3,#20INC R2 ;秒加一CJNE R2,#60,RE ;判断秒到 60 否MOV R2,#00INC R1 ;分加一MOV A,R5 ;闹钟定时判断,响应ADD A,R6JZ NEXT1 ;为 0 时忽略(即无设定
21、)MOV 16H,R5 ;判断时MOV A,R0CJNE A,16H,NEXT1MOV 15H,R6 ;判断分MOV A,R1CJNE A,15H,NEXT1MOV R7,#02 ;用 R7 控制主程序闹钟响应NEXT1: CJNE R1,#60,RE ;判断分到 60 否12INC R0 ;时加一MOV R1,#00MOV A,#0FFH ;整点报时,响一声MOV R7,#50HA4: CPL AMOV P0,AACALL DELAYDJNZ R7,A4CJNE R0,#24,RE ;判断时到 24 否MOV R0,#00AJMP RE;=中断 1 处理,识别调整时间时、分、秒以及闹钟时、分
22、=S1: INC R4 CJNE R4,#06,RE1MOV R4,#00AJMP RE1S0: CJNE R4,#01,F1 ;调整时INC R0CJNE R0,#24,RE1MOV R0,#00AJMP RE1F1: CJNE R4,#02,F2 ;调整分INC R1CJNE R1,#60,RE1MOV R1,#00AJMP RE1F2: CJNE R4,#03,F3 ;调整秒INC R2CJNE R2,#60,RE1MOV R2,#00AJMP RE1F3: CJNE R4,#04,F4 ;调整闹钟时INC R5CJNE R5,#24,RE1MOV R5,#00AJMP RE1F4: C
23、JNE R4,#05,RE1 ;调整闹钟分INC R6CJNE R6,#60,RE1MOV R6,#00AJMP RE1RE: MOV TH0,#3CH ;15536 50MSMOV TL0,#0B0H POP ACC13RE1: RETIDELAY: MOV 21H,#5 ;延时DL1: MOV 20H,#123DL2: DJNZ 20H,DL2DJNZ 21H,DL1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H ;共阳显示器DB 082H,0F8H,080H,090H,088H,083HDB 0C6H,0A1H,086H,08EH,0BFH,0FFHEN
24、D6、设计总结本设计是一项比较大的“工程” ,之前都没有做过这么复杂的设计,可能是对单片机的兴趣比较大,做起来只是感觉繁琐,难度就感觉不是很大。本设计是完全由本人完成,每一条连线、每一条程序、每一个字、每一张图都是本人独立完成,也投入了比较多的时间,但感觉很值得。从这次设计中也学到了很多东西,对单片机的了解更深入了,对proteu 软件的使用也更熟练了。本来想用 C 语言编写程序的,但由于之前一直都是用汇编,而且对两种语言的互换还不是很熟练,所以还是用了汇编,虽然繁杂一点,但感觉还不是很“笨拙” 。本次设计是对这一学期来单片机的学习的一次总体应用,可以体现出对单片机的掌握程度,尤其是编程方面。
25、本次设计的实用性很强,设计成果只需稍作完善就可以在生活实际中应用,当然社会上这方面的技术已经很成熟,对数字钟方面技术的提高并没太大价值。总之,本设计使我获益良多,对以后把单片机在实际中的应用提供了很好的实践经验。147、参考文献1周美娟、肖来胜.单片机技术及系统设计 M.清华大学出版社.2007.2张瑛.单片机实验指导书 EB.2010.15致谢语 本论文的工作是在我的指导老师郭江涛老师的悉心指导下完成的,老师创新的学习思想和积极奋斗的人生理念给了我很大的影响,同时对我的工作和人生规划都有很大帮助。在此衷心的感谢老师。在大学的学习过程中,我学到了很多做人与做事的学问,度过了一个充实而快乐的大学时光。非常感谢各位亲爱的老师对我的教诲和指导,无论是知识的学习,还是职业规划和人生理想,你们都给了我很多意见和指导。我也很荣幸我能和各位同学、朋友们一起走过大学四年,我们共同经历了人生中最美好的时光。感谢你们的帮助和鼓励,希望走出校门后的我们仍然是一辈子的好朋友。最后,我要感谢我的父母和亲人。是你们的辛勤工作为我创造了良好的学习条件,是你们的信任、鼓励和理解,我才会取得今天的成就。我会用我的努力工作来回报你们的养育之恩,希望你们永远身体健康,快乐长寿。168、附件:电路图