武汉大学电子信息学院电子系统综合设计课程论文基于51单片机的数字钟设计专业:年级:作者:指导教师:2010年6月20日目录1作品的背景与意义.....................................................12功能指标设计.........................................................13作品方案设计.........................................................24软件设计.............................................................3附录1系统电路图.......................................................6附录2系统软件代码.....................................错误!未定义书签。电子系统综合设计课程论文11作品的背景与意义时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。现在我们利用单片机实现数字时钟计时功能的主要内容,其中AT89C51是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点,除此外还实现了万年历和闹钟等的功能。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。单片计算机即单片微型计算机。(Single-ChipMicrocomputer),是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。所以综上所述,此次实验中所完成的数字钟有着强大的功能和良好的市场前景,复合电子类产品的发展趋势。2功能指标设计2.1基本功能电子系统综合设计课程论文21.设计一个精确的1秒定时器;2.根据1秒定时器,设计一个带小时、分钟、秒的时钟,并将小时、分钟、秒显示在LED上;3.设计小时、分钟、秒的修改按键,可分别调整小时、分钟、秒(按键设计参考电子表);2.2拓展功能1.增加小时、分钟、秒的键盘直接修改功能;2.设计闹钟功能,最多支持5个闹钟,可分别查看和修改闹钟时间,可分别设置闹钟开关。3.增加万年历功能。3作品方案设计3.1设计要求基本设计1.设计一个精确的一秒定时器2.运用一秒的定时器设计出有时、分、秒的数字钟,并显示在LED数码管上3.设置按键,能够修改数字钟时间扩展设计:1.设计闹钟功能,能够查看和修改闹钟时间及开关状态2.设计万年历功能,实现日→月→年的正常进位,能够查看和修改年月日,能够自动区分大小月和平闰年3.2模块划分●初始化程序设定初值,中断初始化●主程序程序主要执行部分,对子程序(显示、按键设置,闹钟、万年历功能)进行调用●定时器中断服务中断走时:秒→分→时●显示程序刷新8位数码管来显示时间、日期及扩展功能设置界面●按键设置通过对按键的操作实现时间及扩展功能的设置。●闹钟功能修改闹铃时间,闹铃开关的置换,修改位闪烁加以区分●万年历功能修改日期,同样的修改位闪烁加以区分电子系统综合设计课程论文33.3模块设计概述1.按键设置通过调整选择键SET_KEY选择调整位,选中位开始闪烁,此时再按增加键ADD_KEY或减少键DEC_KEY调整选中位,如果长按ADD_KEY或DEC_KEY,系统识别后则进行调时快进,此时停止闪烁,方便人眼观察。同时还增加了调秒功能:如果选中位是秒,则按增加键或减少键都是将秒清零。3.时间设置进入时间设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。4.闹钟设置进入闹钟设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。与时间设置不同的是,闹钟设置里增加了开关设置。5.万年历设置进入万年历设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。万年历设置里增加了大小月和平闰年的判别。4软件设计4.1主程序流程图电子系统综合设计课程论文44.2闹钟程序流程电子系统综合设计课程论文54.3万年历程序流程4.4中断系统结构图电子系统综合设计课程论文6附录一电子系统综合设计课程论文7附录二/*****************************************************************************///初始化MOVSP,#60H;栈指针地址赋值MOV3CH,#0CH;设置界面修改位的闪烁频率具体代码在SERVE1秒中断服务中MOV37H,#0FFH;临时地址预留给39HMOV39H,#0FFH;段位标志8位数据对应8个数码管为0的那位数码管始终暗MOV3AH,#11111101B;界面转换标志******01为时间界面取反后******10为万年历界面******00为设置闹钟界面CLRA;时间万年历初始化时间00:00:00万年历2000。01。01MOV23H,A;时MOV22H,A;分MOV21H,A;秒MOV33H,#01H;日MOV34H,#01H;月MOV35H,A;年只能显示2000-2099的时间MOV3DH,A;数码管闪烁开关初始化为关闭状态取反后11111111打开MOV40H,A;闹钟设置界面预留地址地址MOV41H,AMOV42H,AMOV43H,AMOV44H,AMOV45H,AMOV46H,AMOV47H,AMOV50H,A;闹钟1时MOV51H,A;闹钟1分MOV52H,A;闹钟1秒MOV0AH,A;闹钟1开关00000000为关闭状态取反后打开闹钟1电子系统综合设计课程论文8MOV53H,A;同上MOV54H,AMOV55H,AMOV0BH,AMOV56H,AMOV57H,A;同上MOV58H,AMOV0CH,AMOV59H,A;同上MOV5AH,AMOV5BH,AMOV0DH,AMOV5CH,A;同上MOV5DH,AMOV5EH,AMOV0EH,A**************************************************************/ORG0000H;程序入口地址LJMPSTARTORG000BH;定时器0中断入口地址LJMPTIMER_0ORG0300H/*****程序开始,初始化*****/START:SETB48H;使用一个bit位用于调时闪烁标志SETB47H;使用一个bit位用于产生脉冲用于调时快进时基MOVR1,#0;调整选择键功能标志:0正常走时、1调时、2调分、3调秒MOV20H,#00H;用于控制秒基准时钟源的产生MOV21H,#00H;清零秒寄存器MOV22H,#00H;清零分寄存器MOV23H,#00H;清零时寄存器电子系统综合设计课程论文9MOV24H,#00H;用于控制调时闪烁的基准时钟的产生MOVIP,#02H;IP,IE初始化MOVIE,#82HMOVTMOD,#01H;设定定时器0工作方式1MOVTH0,#3CHMOVTL0,#0B0H;赋定时初值,定时50msSETBTR0;启动定时器0MOVSP,#40H;重设堆栈指针/*****主程序*****/MAIN:LCALLDISPLAY;调用显示子程序LCALLKEY_SCAN;调用按键检测子程序JZMAIN;无键按下则返回重新循环LCALLSET_KEY;调用选择键处理子程序JB46H,MAIN;如果已进行长按调整(调时快进),则不再执行下面的单步调整LCALLADD_KEY;调用增加键处理子程序,加一LCALLDEC_KEY;调用减少键处理子程序,减一LJMPMAIN;重新循环/*****定时器中断服务程序*****/TIMER_0:PUSHACCPUSHPSW;保护现场MOVTH0,#3CHMOVTL0,#0B0H;重新赋定时初值CPL47H;产生脉冲用于调时快进时基INC24HMOVA,24HCJNEA,#10,ADD_TIME;产生0.5秒基准时钟,用于调时闪烁CPL48H;取反调时闪烁标志位MOV24H,#00HADD_TIME:;走时INC20HMOVA,20HCJNEA,#20,RETI1;产生1秒基准时钟MOV20H,#00H;一秒钟时间到,清零20H电子系统综合设计课程论文10MOVA,21HADDA,#01HDAA;作十进制调整MOV21H,ACJNEA,#60H,RETI1MOV21H,#00H;一分钟到MOVA,22HADDA,#01HDAAMOV22H,ACJNEA,#60H,RETI1MOV22H,#00H;一小时到MOVA,23HADDA,#01HDAAMOV23H,ACJNEA,#24H,RETI1MOV23H,#00H;到24点,清零小时RETI1:POPPSWPOPACC;恢复现场RETI;中断返回/*****显示处理*****/DISPLAY:MOVA,21H;秒ANLA,#0FHMOV2FH,A;转换出秒个位,存入2FHMOVA,21HANLA,#0F0HSWAPAMOV2EH,A;转换出秒十位,存入2EHJB46H,MIN;如果长按按键(调时快进),则跳过闪烁处理程序CJNER1,#3,MIN;如果R1为3,闪烁秒位待调整JB48H,MINMOV2FH,#0AH;使该位为10,查表得到使该位不显示的输出MOV2EH,#0AH电子系统综合设计课程论文11MIN:MOVA,22H;分ANLA,#0FHMOV2DH,A;转换出分个位,存入2DHMOVA,22HANLA,#0F0HSWAPAMOV2CH,A;转换出分十位,存入2CHJB46H,HOUR;如果长按按键(调时快进),则跳过闪烁处理程序CJNER1,#2,HOUR;如果R1为2,闪烁分位待调整JB48H,HOURMOV2DH,#0AH;使该位为10,查表得到使该位不显示的输出MOV2CH,#0AHHOUR:MOVA,23H;时ANLA,#0FHMOV2BH,A;转换出时个位,存入2BHMOVA,23HANLA,#0F0HSWAPAMOV2AH,A;转换出时十位,存入2AHJB46H,DISP;如果长按按键(调时快进),则跳过闪烁处理程序CJNER1,#1,DISP;如果R1为1,闪烁时位待调整JB48H,DISPMOV2BH,#0AH;使该位为10,查表得到使该位不显示的输出MOV2AH,#0AH/