数字电子钟设计说明书 - 图文 下载本文

;---------------------------------- ;显P.程序

;---------------------------------- START:

MOV A, #0FEH TT:

;位选

MOV R6, #2 ;闪烁次数

MOV P2, A ;将#0FEH赋值给P2口

MOV P0, #0CH ;段码\LCALL DELAY1 ;\显示亮度

JNB P1.0, TRB ;键是否按下,没按下则转移 DJNZ R6, TT ;控制循环,R6不为零则转移 LCALL DELAY1 ;控制循环右移时间 RR A ;位选右移 MOV R6, #2 ;重新赋值R6

JB P1.0, TT ;键是否按下,没按下则转移 TRB: LCALL DELAY KAI: SETB P1.0 CLR

A

MOV P0, #0FFH LCALL DELAY1

;延时去抖 ;置位P1.0

JNB P1.0, KAI ;再次判断键是否按下

;状态恢复 ;把P1口置一 ;调延时

SETB 48H ;用于调时闪烁标志

SETB 47H ;用于产生脉冲用于调时快进的脉冲 MOV R1, #0 ;键功能标志:0计时、1调时、2调分、3调秒

;------------------------------- ;清16位寄存器及初始化

;50H 用于控制秒基准时钟源的产生 ;51H 清零秒寄存器 ;52H 清零分寄存器 ;53H 清零时寄存器

;5FH 用于秒个位;5EH 用于秒十位 ;5DH 用于分个位;5CH 用于分十位 ;5BH 用于时个位;5AH 用于时十位

31

;54H 用于控制调时闪烁 ;------------------------------- MOV R6, #10H

CLEARJCQ:MOV @R0, #00H ;清寄存器 INC R0

;间址突破口指向下一地址单元

DJNZ R6, CLEARJCQ ;清零00H之后的16个内存单元 MOV IP, #02H ;定时器0置高优先级 SETB EA SETB ET0

;开总中断允许

;开定时器0中断

;赋定时初值TH0

MOV R0, #50H ;初始化

MOV TMOD, #01H ;设定定时器0工作方式1 MOV TH0, #3CH SETB TR0 ;-------- ;主程序 ;--------

MAIN:LCALL DISPLAY LCALL KEY_SCAN JZ MAIN

LCALL SET_KEY 面的调整

LCALL ADD_KEY LCALL DEC_KEY ;--------------- ; 显示处理程序 ;---------------

DISPLAY:MOV A, ANL A, #0FH MOV A, 51H

MOV TL0, #0B0H ;赋定时初值TL0,定时50ms

;启动定时器0

MOV SP, #70H ;堆栈

;调显示子程序 ;调键扫描子程序

;无键按下则跳到主程序 ;键处理子程序

JB 46H, MAIN ;如果已进行调时快进,则不再执行下

;调用增加键处理子程序,加一 ;调用减少键处理子程序,减一

LJMP MAIN ;重新循环

51H ;读秒值

;屏蔽高4位 ;读秒值

32

MOV 5FH, A ;转换出秒个位,存入5FH

ANL A, #0F0H ;屏蔽低4位 SWAP A

;A高低半字节交换

MOV 5EH, A ;转换出秒十位,存入5EH

JB 46H, MIN ;如果调时快进,则跳过闪烁处理程序 CJNE R1, #3,MIN ;如果R1为3,闪烁秒位待调整 JB 48H, MIN MOV 5EH, #0AH ANL A, #0FH

;跳转至分处理程序段

;使该位为10,查表得使该位不显示

;读分值 ;屏蔽高4位

MOV 5FH, #0AH ;使该位为10,查表得使该位不显示 MIN:MOV A, 52H

MOV 5DH, A ;转换出分个位,存入5DH MOV A, 52H ;读分值 ANL A, #0F0H SWAP A JB

;屏蔽低4位

;累加器高低位交换

MOV 5CH, A ;转换出分十位,存入5CH

46H, HOUR ;如果调时快进,跳过闪烁处理程序

CJNE R1, #2,HOUR ;如果R1为2,闪烁分位待调整 JB 48H, HOUR ;跳转至时处理程序段 MOV 5DH, #0AH ;分个位 MOV 5CH, #0AH ;分十位 HOUR:MOV A, 53H ;读时值 ANL A, #0FH

;屏蔽高4位

MOV 5BH, A ;转换出时个位,存入5BH MOV A, 53H ;读时值 ANL A, #0F0H SWAP A

;屏蔽低4位 ;累加器高低位交换

MOV 5AH, A ;转换出时十位,存入5AH JB 46H, DISP ;跳过闪烁处理程序

CJNE R1, #1,DISP ;如果R1为1,闪烁时位待调整 JB 48H, DISP ;跳转至显示程序

MOV 5BH, #0AH ;使该位为10,查表得使该位不显示 MOV 5AH, #0AH ;------------------- ;数码管动态扫描显示

33

;-------------------

DISP:MOV DPTR, #TABLE MOVC A, @A+DPTR MOV P0, A CLR P2.0

;送常数表首地址

MOV A, 5FH ;秒个位

;取常数 ;常数送P0口 ;复位P2.0

LCALL

SETB MOV MOVC

MOV CLR LCALL SETB MOV MOV CLR LCALL SETB MOV MOVC MOV CLR LCALL SETB MOV MOVC MOV CLR

LCALL SETB MOV MOV CLR

DELAY

;调延时

P2.0 ;显示秒个位 A, 5EH ;秒十位 A,

@A+DPTR ;取常数

P0, A

;常数送P0口

P2.1

;复位P2.0

DELAY

;调延时

P2.1 ;显示秒十位 A, #0BFH ;“-”段码送累加器 P0, A ;“-”段码送P0口 P2.5

;复位P2.0

DELAY

;调延时

P2.5 ;显示“-”

A, 5DH ;分个位 A, @A+DPTR

;取分个位段码

P0, A ;分个位段码送P0 P2.3

;复位P2.0 DELAY

;调延时

P2.3 ;显示分个位 A, 5CH ;分十位送累加器 A, @A+DPTR ;取分十位段码

P0, A

;分十位段码送P0口 P2.4

;复位P2.0

DELAY

;调延时

P2.4 ;显示分十位 A, #0BFH ;“-”段码送累加器 P0,

A

;“-”段码送P0口

P2.2 ;复位P2.0

34