《基于单片机的电子钟课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的电子钟课程设计.doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及系统课程设计评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业:电气工程及其自动化 班 级: 电气1003班 姓 名: 仲平 学 号: 指导教师: 李彦哲 兰州交通大学自动化与电气工程学院2013 年 3 月 7 日摘 要现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种
2、表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。关键词:单片机;电子时钟;键盘控制AbstractModern electronic clock is based on a timing tool, using the delay procedure has a certain time interrupt, is used to define a second, for a full sixty seconds minutes into
3、one by counting mode, full six hours into a full twenty-four hours, clear. In order to achieve the function of timing, is indispensable in peoples daily life tool. Digital electronic clock integrated circuit timing, decoding instead of mechanical transmission, with LED display instead of pointer dis
4、play and display the time, reduce the timing error, this table with sometimes, minutes and seconds, display the function of time, can also carry out and points proofreading, flexible piece. Here we will have learned more scattered digital circuit knowledge of organic, system link for practical, to d
5、evelop integrated circuit analysis and design our, ability to write program, debugging circuit.Keywords: single chip microcomputer; electronic clock; the keyboard control引言:通过理论设计和实物制作解决相应的实际问题,巩固和运用在单片机技术中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。 设计一个具有特定功能的电子钟。该电子钟上电或按
6、键复位后显示0时0分0秒;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。1 整体设计方案1.1 硬件总体设计硬件系统总体设计如图2.1所示。按键系统 单片机 最小系统电源供应系统输出系统图2.1 硬件系统总体设计(1) 功能芯片:本次设计采用ATMEL公司生产的AT89C51芯片,低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。(2) 电源和复位模块:AT89C51需5V电压,所以可以采用USB接口的5V电源对其
7、供电,复位电路采用按键脉冲复位 (3) 显示模块:该模块由8位8段共阳极数码管组成。(4) 键盘模块:键盘由4个独立式按键组成,P0.0-P0.2键分别接在单片机的P1.0-P1.2口。P0.3为复位键,接RST。(5) 时钟模块:为了保证同步工作方式的思想,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。如电路原理图中的晶振电路。2 数字钟的软件设计2.1 系统软件设计流程图 这次的数字电子钟设计用到很多子程序,它们的流程图如下所示主程序是先开始,启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间开始启动定时器按键检测时间显示图2.1 主程序流程图按键处理是先
8、检测秒按键是否按下,秒按键按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示出来。按秒按键?秒加1按分按键?分加1按时按键?显示时间NNYYNY时加1开始结束图2.2 按键处理流程图定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。1秒时间到?YN秒单元加160秒时间到?NY秒单元清0,分单元加1Y60分钟到?N分单元清0,秒单元加124小
9、时到?YN时单元清0时间显示开始结束图2.3 定时器中断流程图时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。秒个位计算显示秒十位计算显示分个位计算显示分十位计算显示时个位计算显示时十位计算显示开始结束图2.4 时间显示流程图2.2 数字钟的原理图用PROTUES软件,根据要求画出数字电子钟的原理图如下所示图2.5 数字钟的原理图数字电子钟的工作原理 :数字电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。因此,一个基本的
10、数字钟电路主要由显示器“时”,“分”,“秒”和单片机,还有校时电路组成。8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。“时单元”采用24进制计时器,可实现对一天24小时的累计。2.3 功能说明1. 开机时,显示00:00:00的时间开始计时。2. P0.0为功能选择键,第一次按下开始计时,第二次按下计时停止并开始“分”
11、的调整,第三次按下开始进行“时”的调整,按下第四次再次开始计时。P0.1控制“分”的调整,每按一次加1分。 P0.2控制“时”的调整,每按一次加1个小时。P0.3为复位键,按下后显示00:00:00的时间。2.4 设计主程序程序见附录12.5 电子钟系统PROTUES仿真用PROTUES软件,根据数字电子钟的原理图,画出仿真图,得到的图如下所示。图5-1 数字钟的PROTES仿真结束语我在这一次数字电子钟的设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验
12、。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识解决实际问题的能力。通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,也从中得知了很多书本上无法得知的知识。我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就
13、是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。参考文献1 王思明.单片机原理及应用系统设计.北京:科学出版社,2012.:64-1032 阎石.数字电子技术基础(第四版)北京:高等教育出版社,1998.07:42-56 3 邱光源.电路(第五版).北京:高等教育出版社,2006.05:75-95 4 李广弟.单片机基础M.北京:北京航空航天大学出版社,2007.06:26-55 附录一ORG 00H ;主程序起
14、始地址 JMP START ;跳至主程序 ORG 00H ;TIMER0中断起始地址 JMP TIM0 ;跳至TIMER0中断子程序TIM0 START: MOV SP,#70H ;设置堆栈在70H MOV 28H, #00 ;显示寄存器初值为00 MOV 2AH, #12H ;“时”寄存器初值为12H MOV 2BH, #00 ;“分”寄存器初值为00H MOV 2CH, #00 ;“秒”寄存器初值为00H MOV TMOD,#B ;设TIMER0为MODE1 MOV TH0,#HIGH (65536-4000) ;计时中断为4000微妙 MOV TL0,#LOW (65536-4000)
15、MOV IE, #B ;TIMER0中断使能 MOV R4, #250 ;中断250次 SETB TR0 ;启动TIMER0 LOOP: JB P0.0 ,N2 ;P0.0(秒)按了?不是跳至N2检查P0.1 CALL DELAY ;消除抖动 MOV A, 2CH ;将秒寄存器的值载入A ADD A, #01 ;A的内容加1 DA A ;做十进位调整 MOV 2CH, A ;将A的值存入秒寄存器 CJNE A, #60H, N1 ;是否等于60秒?不是跳转至N1 MOV 2CH,#00 ;是则清除秒寄存器的值为00 N1: JNB P0.0, $ ;P0.0(秒)放开了? CALL DELAY
16、 ;消除抖动 N2: JB P0.1, N4 ;P0.1(分)按下了吗?不是则跳至N4检查P0.2 CALL DELAY ;消除抖动 MOV A, 2BH ;将分寄存器的值载入A ADD A, #01 ;A的内容加1 DA A ;做十进位调整 MOV 2BH, A ;将A的值存入分寄存器 CJNE A, #60H, N3 ;是否等于60分?不是则跳至N1 MOV 2BH, #00 ;是则清楚分寄存器的值为00N3: JNB P0.1 ,$ ;P0.1(秒)放开了? CALL DELAY ;消除抖动N4: JB P0.2 ,LOOP ;P0.2(秒)按下了吗?不是则跳转LOOP CALL DEL
17、AY ;消除抖动 MOV A, 2AH ;将时寄存器的值载入A ADD A, #01 ;A的内容加1 DA A ;做十进位调整 MOV 2AH , A ;将A的值存入时寄存器 CJNE A ,#24H, N5 ;是否等于24小时?不是则跳至N5 MOV 2AH, #00 ;是则清除时寄存器的值为00N5: JNB P0.2 , $ ;P0.2(秒)放开了? CALL DELAY ;消除抖动 JMP LOOPTIM0: MOV TH0, #HIGH(65536-4000) ;重设计时4000微妙 MOV TL0, #LOW(65536-4000) PUSH ACC ;将A的值暂存于堆栈 PUSH
18、 PSW ;将PSW的值暂存于堆栈 DJNZ R4 , X2 ;计时1秒 MOV R4 ,#250 CALL CLOCK ;调用计时子程序CLOCK CALL DISP ;调用显示子程序X2: CALL SCAN ;调用扫描子程序 POP PSW ;至堆栈取回PSW的值 POP ACC ;至堆栈取回ACC的值 RETISCAN: MOV R0 ,#28H ;(28H)为扫描指针 INC R0 ;扫描指针加1 CJNE R0 ,#06 ,X3 ;扫描完6个显示器?不是跳至X3 MOV R0 ,#0 ;是则扫描指针为0X3: MOV A , R0 ;扫描指针载入A ADD A , #20H ;A加
19、常数20H(显示寄存器地址)=各时间 MOV R1 , A ;扫描指针存入A MOV A ,R0 ;将A高低4位交换(P1高4位为扫描值, SWAP A ;低4位为显示数据值) ORL A , R1 ;扫描值+显示值 MOV P1 , A ;输出至P1 RETCLOCK: MOV A ,2CH ;(2CH)为秒寄存器 ADD A , #1 ;加1秒 DA A ;做十进制调整 MOV 2CH ,A ;存入秒寄存器 CJNE A , #60H ,X4 ;是否超过60秒?不是则跳转X4 MOV 2CH ,#00 ;是则清除为00 MOV A ,2BH ;(2BH)为分寄存器 ADD A ,#1 ;加
20、1分 DA A ;做十进制调整 MOV 2BH , A ;存入分寄存器 CJNE A, #60H, X4 ;是否超过60分?不是则跳至X4 MOV 2BH , #00 ;是则清除为00 MOV A , 2AH ;(2AH)为时寄存器 ADD A ,#1 ;加1时 DA A ;做十进制调整 MOV 2AH , A ;存入时寄存器 CJNE A ,#24H ,X4 ;是否超过24时?不是则跳至X4 MOV 2AH ,#00 ; 是则清除为00X4: RETDISP: MOV R1 ,#20H ;(20H)为显示寄存器,R1=20H MOV A , 2CH ;将秒寄存器的内容存入A MOV B ,
21、#10H ;设B累加器的值为10H DIV AB ;A B ,商(十位数)存入A, 余数(个位数) ;存入B MOV R1 , B ;将B的内容存入(20H) INC R1 ;R1=21H MOV R1 , A ;将A 的内容存入(21H) INC R1 ;R1=22H MOV A ,2BH ;将分寄存器的内容存入A MOV B ,#10H ;将B累加器的值为10 DIV AB ;A B ,商(十位数)存入A, 余数(个位数) ;存入B MOV R1 , B ;将B的内容存入(22H) INC R1 ;R1=23H MOV R1 , A ;将A 的内容存入(23H) INC R1 ;R1=24H MOV A ,2AH ;将时寄存器的内容存入A MOV B ,#10H ;将B累加器的值为10H DIV AB ;A B ,商(十位数)存入A, 余数(个位数) ;存入B MOV R1 , A ;将B的内容存入(24H) INC R1 ;R1=25H MOV R1 ,A ;将A的内容存入(25H) RETDELAY: MOV R6 , #60 ;5毫秒D1: MOV R7 , #248 DJNZ R7 , $ DJNZ R6 , D1 RET END