《基于51单片机的数字钟设计_毕业设计论文(38页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字钟设计_毕业设计论文(38页).doc(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-基于51单片机的数字钟设计_毕业设计论文-第 35 页武汉大学电子信息学院电子系统综合设计课程论文基于51单片机的数字钟设计2010 年 6 月 20日目 录1 作品的背景与意义12 功能指标设计13 作品方案设计24 软件设计3附录1 系统电路图6附录2 系统软件代码71 作品的背景与意义时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了
2、石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。现在我们利用单片机实现数字时钟计时功能的主要内容,其中AT89C51是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点,除此外还实现了万年历和闹钟等的功能。时钟电
3、路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。单片计算机即单片微型计算机。(Single-Chip Mic
4、rocomputer ),是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。所以综上所述,此次实验中所完成的数字钟有着强大的功能和良好的市场前景,复合电子类产品的发展趋势。2 功能指标设计2.1 基本功能1.设计一个精确的1秒定时器; 2.根据1秒定时器,设计一个带小时、分钟、秒的时钟,并将小时、分钟、秒显示在LED上; 3.设计小时、分钟、秒的修改按键,可分别调整小时、分钟、秒(按键设计参考电子表); 2.2 拓展功能1.增加小时、分钟、秒的键盘直接修改功能; 2.
5、设计闹钟功能,最多支持5个闹钟,可分别查看和修改闹钟时间,可分别设置闹钟开关。 3.增加万年历功能。3 作品方案设计3.1设计要求基本设计1设计一个精确的一秒定时器2运用一秒的定时器设计出有时、分、秒的数字钟,并显示在LED数码管上3设置按键,能够修改数字钟时间扩展设计:1.设计闹钟功能,能够查看和修改闹钟时间及开关状态2.设计万年历功能,实现日月年的正常进位,能够查看和修改年月日,能够自动区分大小月和平闰年3.2模块划分 初始化程序 设定初值,中断初始化主程序 程序主要执行部分,对子程序(显示、按键设置,闹钟、万年历功能)进行调用定时器中断服务 中断走时:秒分时显示程序 刷新8位数码管来显示
6、时间、日期及扩展功能设置界面按键设置 通过对按键的操作实现时间及扩展功能的设置。闹钟功能 修改闹铃时间,闹铃开关的置换,修改位闪烁加以区分万年历功能修改日期,同样的修改位闪烁加以区分 3.3模块设计概述1.按键设置通过调整选择键SET_KEY选择调整位,选中位开始闪烁,此时再按增加键ADD_KEY或减少键DEC_KEY调整选中位,如果长按ADD_KEY或DEC_KEY,系统识别后则进行调时快进,此时停止闪烁,方便人眼观察。同时还增加了调秒功能:如果选中位是秒,则按增加键或减少键都是将秒清零。3.时间设置进入时间设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KE
7、Y或减少键DEC_KEY设置所需要的时间。4.闹钟设置进入闹钟设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。与时间设置不同的是,闹钟设置里增加了开关设置。5.万年历设置 进入万年历设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。万年历设置里增加了大小月和平闰年的判别。4 软件设计4.1 主程序流程图4.2闹钟程序流程4.3万年历程序流程4.4中断系统结构图附录一附录二/初始化MOV SP,#60H;栈指针地址赋值MOV 3CH,#0CH;
8、设置界面修改位的闪烁频率 具体代码在SERVE 1秒中断服务中MOV 37H,#0FFH;临时地址 预留给39HMOV 39H,#0FFH;段位标志 8位数据对应8个数码管 为0的那位数码管始终暗MOV 3AH,#11111101B;界面转换标志*01为时间界面 取反后 *10为万年历界面 *00为设置闹钟界面CLR A ;时间万年历初始化 时间00:00:00 万年历2000。01。01MOV 23H,A;时MOV 22H,A ;分MOV 21H,A ;秒MOV 33H,#01H;日MOV 34H,#01H ;月MOV 35H,A;年 只能显示2000-2099的时间MOV 3DH,A ;数
9、码管闪烁开关 初始化为关闭状态 取反后 11111111 打开MOV 40H,A ;闹钟设置界面预留地址地址MOV 41H,AMOV 42H,AMOV 43H,AMOV 44H,AMOV 45H,AMOV 46H,AMOV 47H,AMOV 50H,A ;闹钟1 时MOV 51H,A ;闹钟1 分MOV 52H,A ;闹钟1 秒MOV 0AH,A ;闹钟1 开关 00000000为关闭状态 取反后打开闹钟1MOV 53H,A ;同上MOV 54H,AMOV 55H,AMOV 0BH,AMOV 56H,AMOV 57H,A ;同上MOV 58H,AMOV 0CH,AMOV 59H,A ;同上MO
10、V 5AH,AMOV 5BH,AMOV 0DH,AMOV 5CH,A ;同上MOV 5DH,AMOV 5EH,AMOV 0EH,A*/ORG 0000H;程序入口地址 LJMP START ORG 000BH;定时器0中断入口地址 LJMP TIMER_0ORG 0300H/*程序开始,初始化*/ START: SETB 48H;使用一个bit位用于调时闪烁标志SETB 47H;使用一个bit位用于产生脉冲用于调时快进时基MOV R1,#0;调整选择键功能标志:0正常走时、1调时、2调分、3调秒MOV 20H,#00H;用于控制秒基准时钟源的产生 MOV 21H,#00H;清零秒寄存器MOV
11、22H,#00H;清零分寄存器MOV 23H,#00H;清零时寄存器MOV 24H,#00H;用于控制调时闪烁的基准时钟的产生MOV IP,#02H;IP,IE初始化 MOV IE,#82H MOV TMOD,#01H;设定定时器0工作方式1MOV TH0,#3CH MOV TL0,#0B0H;赋定时初值,定时50ms SETB TR0;启动定时器0 MOV SP,#40H;重设堆栈指针/*主程序*/ MAIN: LCALL DISPLAY ;调用显示子程序 LCALL KEY_SCAN ;调用按键检测子程序 JZ MAIN;无键按下则返回重新循环LCALL SET_KEY ;调用选择键处理子
12、程序JB 46H,MAIN;如果已进行长按调整(调时快进),则不再执行下面的单步调整 LCALL ADD_KEY;调用增加键处理子程序,加一LCALL DEC_KEY;调用减少键处理子程序,减一 LJMP MAIN ;重新循环 /*定时器中断服务程序*/ TIMER_0: PUSH ACC PUSH PSW ;保护现场MOV TH0,#3CHMOV TL0,#0B0H ;重新赋定时初值 CPL 47H;产生脉冲用于调时快进时基INC 24HMOV A,24HCJNE A,#10,ADD_TIME;产生0.5秒基准时钟,用于调时闪烁CPL 48H;取反调时闪烁标志位MOV 24H,#00HADD
13、_TIME:;走时INC 20H MOV A,20H CJNE A,#20,RETI1;产生1秒基准时钟 MOV 20H,#00H ;一秒钟时间到,清零20HMOV A,21HADD A,#01HDA A;作十进制调整MOV 21H,A CJNE A,#60H,RETI1 MOV 21H,#00H ;一分钟到 MOV A,22H ADD A,#01H DA A MOV 22H,A CJNE A,#60H,RETI1 MOV 22H,#00H ;一小时到 MOV A,23H ADD A,#01H DA A MOV 23H,A CJNE A,#24H,RETI1 MOV 23H,#00H ;到24
14、点,清零小时RETI1: POP PSW POP ACC ;恢复现场RETI ;中断返回/*显示处理*/ DISPLAY:MOV A,21H ;秒ANL A,#0FH MOV 2FH,A;转换出秒个位,存入2FHMOV A,21H ANL A,#0F0H SWAP A MOV 2EH,A;转换出秒十位,存入2EHJB 46H,MIN;如果长按按键(调时快进),则跳过闪烁处理程序CJNE R1,#3,MIN;如果R1为3,闪烁秒位待调整JB 48H,MINMOV 2FH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2EH,#0AHMIN:MOV A,22H ;分 ANL A,#0F
15、H MOV 2DH,A;转换出分个位,存入2DHMOV A,22H ANL A,#0F0H SWAP A MOV 2CH,A;转换出分十位,存入2CHJB 46H,HOUR;如果长按按键(调时快进),则跳过闪烁处理程序CJNE R1,#2,HOUR;如果R1为2,闪烁分位待调整 JB 48H,HOURMOV 2DH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2CH,#0AHHOUR:MOV A,23H ;时 ANL A,#0FH MOV 2BH,A;转换出时个位,存入2BHMOV A,23H ANL A,#0F0H SWAP A MOV 2AH,A;转换出时十位,存入2AHJB
16、 46H,DISP;如果长按按键(调时快进),则跳过闪烁处理程序CJNE R1,#1,DISP;如果R1为1,闪烁时位待调整 JB 48H,DISPMOV 2BH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2AH,#0AH/*数码管动态扫描显示*/DISP:MOV DPTR,#TABLEMOV A,2FHMOVC A,A+DPTRMOV P0,ACLR P2.7LCALL DELAYSETB P2.7;显示秒个位MOV A,2EHMOVC A,A+DPTRMOV P0,ACLR P2.6LCALL DELAYSETB P2.6;显示秒十位MOV A,#0BFHMOV P0,AC
17、LR P2.5LCALL DELAYSETB P2.5;显示“-”MOV A,2DHMOVC A,A+DPTRMOV P0,ACLR P2.4LCALL DELAYSETB P2.4;显示分个位MOV A,2CHMOVC A,A+DPTRMOV P0,ACLR P2.3LCALL DELAYSETB P2.3;显示分十位MOV A,#0BFHMOV P0,ACLR P2.2LCALL DELAYSETB P2.2;显示“-”MOV A,2BHMOVC A,A+DPTRMOV P0,ACLR P2.1LCALL DELAYSETB P2.1;显示时个位MOV DPTR,#TABLE1;该位使用T
18、ABLE1以消除前置0MOV A,2AHMOVC A,A+DPTRMOV P0,ACLR P2.0LCALL DELAYSETB P2.0;显示时十位RET /*按键检测子程序*/ KEY_SCAN: CLR 46H;关闭长按调整(调时快进)标志MOV P1,#0FFH ;将P1口设置成输入状态 MOV A,P1 CPL A ANL A,#07H;P1口低3位连接3个按键,只判断该3位 JZ EXIT_KEY ;无键按下则返回 LCALL DELAY;延时去抖动MOV A,P1;重新判断 CPL A ANL A,#07H JZ EXIT_KEY ;键盘去抖动 MOV R5,A ;临时将键值存入
19、R5MOV R4,#00H;用于控制调时快进速度;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进 LOOP:;进入长按处理LCALL DISPLAY;使长按时显示正常 MOV A,P1 CPL A ANL A,#07HJB 47H,LOOP1INC R4;调时快进间隔时间基准加1LOOP1:CJNE R1,#03H,LOOP2;如果调秒时长按,则不处理LJMP LOOP3LOOP2:CJNE R4,#99H,LOOP3MOV R4,#70H;确认用户长按后,重新设定起始值,加快调时快进速度SETB 46H;长按调整(调时快进)标志LCALL ADD_KEYLCALL
20、 DEC_KEYLOOP3:JNZ LOOP ;等待键释放MOV A,R5;输出键值RETEXIT_KEY:RET/*延时子程序*/DELAY:MOV R7,#150 DJNZ R7,$RET /*选择键处理子程序*/ SET_KEY: CJNE R5,#01H,EXIT;选择键键值INC R1;调整选择功能标志加一CJNE R1,#4,EXITMOV R1,#0MOV 24H,#00H;调时闪烁基准清零 RET/*增加键处理子程序*/ ADD_KEY: CJNE R5,#02H,EXIT;增加键键值CJNE R1,#01H,NEXT1;选择键功能标志为1,调时,否则跳出MOV A,23HAD
21、D A,#01HDA AMOV 23H,ACJNE A,#24H,EXITMOV 23H,#00HNEXT1:CJNE R1,#02H,NEXT2;选择键功能标志为2,调分,否则跳出MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,EXITMOV 22H,#00HNEXT2:CJNE R1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出MOV 21H,#00H;如增加键按下直接清零秒RET/*减少键处理子程序*/ DEC_KEY: CJNE R5,#04H,EXIT;减少键键值CJNE R1,#01H,NEXT3;选择键功能标志为1,调时,否则跳出
22、MOV A,23HADD A,#99HDA AMOV 23H,ACJNE A,#99H,EXITMOV 23H,#23HNEXT3:CJNE R1,#02H,NEXT4;选择键功能标志为2,调分,否则跳出MOV A,22HADD A,#99HDA AMOV 22H,ACJNE A,#99H,EXITMOV 22H,#59HNEXT4:CJNE R1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出MOV 21H,#00H;如较少键按下直接清零秒RET/*万用返回子程序*/EXIT: RET/*数码管字形编码表*/TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,
23、82H,0F8H,80H,90H,0FFH ;字形显示编码TABLE1:DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小时位的十位数编码,该位如果为0则不显示/闹钟检测MOV A,0AHJZ NAO2 ;检测闹钟开关 若关检测下一个闹钟,否则检测时间是否为闹钟设定时间MOV A,30HCJNE A,50H,NAO2MOV A,31HCJNE A,51H,NAO2MOV A,32HCJNE A,52H,NAO2AJMP XIANG ;时间为闹钟设定时间吻合 进入闹铃程序 下同NAO2:MOV A,0BHJZ NAO3MOV A,30H
24、CJNE A,53H,NAO3MOV A,31HCJNE A,54H,NAO3MOV A,32HCJNE A,55H,NAO3AJMP XIANGNAO3:MOV A,0CHJZ NAO4MOV A,30HCJNE A,56H,NAO4MOV A,31HCJNE A,57H,NAO4MOV A,32HCJNE A,58H,NAO4AJMP XIANGNAO4:MOV A,0DHJZ NAO5MOV A,30HCJNE A,59H,NAO5MOV A,31HCJNE A,5AH,NAO5MOV A,32HCJNE A,5BH,NAO5AJMP XIANGNAO5:MOV A,0EHJZ BUMO
25、V A,30HCJNE A,5CH,BUMOV A,31HCJNE A,5DH,BUMOV A,32HCJNE A,5EH,BUAJMP XIANG/检测独立按键BU: JB T0,ZHU1;检测s19是否按下 按下进入万年历界面,否则检测矩阵键盘MOV A,3AH;界面转换标志取反即可使得时间和万年历界面相互转换CPL AMOV 3AH,A/检测矩阵键盘/检测到按键1,2,3,4,5时进入对应的闹钟设置界面 检测到0BH(对应s11)进入时间设置界面 检测到0CH(对应s12)进入万年历设置界面/若未检测到按键 则跳回主程序继续下一个检测周期ZHU1:MOV R7,#0FHACALL JIA
26、NCEANJIAN ;矩阵键盘检测子程序 将检测到的键值存入r7CJNE R7,#0FH,ZHU2AJMP ZHUXUNHUANZHU2:CJNE R7,#0BH,ZHU3AJMP SHIJIANSHEZHIZHU3:CJNE R7,#0CH,ZHU4AJMP WANNIANLISHEZHIZHU4:CJNE R7,#01H,ZHU5AJMP NAOZHONGSHEZHIZHU5:CJNE R7,#02H,ZHU6AJMP NAOZHONGSHEZHIZHU6:CJNE R7,#03H,ZHU7AJMP NAOZHONGSHEZHIZHU7:CJNE R7,#04H,ZHU8AJMP NAOZ
27、HONGSHEZHIZHU8:CJNE R7,#05H,ZHUXUNHUAN0AJMP NAOZHONGSHEZHIZHUXUNHUAN0: AJMP ZHUXUNHUAN/年月日校正子程序 用于万年历进位和万年历设置 防止出现不存在的时间NYR:MOV A,33HCJNE A,#32,MONTH ;日为32时,月进位日置1MOV 33H,#01HAJMP MONTH0MONTH:CJNE A,#31,MONTH1 ;日为31时 分辨大小月及2月MOV A,34HCJNE A,#4,MONTH2MOV 33H,#01HAJMP MONTH0MONTH2:CJNE A,#2,MONTH6MOV
28、33H,#01H AJMP MONTH0MONTH6:CJNE A,#6,MONTH9MOV 33H,#01HAJMP MONTH0MONTH9:CJNE A,#9,MONTH11MOV 33H,#01HAJMP MONTH0MONTH11:CJNE A,#11,RETURN0MOV 33H,#01HAJMP MONTH0MONTH1: CJNE A,#30,MONTH29 ;日为30时分辨2月 MOV A,34HCJNE A,#02H,RETURN0MOV 33H,#01HAJMP MONTH0MONTH29:CJNE A,#29,RETURN0 ;日为29时分辨闰平年2月MOV A,34H
29、CJNE A,#02H,RETURN0MOV A,35HMOV B,#04HDIV ABMOV A,BJNZ MONOAJMP RETURN0MONO:MOV 33H,#01HMONTH0: MOV A,#01H ;月进位ADD A,34HMOV 34H,ACJNE A,#0DH,RETURN0MOV 34H,#01HMOV A,#01HADD A,35HMOV 35H,ACJNE A,#100,RETURN0 ;年最多只能99MOV 35H,#00RETURN0: RET/屏幕刷新中断XIANSHI:PUSH BPUSH DPHPUSH DPL PUSH PSWPUSH ACCMOV TH1
30、,#0DFHMOV TL1,#0E0HMOV A,3AHJNB ACC.0,WANNIANLI ;界面显示判断/时间界面MOV A,21HMOV B,#0AH DIV ABMOV 10H,BMOV 11H,AMOV A,22HMOV B,#0AHDIV ABMOV 12H,BMOV 13H,AMOV A,23HMOV B,#0AHDIV ABMOV 14H,BMOV 15H,AMOV 16H,#0AHMOV 17H,#0AHAJMP LIANG/万年历界面WANNIANLI:JNB ACC.1,SHEZHIMOV A,33HMOV B,#0AH DIV ABMOV 10H,BMOV 11H,A
31、MOV A,34HMOV B,#0AHDIV ABMOV 12H,BMOV 13H,AMOV A,35HMOV B,#0AHDIV ABMOV 14H,BMOV 15H,AMOV 16H,#00HMOV 17H,#02HAJMP LIANG/闹钟设置界面SHEZHI:MOV 10H,40HMOV 11H,41HMOV 12H,42HMOV 13H,43HMOV 14H,44HMOV 15H,45HMOV 16H,46HMOV 17H,47H/万年历设置WANNIANLISHEZHI:MOV 3AH,#0FEH ;转换设置界面MOV 39H,#11011111B ;设置闪烁位MOV 37H,39
32、HMOV 3DH,#0FFH ;开闪烁开关WM: ACALL NYR ;校正 万年历JB T1,WS1 ;s20 按下 退出设置界面MOV 39H,#0FFH ;关闪烁MOV 3DH,#00H ;闪烁开关 关MOV 3AH,#11111101B ;转换成时间设置界面AJMP ZHUXUNHUANWS1: JB INT0,WS2 ;修改位 右移 同上MOV A,37HCJNE A,#11111110B,WSS0RR ARR ARRAMOV 37H,AS20:JNB INT0,S20AJMP WMWSS0:RR AMOV 37H,AS21:JNB INT0,S21 AJMP WMWS2: JB I
33、NT1,WM1 ;修改位左移MOV A,37HCJNE A,#11011111B,WSS1RL ARL ARL AMOV 37H,AS23:JNB INT1,S23AJMP WMWSS1:RL AMOV 37H,AS24:JNB INT1,S24AJMP WM/矩阵键盘检测 修改万年历 WM1:MOV R7,#0FHACALL JIANCEANJIANCJNE R7,#0FH,WSJSZ1AJMP WMWSJSZ1:MOV A,37H;检测修改位JB ACC.5,WSJSZ2/修改年十位MOV A,35HMOV B,#0AH DIV ABMOV 1FH,BMOV A,R7MOV B,#0AHM
34、UL ABADD A,1FHMOV 35H,AMOV A,37HRR AMOV 37H,AAJMP WMWSJSZ2:JB ACC.4,WSJSZ3/修改年个位MOV A,35HMOV B,#0AHDIV ABMOV B,#0AHMUL ABADD A,R7MOV 35H,AMOV A,37HRR AMOV 37H,AAJMP WMWSJSZ3:JB ACC.3,WSJSZ4/修改月十位 只能为0,1 但月个位不为0,1,2是不能修改为1月个位为0时不能修改为0CJNE R7,#00H,WSJ1MOV A,34HMOV B,#0AHDIV ABMOV A,BCJNE A,#00H,WLED4A
35、JMP WMMMWSJ1:CJNE R7,#01H,WMMMMOV A,34HMOV B,#0AHDIV ABMOV A,BCJNE A,#00H,L1AJMP WLED4L1: CJNE A,#01H,L2AJMP WLED4L2: CJNE A,#02H,WMMMAJMP WLED4WMMM:LJMP WMWLED4:MOV A,34HMOV B,#0AHDIV ABMOV 1FH,BMOV A,R7MOV B,#0AHMUL ABADD A,1FHMOV 34H,AMOV A,37HRR AMOV 37H,AAJMP WMWSJSZ4:JB ACC.2,WSJSZ5/修改月个位 但月十位
36、为1时只能修改为0,1,2 月十位为0时不能修改为0MOV A,34HMOV B,#0AHDIV ABCJNE A,#00H,WJ0CJNE R7,#00H,WLED3AJMP WWMWJ0:CJNE R7,#00H,WJ1AJMP WLED3WJ1: CJNE R7,#01H,WJ2AJMP WLED3WJ2: CJNE R7,#02H,WWMAJMP WLED3WLED3:MOV B,#0AHMUL ABADD A,R7MOV 34H,AMOV A,37HRR AMOV 37H,AWWM: AJMP WMWSJSZ5: JB ACC.1,WSJSZ6/修改日十位 只能为0,1,2,3 日个
37、位不为0,1时不能修改为3CJNE R7,#00H,WSJ10AJMP WLED2WSJ10: CJNE R7,#01H,WSJ20AJMP WLED2WSJ20:CJNE R7,#02H,WSJ30AJMP WLED2WSJ30:CJNE R7,#03H,WWMMOV A,33HMOV B,#0AHDIV ABMOV A,BCJNE A,#00H,L3AJMP WLED2L3: CJNE A,#01H,WWMAJMP WLED2WLED2:MOV A,33HMOV B,#0AHDIV ABMOV 1FH,BMOV A,R7MOV B,#0AHMUL ABADD A,1FHMOV 33H,AM
38、OV A,37HRR AMOV 37H,AAJMP WMWSJSZ6:/修改日个位 日十位为3时 只能修改为0,1 MOV A,33HMOV B,#0AHDIV ABCJNE A,#00H,LL4CJNE R7,#00H,WLED1AJMP WMLL4: CJNE A,#03H,WLED1CJNE R7,#00H,WJ4AJMP WLED1WJ4:CJNE R7,#01H,WWMAJMP WLED1WLED1:MOV B,#0AHMUL ABADD A,R7MOV 33H,AMOV 37H,#11011111BAJMP WM/矩阵按键检测子程序JIANCEANJIAN:MOV DPTR,#80
39、00HMOV A,#0F0HMOVX DPTR,AMOV DPTR,#8000HMOVX A,DPTR CPL AJNZ XIAODOURETXIAODOU:/ACALL DELAYMOV A,#0F0HMOV DPTR,#8000HMOVX A,DPTRCPL AJNZ PANRETPAN: MOV DPTR,#8000HMOV A,#11111110BMOVX DPTR,AMOV DPTR,#8000HMOVX A,DPTRJNB ACC.0,KEY10;低电位说明按键在该位JNB ACC.1,KEY20JNB ACC.2,KEY30JNB ACC.3,KEY40MOV DPTR,#8000HMOV A,#11111101BMOVX DPTR,AMOV DPTR,#8000HMOVX A,DPTRJNB ACC.0,KEY50JNB ACC.1,KEY60JNB ACC.2,KEY70JNB ACC.3,KEY80MOV DPTR,#8000HMOV A,#11111011BMOVX DPTR,AMOV DPTR,#8000HMOVX A,DPTRJNB ACC.0,KEY90JNB ACC.1,KEY00JNB ACC.2
限制150内