数字电子钟程序_第1页
数字电子钟程序_第2页
数字电子钟程序_第3页
全文预览已结束

下载本文档

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

文档简介

1、;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时 ;显示格式:00-00-00(设置小时十位为0时,不显示) ;通过3只按键来调整时间 ;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁 ; 增加键ADD_KEY:P1.1;按一次使选中位加1 ; 减少键DEC_KEY:P1.2;按一次使选中位减1 ;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁 ;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能 ;P0口输出数码管段选信号,P2口输出数码管位选信号;晶振11.0592M ;P3.1为蜂鸣器发声报时 ;编程人:郑振凡

2、编写日期:2009年12月2日 修改日期(最终):2009年12月6日 ;- ;- ;程序入口 ;- ORG 0000H ;程序入口地址 LJMP START ORG 000BH ;定时器0中断入口地址 LJMP TIMET0 ORG 1000H ;- ;显P.程序 ;功能:可以在8个数码闪烁移位进行屏保 ;- START: MOV R6, #2 ;闪烁次数 MOV A, #0FEH ;位选 TT: MOV P2, A MOV P0, #0CH ;段码"P." LCALL DELAY MOV P2, #0FFH DJNZ R6, TT LCALL DELAY LCALL D

3、ELAY1 RR A JB P1.0, TT ;键是否按下,没按下则转移 LCALL DELAY ;延时去抖 JNB P1.0, KAI ;再次判断键是否按下 KAI: SETB P1.0 CLR A ;状态恢复 MOV P0, #0FFH LCALL DELAY1 SETB 48H ;用于调时闪烁标志 SETB 47H ;用于产生脉冲用于调时快进的脉冲 MOV R1, #0 ;键功能标志:0计时、1调时、2调分、3调秒 ;- ;清16位寄存器及初始化 ;50H 用于控制秒基准时钟源的产生 ;51H 清零秒寄存器 ;52H 清零分寄存器 ;53H 清零时寄存器 ;5FH 用于秒个位;5EH 用

4、于秒十位 ;5DH 用于分个位;5CH 用于分十位 ;5BH 用于时个位;5AH 用于时十位 ;54H 用于控制调时闪烁 ;- MOV R0, #50H ;初始化 MOV R6, #10H CLEARJCQ: MOV R0, #00H ;清寄存器 INC R0 DJNZ R6, CLEARJCQ MOV IP, #02H SETB EA SETB ET0 MOV TMOD, #01H ;设定定时器0工作方式1 MOV TH0, #3CH MOV TL0, #0B0H ;赋定时初值,定时50ms SETB TR0 ;启动定时器0 MOV SP, #70H ;堆栈 ;- ;主程序 ;- MAIN:

5、 LCALL DISPLAY LCALL KEY_SCAN JZ MAIN LCALL SET_KEY JB 46H, MAIN ;如果已进行调时快进,则不再执行下 LCALL ADD_KEY ;调用增加键处理子程序,加一 LCALL DEC_KEY ;调用减少键处理子程序,减一 LJMP MAIN ;重新循环 ;- ; 显示处理程序 ;- DISPLAY:MOV A, 51H ANL A, #0FH MOV 5FH, A ;转换出秒个位,存入5FH MOV A, 51H ANL A, #0F0H SWAP A MOV 5EH, A ;转换出秒十位,存入5EH JB 46H, MIN ;如果调

6、时快进,则跳过闪烁处理程序 CJNE R1, #3,MIN ;如果R1为3,闪烁秒位待调整 JB 48H, MIN MOV 5FH, #0AH ;使该位为10,查表得到使该位不显示 MOV 5EH, #0AH MIN: MOV A, 52H ANL A, #0FH MOV 5DH, A ;转换出分个位,存入5DH MOV A, 52H ANL A, #0F0H SWAP A MOV 5CH, A ;转换出分十位,存入5CH JB 46H, HOUR CJNE R1, #2,HOUR ;如果R1为2,闪烁分位待调整 JB 48H, HOUR MOV 5DH, #0AH MOV 5CH, #0AH

7、 HOUR: MOV A, 53H ANL A, #0FH MOV 5BH, A ;转换出时个位,存入5BH MOV A, 53H ANL A, #0F0H SWAP A MOV 5AH, A ;转换出时十位,存入5AH JB 46H, DISP CJNE R1, #1,DISP ;如果R1为1,闪烁时位待调整 JB 48H, DISP MOV 5BH, #0AH ;使该位为10,查表得到使该位不显示 MOV 5AH, #0AH ;- ;数码管动态扫描显示 ;- DISP: MOV DPTR, #TABLE MOV A, 5FH MOVC A, A+DPTR MOV P0, A CLR P2.

8、0 LCALL DELAY SETB P2.0 ;显示秒个位 MOV A, 5EH MOVC A, A+DPTR MOV P0, A CLR P2.1 LCALL DELAY SETB P2.1 ;显示秒十位 MOV A, #0BFH MOV P0, A CLR P2.5 LCALL DELAY SETB P2.5 ;显示“-” MOV A, 5DH MOVC A, A+DPTR MOV P0, A CLR P2.3 LCALL DELAY SETB P2.3 ;显示分个位 MOV A, 5CH MOVC A, A+DPTR MOV P0, A CLR P2.4 LCALL DELAY SET

