时钟显示程序(可调、带定时闹钟、可关闭显示).doc_第1页
时钟显示程序(可调、带定时闹钟、可关闭显示).doc_第2页
时钟显示程序(可调、带定时闹钟、可关闭显示).doc_第3页
时钟显示程序(可调、带定时闹钟、可关闭显示).doc_第4页
时钟显示程序(可调、带定时闹钟、可关闭显示).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

; 时钟显示程序(可调、带定时闹钟、可关闭显示); =;*功能描述*;定义p3口高四位的独立按键,分为模式键、加一键、减一键、位切换键;当按下模式键,将停止显示当前时间(后台继续运行),显示定时闹钟时间;并对当前调整位进行闪烁提示,按位切换键,则可以在时、分、秒之间切换。;按加一减或减一键,对定时时间进行调节, 调节好后,会自动保存。;再按一次按模式键,进入时间调节,方法同定时闹钟调节方法;第三次按模式键,则推出调试模式,正常显示当前时间;增加数码管不显示工作方式,按一下位切换键,打开和关闭数码管;*缩写字符含义*; XS-显示 XH-循环 A-闹钟 JS-计数 DX-段选 WX-位选; SD-闪动 KG-开关 ZC-暂存 Z-总开关 TS-调时;*;-I/OBELL EQU P2.3 ;闹铃XS_WX EQU P2.7 ;数码管位选显示XS_DX EQU P2.6 ;数码管段选显示KEY_IO EQU P3XS_IO EQU P0;-SEC EQU 30H ;秒分时MIN EQU 31HHOU EQU 32HSEC_XS EQU 33H ;秒分时数码管MIN_XS EQU 34HHOU_XS EQU 35HDS_XH EQU 36H ;定时循环TZ_WX EQU 37H ;调整位选择A_SEC EQU 38H ;定时保存A_MIN EQU 39HA_HOU EQU 3AHSD_DS EQU 3BH ;闪动定时TS_SEC_ZC EQU 3CH ;调试,秒暂存SD_Z_KG EQU 20H.0 ;闪动总开关FS_KG EQU 20H.1 ;数据传送到数码管开关A_KG EQU 20H.2 ;闹钟开关A_Z_KG EQU 20H.3SD_SEC EQU 20H.4 ;闪动SD_MIN EQU 20H.5SD_HOU EQU 20H.6XS_Z_KG EQU 20H.7 ;数码管显示控制开关;* ORG 0000H AJMP MAIN ORG 000BH AJMP T0_SUB;*MAIN: MOV SP,#5FH MOV SEC,#0 ;数据初始化 MOV MIN,#0 MOV HOU,#0 MOV TZ_WX,#3 MOV A_SEC,#0 MOV A_MIN,#0 MOV A_HOU,#0 MOV SD_DS,#5 SETB FS_KG SETB A_KG SETB XS_Z_KG SETB SD_SEC SETB SD_MIN SETB SD_HOU CLR SD_Z_KG CLR A_Z_KG MOV DS_XH,#18 ;定时时长 MOV DPTR,#TAB MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 ;-WAIT: LCALL DISP LCALL KEY_SCAN JZ WAIT LCALL FUN AJMP WAIT;*功能选择*FUN: CJNE A,#1,FUN_1 SETB BELLLP1: LCALL DISP LCALL KEY_SCAN JNZ LP1 LCALL ALARM ;进入闹钟程序 LCALL TS_SUB ;进入调时程序 SETB FS_KG AJMP FUN_END ;- ;数码管显示总关闭FUN_1: CJNE A,#4,FUN_ENDLP2: LCALL DISP LCALL KEY_SCAN JNZ LP2 CPL XS_Z_KG MOV XS_IO,#0 SETB XS_WX CLR XS_WX SETB XS_DX CLR XS_DXFUN_END: SETB BELL SETB A_KG RET;*闹钟*ALARM: CLR FS_KG ;关闭当前时间显示,将定时时间让数码管显示 MOV SEC_XS,A_SEC MOV MIN_XS,A_MIN MOV HOU_XS,A_HOU SETB SD_Z_KG LCALL AD_SUB ;- ;判断调整后定时时间与之前是否相同来确定 MOV A,SEC_XS ;定时开关是否打开与重新赋值 CJNE A,A_SEC,A_1 MOV A,MIN_XS CJNE A,A_MIN,A_1 MOV A,HOU_XS CJNE A,A_HOU,A_1 AJMP A_2 ;-A_1: SETB A_Z_KG MOV A_SEC,SEC_XS MOV A_MIN,MIN_XS MOV A_HOU,HOU_XSA_2: SETB SD_SEC ;恢复秒位闪动 SETB SD_MIN SETB SD_HOU MOV TZ_WX,#3 RET;*调时*TS_SUB: MOV SEC_XS,SEC MOV TS_SEC_ZC,SEC MOV MIN_XS,MIN MOV HOU_XS,HOU LCALL AD_SUB MOV A,TS_SEC_ZC CJNE A,SEC_XS,T_1 ;比较秒,是否与当前前相同 MOV MIN,MIN_XS MOV HOU,HOU_XS AJMP T_2T_1: MOV SEC,SEC_XS ;不相同时,对当前秒重新赋值 MOV MIN,MIN_XS MOV HOU,HOU_XST_2: CLR SD_Z_KG ;清除闪动,并确保数码管处于显示状态 SETB SD_SEC SETB SD_MIN SETB SD_HOU MOV TZ_WX,#3 ;将调整位归位(秒位) RET;*按键加一减一*AD_SUB:AD_WAIT1: LCALL DISP LCALL KEY_SCAN JZ AD_WAIT1 ;- CJNE A,#1,AD_NEXT1 ;模式控制按键AD_WAIT2: LCALL DISP LCALL KEY_SCAN JNZ AD_WAIT2 AJMP AD_END ;-AD_NEXT1: CJNE A,#3,AD_NEXT2 ;加一按键INC_ONE: LCALL DISP LCALL KEY_SCAN JNZ INC_ONE MOV A,TZ_WX ;根据调整位数值,确定对哪一位进行加一处理 ;- CJNE A,#3,NO_SEC1 INC SEC_XS MOV A,SEC_XS CJNE A,#60,INC_J1 MOV SEC_XS,#0 ;秒位,加满60变0INC_J1: AJMP INC_J3 ;-NO_SEC1: CJNE A,#2,NO_MIN1 INC MIN_XS MOV A,MIN_XS CJNE A,#60,INC_J2 MOV MIN_XS,#0 ;分位,加满60变0INC_J2: AJMP INC_J3 ;-NO_MIN1: CJNE A,#1,INC_J3 INC HOU_XS MOV A,HOU_XS CJNE A,#24,INC_J3 MOV HOU_XS,#0 ;时位,加满24变0INC_J3: AJMP AD_WAIT1 ;-AD_NEXT2: CJNE A,#2,AD_NEXT3 ;减一按键DEC_ONE: LCALL DISP LCALL KEY_SCAN JNZ DEC_ONE MOV A,TZ_WX ;- CJNE A,#3,NO_SEC2 MOV A,SEC_XS CJNE A,#0,DEC_J1 MOV SEC_XS,#60DEC_J1: DEC SEC_XS AJMP DEC_J4 ;-NO_SEC2: CJNE A,#2,NO_MIN2 MOV A,MIN_XS CJNE A,#0,DEC_J2 MOV MIN_XS,#60DEC_J2: DEC MIN_XS AJMP DEC_J4 ;-NO_MIN2: CJNE A,#1,DEC_J4 MOV A,HOU_XS CJNE A,#0,DEC_J3 MOV HOU_XS,#24DEC_J3: DEC HOU_XSDEC_J4: AJMP AD_WAIT1 ;-AD_NEXT3: LCALL DISP LCALL KEY_SCAN ;位控制按键值变换 JNZ AD_NEXT3 DJNZ TZ_WX,AD_NEXT4 MOV TZ_WX,#3AD_NEXT4: AJMP AD_WAIT1AD_END: RET;*时钟定时*T0_SUB: PUSH ACC MOV TH0,#3CH MOV TL0,#0B0H ;- DJNZ DS_XH,T0_3 MOV DS_XH,#18 ;定时时长 ;- ;时间加1段 INC SEC MOV A,SEC CJNE A,#60,T0_1 MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,T0_1 MOV MIN,#0 INC HOU MOV A,HOU CJNE A,#24,T0_1 MOV HOU,#0 ;-T0_1: JNB FS_KG,T0_2 ;控制显示是否是当前时间 MOV SEC_XS,SEC MOV MIN_XS,MIN MOV HOU_XS,HOUT0_2: JNB A_Z_KG,T0_3 ;与当前时间比较,是否与定时时间一致 MOV A,SEC ;如果一致,则打开闹钟开关 CJNE A,A_SEC,T0_3 MOV A,MIN CJNE A,A_MIN,T0_3 MOV A,HOU CJNE A,A_HOU,T0_3 CLR A_KG CLR A_Z_KGT0_3: JB A_KG,T0_3_0 ;输出方波到蜂鸣器 CPL BELL ; CPL P1.7;灯闪烁 ;-T0_3_0: JNB SD_Z_KG,T0_4 ;控制闪动部分, DJNZ SD_DS,T0_4 MOV SD_DS,#5 ;根据调整位选控制闪动位 MOV A,TZ_WX CJNE A,#3,T0_3_1 CPL SD_SEC SETB SD_MIN SETB SD_HOU AJMP T0_4T0_3_1: CJNE A,#2,T0_3_2 SETB SD_SEC CPL SD_MIN SETB SD_HOU AJMP T0_4T0_3_2: CJNE A,#1,T0_4 SETB SD_SEC SETB SD_MIN CPL SD_HOUT0_4: POP ACC RETI;*数码管*DISP: JB XS_Z_KG,H_DISP ;针对指令跳转出范围的间接跳转 AJMP NO_HOU ;-秒-H_DISP: JNB SD_SEC,NO_SEC ;用于闪动控制,检查是否有扫描(下同) MOV B,#10 MOV A,SEC_XS DIV AB MOVC A,A+DPTR MOV XS_IO,#11101111B ;2位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAY ;- MOV A,B MOVC A,A+DPTR MOV XS_IO,#11011111B ;1位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAY ;-分-NO_SEC: JNB SD_MIN,NO_MIN MOV B,#10 MOV A,MIN_XS DIV AB MOVC A,A+DPTR MOV XS_IO,#11111011B ;4位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAY ;- MOV A,B MOVC A,A+DPTR MOV XS_IO,#11110111B ;3位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAY ;-时-NO_MIN: JNB SD_HOU,NO_HOU MOV B,#10 MOV A,HOU_XS DIV AB MOVC A,A+DPTR MOV XS_IO,#11111110B ;6位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAY ;- MOV A,B MOVC A,A+DPTR MOV XS_IO,#11111101B ;5位 SETB XS_WX CLR XS_WX MOV XS_IO,A SETB XS_DX CLR XS_DX LCALL DELAYNO_HOU: RET;*按键*KEY_SCAN: MOV A,KEY_IO ANL A,#0F0H CJNE A,#0F0H,MAYKEY MOV A,#0 AJMP KEY_ENDMAYKEY: LCALL DELAY MOV A,KEY_IO ANL A,#0F0H CJNE A,#0F0H,YESKEY MOV A,#0 AJMP KEY_ENDYESKEY: CJNE A,#70H,NO_KEY1 MO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论