武汉大学电子信息学院电子系统综合设计课程论文数字钟在单片机上的实现(汇编语言)专业:年级:作者:__________________________指导教师:2012年06月29日目录1作品的背景与意义.....................................................12功能指标设计.........................................................12.1设计要求.........................................................12.1.1基本要求...................................................12.1.2拓展要求...................................................12.2功能设计方案.....................................................13作品方案设计.........................................................23.1总体方案的选择...................................................23.2模块划分及分析...................................................33.3单模块设计流程图.................................................34模块源程序...........................................................75系统测试............................................................35测试数据:..........................................................366心得体会............................................................36电子系统综合设计课程论文11作品的背景与意义数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。2功能指标设计2.1设计要求2.1.1基本要求1.设计一个精确的1秒定时器;2.根据1秒定时器,设计一个带小时、分钟、秒的时钟,并将小时、分钟、秒显示在LED上;3.设计小时、分钟、秒的修改按键,可分别调整小时、分钟、秒(按键设计参考电子表)。2.1.2拓展要求1.增加小时、分钟、秒的键盘直接修改功能;2.设计闹钟功能,最多支持5个闹钟,可分别查看和修改闹钟时间,可分别设置闹钟开关;3.增加万年历功能。2.2功能设计方案1.实现正常走时(秒-分-时-日-月-年进位);2.能够设置时间和日期;3.能够自动区分平闰年和大小月及2月;4.具有5个闹钟及其设置功能;5.在任何设置状态下,修改位会闪烁显示。电子系统综合设计课程论文23作品方案设计3.1总体方案的选择以T0计时器中断产生1s信号,T1计时器中断刷新数码管。系统软件流程图如下所示:设计时使T0优先级高于T1以确保准确计时,初始化完成后,程序一直处于主循环模块,主循环模块中有设置按键的检测模块,当遇到设置信号暂时跳出主循环去执行相应的设置模块,时间设置,日期设置,闹钟设置3大模块彼此之间是相互独立且平行的,他们和主循环模块也不干扰。因此,当进入任何一个模块时,其他模块中的所有功能和按键都暂时失效,程序由始至终中断服务一直打开。电子系统综合设计课程论文33.2模块划分及分析••MAIN:初始化程序模块进行初值的分配(栈顶地址,初始时间,初始日期,初始化闹钟及相关标志地址)各定时器,中断初始化。▪ZHUXUNHUAN:主循环模块程序主要执行部分,包含闹钟检测,独立按键检测(日期—时间转换检测),矩阵按键检测(闹钟设置,日期设置,时间设置)3大检测部分。▪•SERVE:1s中断服务中断走时:秒→分→时→日→月→年▪XIAGSHI:刷屏中断服务(显示中断服务)以人眼不能分辨的频率一次刷新8或6位数码管来显示时间或日期及其他设置界面。▪SHIJIANSHEZHI:时间设置模块修改时间,其中修改位闪烁显示加以区分,内嵌了时间的自动检测和校正代码,既不允许修改出现不存在的时间。▪WANNIANLISHEZHI:日期设置模块修改日期,同样的修改位闪烁加以区分,内嵌了日期的自动检测和校正代码,既不允许出现不存在的日期。▪NAOZHONGSHEZHI:闹钟设置模块修改闹钟时间,闹钟开关的置换,修改位闪烁加以区分,内嵌时间自动监测和校正代码已设置正确的时间。3.3单模块设计流程图在完成的整体设计和模块划分后,便进入到工作量最大的单模块流程设计。▪主循环:电子系统综合设计课程论文4说明:1.初始化时,将保存5个闹钟(按时分秒顺序排放)的15个地址50H—5EH均清零,将对应的5个闹钟开关0AH—0EH也都清零表示闹钟开关状态,检测闹钟时,从第一个闹钟开始分别检测开关,时分秒只要有任何一项不符合及即检测下一个闹钟,到最后一个闹铃也不符合时,进入按键检测部分。2.按键检测包含独立按键和矩阵按键两部分,独立按键很简单,矩阵按键则编写检测子程序,将检测到的键值保存在寄存器R7中,没有检测到按键时不改变R7的数值。因此,检测器先将R7里面放入#0FH(只要不是#00H—#0CH中的数即可),然后调用矩阵键盘检测子程序,再来通过检测R7的数值来判断有无按键按下或按下的那个键。▪时间设置模块:电子系统综合设计课程论文5说明:1.进入时间设置模块后,时的十位开始闪烁,通过独立按键s17,s18可以向右向左移动闪烁即修改位,修改正确的判断实际上是对将要修改完成的时间进行合理性的判断,如合理则修改时间,若不合理则此次按键失效。2.检测到退出信号后,先要将所有初始化过程中改变了的标志位还原,如闪烁开关位等,再调回主循环。电子系统综合设计课程论文6▪日期设置模块:日期设置模块和时间设置模块几乎完全一样,所不同的是初始化不一样及日期设置里面有8位数码管需要刷新,而且由于日期比时间复杂,因此该模块中有两处日期校正部分,一部分是对按键修改是否正确的判断,使用方法也是使相应按键暂时失效(例如:修改前日期是2012:03:31,那么此时月份上得十位1-9所以数字都暂时失效,日个位上的2-9所以数字也都全部暂时失效);另一部分是修改后的日期校正,通过调用该子程序,防止上一部分不能消除的错误日期设置(例如:修改前日期是2012:01:31,这时修改月份个位为2则日期变为2012:02:31,显然这样的日期是不存在的,这时校正程序将日期进位,日期更改为2012:03:01)。这部分校正模块在后面的1s中断服务中也有使用。下图为该模块流程图:▪闹钟设置模块:闹钟设置模块和时间设置一是大同小异,主要区别在于多了一部分闹铃开关的电子系统综合设计课程论文7检测。下图为该模块流程图:4模块源程序ORG0000HAJMPMAINORG000BHAJMPSERVE电子系统综合设计课程论文8ORG001BHAJMPXIANSHITAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,40H;段选表0,1,2,3,4,5,6,7,8,9,熄灭,-TAB1:DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,00H,40H;段选表带小数点,同上MAIN:/*****************************************************************************///初始化MOVSP,#60H;栈指针地址赋值MOV3CH,#0CH;设置界面修改位的闪烁频率具体代码在SERVE1秒中断服务中MOV37H,#0FFH;临时地址预留给39HMOV39H,#0FFH;段位标志8位数据对应8个数码管为0的那位数码管始终暗MOV3AH,#11111101B;界面转换标志******01为时间界面取反后******10为万年历界面******00为设置闹钟界面CLRA;时间万年历初始化时间00:00:00万年历2000。01。01MOV30H,A;时MOV31H,A;分MOV32H,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为关闭状态取反后打开闹钟1MOV53H,A;同上MOV54H,A电子系统综合设计课程论文9MOV55H,AMOV0BH,AMOV56H,AMOV57H,A;同上MOV58H,AMOV0CH,AMOV59H,A;同上MOV5AH,AMOV5BH,AMOV0DH,AMOV5CH,A;同上MOV5DH,AMOV5EH,AMOV0EH,A//中断,定时器初始化MOVTMOD,#11HMOV38H,#14H;T0定时器每50ms溢出一次溢出20次为一秒SETBPT0;优先级设置1秒中断为最高级屏幕刷新优先级低SETBPT1SETBET0SETBET1SETBEAMOVTH1,#0DFH;T1定时器设置显示扫描频率MOVTL1,#0E0HMOVTH0,#3CH;T0定时器设置为50msMOVTL0,#0B0HSETBTR1SETBTR0/***********************************************************************///程序主循环ZHUXUNHUAN://闹钟检测MOVA,0AHJZNAO2;检测闹钟开关若关检测下一个闹钟,否则检测时间是否为闹钟设定时间MOVA,30HCJNEA,50H,NAO2MOVA,31HCJNEA,51H,NAO2MOVA,32HCJNEA,52H,NAO2AJMPXIANG;时间为闹钟设定时间吻合进入闹铃程序下同电子系统综合设计课程论文10NAO2:MOVA,0BHJZNAO3MOVA,30HCJNEA,53H,NAO3MOVA,31HCJNEA,54H,NAO3MOVA,32HCJNEA,55H,NAO3AJMPXIANGNAO3:MOVA,0CHJZNAO4MOVA,30HCJNEA,56H,NAO4MOVA,31HCJNEA,57H,NAO4MOVA,32HCJNEA,58H,NAO4AJMPXIANGNAO4:MOVA,0DHJZNAO5MOVA,30HCJNEA,59H,NAO5MOVA,31HCJNEA,5AH,NAO5MOVA,32HCJNEA,5BH,NAO5AJMPXIANGNAO5:MOVA,0EHJZBUMOVA,30HCJNEA,5CH,BUMOVA,31HCJNEA,5DH,BUMOVA,32HCJNEA,5EH,BUAJMPXIANG//检测独立按键BU:JBT0,ZHU1;检测s19是否按下按下进入万年历界面,否则检测矩阵键盘MOVA,3A