9、B P2.4 ;显示分十位 MOV A, #0BFH MOV P0, A CLR P2.2 LCALL DELAY SETB P2.2 ;显示“-” MOV A, 5BH MOVC A, A+DPTR MOV P0, A CLR P2.6 LCALL DELAY SETB P2.6 ;显示时个位 MOV DPTR, #TABLE1 ;该位使用TABLE1以消除时的十位置0 MOV A, 5AH MOVC A, A+DPTR MOV P0, A CLR P2.7 LCALL DELAY SETB P2.7 ;显示时十位 RET ;- ;定时器中断1s程序 ;- TIMET0:PUSH ACC ;

10、保护现场 PUSH PSW MOV TH0, #3CH MOV TL0, #0B0H CPL 47H ;产生脉冲用于调时快进 INC 54H MOV A, 54H CJNE A, #10,ADD_TIME;产生0.5秒,用于调时闪烁 CPL 48H ;取反调时闪烁标志位 MOV 54H, #00H ADD_TIME:INC 50H MOV A, 50H CJNE A, #10,ZDBACD ;整点报时时蜂鸣器响延迟时间 SETB P3.1 ;关蜂鸣器 ZDBACD:CJNE A, #20,RETI1 ;产生1秒时钟 MOV 50H, #00H ;一秒钟时间到,清零50H MOV A, 51H

11、ADD A, #01H DA A ;十进制调整 MOV 51H, A CJNE A, #60H,RETI1 MOV 51H, #00H ;一分钟到 MOV A, 52H ADD A, #01H DA A MOV 52H, A CJNE A, #60H,RETI1 CLR P3.1 MOV 52H, #00H ;一小时到,开蜂鸣器,清分显示 MOV A, 53H ADD A, #01H DA A MOV 53H, A CJNE A, #24H,RETI1 MOV 53H, #00H ;到24点,清零小时 RETI1:POP PSW POP ACC ;恢复现场 RETI ;中断返回 ;- ;键盘扫

12、描程序 ;R4设置为00H是为了在进入长按处理前加长延时,以区分长按与短按键 ;- KEY_SCAN:CLR 46H ;关闭调时快进标志 MOV P1, #0FFH ;将P1口设置成输入状态 MOV A, P1 CPL A ANL A, #07H ;1口低3位连接3个按键,只判断该3位 JZ EXIT_KEY LCALL DELAY ;延时去抖动 MOV A, P1 ;重新判断 CPL A ANL A, #07H JZ EXIT_KEY MOV R5, A MOV R4, #00H ;用于控制调时快进速度 LOOP: LCALL DISPLAY ;进入长按处理 MOV A, P1 CPL A

13、ANL A, #07H JB 47H, LOOP1 INC R4 ;调时快进间隔时间基准加1 LOOP1: CJNE R1, #03H,LOOP2 ;如果调秒时长按,则不处理 LJMP LOOP3 LOOP2: CJNE R4, #99H,LOOP3 MOV R4, #70H ;确认长按后,加快调时快进速度 SETB 46H LCALL ADD_KEY LCALL DEC_KEY LOOP3: JNZ LOOP ;等待键释放 MOV A, R5 ;输出键值 RET EXIT_KEY:RET ;- ;延时子程序 ;- DELAY:MOV R7,#200 DJNZ R7,$ RET DELAY1:

14、MOV R3,#50 MOV TMOD,#00H MOV TH1,#63H MOV TL1,#18H SETB TR1 LP1:JBC TF1,LP2 SJMP LP1 LP2:MOV TH1,#63H MOV TL1,#18H DJNZ R3,LP1 RET ;- ;选择键处理子程序 ;- SET_KEY:CJNE R5, #01H,EXIT ;选择键键值 INC R1 ;调整选择功能标志加一 CJNE R1, #4,EXIT MOV R1, #0 MOV 54H, #00H ;调时闪烁清零 RET ;- ;加1子程序 ;- ADD_KEY:CJNE R5, #02H,EXIT ;加1键值

15、CJNE R1, #01H,NEXT1 ;选择键功能标志为1调时,否则跳出 MOV A, 53H ADD A, #01H DA A MOV 53H, A CJNE A, #24H,EXIT MOV 53H, #00H NEXT1:CJNE R1, #02H,NEXT2 ;选择键功能标志为2调分,否则跳出 MOV A, 52H ADD A, #01H DA A MOV 52H, A CJNE A, #60H,EXIT MOV 52H, #00H NEXT2:CJNE R1, #03H,EXIT ;选择键功能标志为3调秒,否则跳出 MOV A, 51H ADD A, #01H DA A MOV 5

16、1H, A CJNE A, #60H,EXIT MOV 51H, #00H ;如加1键按下直接清零秒 RET ;- ;减1子程序 ;- DEC_KEY:CJNE R5, #04H,EXIT ;减1键键值 CJNE R1, #01H,NEXT3 ;选择键功能标志为1调时,否则跳出 MOV A, 53H ADD A, #99H DA A MOV 53H, A CJNE A, #99H,EXIT MOV 53H, #23H NEXT3:CJNE R1, #02H,NEXT4 ;选择键功能标志为2调分,否则跳出 MOV A, 52H ADD A, #99H DA A MOV 52H, A CJNE A

17、, #99H,EXIT MOV 52H, #59H NEXT4:CJNE R1, #03H,EXIT ;选择键功能标志为3调秒,否则跳出 MOV A, 51H ADD A, #99H DA A MOV 51H, A CJNE A, #99H,EXIT MOV 51H, #59H RET ;- ;返回子程序 ;- EXIT:RET ;- ;数码管字形编码表 ;- TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;"0","1","2","3","4","5","6","7",&

温馨提示

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

评论

0/150

提交评论