BCD: //BCD码转换、
; 将t_sec和T_min的秒数和分数转换为BCD码,存在于min10,min,sec10,sec中
MOV A,T_SEC;
MOV B,#10
DIV AB
MOV SEC10,a
MOV SEC,B MOV A,T_MIN;
MOV B,#10
DIV AB
MOV MIN10,a
MOV MIN,B next:
POP PSW
POP ACC
RETIINT:
PUSH ACC
推式电源
CLR EX0; 外部中断用于阻止因mode键抖动而引起的中断。
呼叫延迟10; 延迟10ms
JB P1.7、jNEXTT0; 10ms后,如果为1,则为抖动,结束中断。 中断了,相对地址太远了,造了一座桥。 mov r0,#0FFH
; //以下为扫描p1.7-p1.5
modekey:
mov a,temp1; 用于存储临时数字
MOVC A,@A DPTR; 查表
MOV P0,a; 用于调整中的显示。 只显示一位
mov p2、temp; 为了保存临时控制代码
call DELY1
MOV P2,#00H
呼叫戴尔y1; 为了与扫描的亮度相同,使用3个延迟。
CALL DELY1
CALL DELY1jb p1.7,upkey
呼叫延迟10; 延迟10ms
jb p1.7、modekey; 如果10ms后为1,则为抖动干扰,
jnb p1.7,$; 等待放松
JMP模式; 模式处理jne xtt 0: jmpnextt0up key : jbp 1.6,beginkey
呼叫延迟10
jb p1.6,upkey
jnb p1.6,$
jmp upbeginkey:
jb p1.5,modekey
呼叫延迟10
jb p1.5,beginkey
jnb p1.5,$
jmp begin mode: 用于选择要调节的数码管。 读数是倒计时中的时间值
inc r0
mov a,r0 m0:
cjne a,#00h,m1 //显示10位
mov a,tmin10
mov temp,#80h
jmp m m1:
cjne a,#01h,m2
mov a,tmin
mov temp,#40h
jmp m m2:
cjne a,#02h,m3
mov a,tsec10
mov temp,#20h
jmp m m3:
cjne a,#03h,m4
mov a,tsec
mov temp,#10h
jmp m m4:jmp NEXTT0
m:
mov temp1,a jmp modekey//跳过模式选择循环up:
up0: 对每个BCD码进行加法操作,对准。 保存在分钟和秒的计数器中
cjne r0,#00h,up1
mov a,tmin10;
国际航空航天局
cjne a,#10,upt0
mov a,#00h
upt0:
mov tmin10,a
jmp u
up1:
cjne r0,#01h,up2
mov a,tmin
国际航空航天局
cjne a,#10,upt1
mov a,#00h
upt1:
mov tmin,a
jmp u
up2:
cjne r0,#02h,up3
mov a,tsec10
国际航空航天局
cjne a,#6,upt2
mov a,#00h
upt2:
mov tsec10,a
jmp u
up3:
cjne r0,#03h,u
mov a,tsec
国际航空航天局
cjne a,#10,upt3
mov a,#00h
upt3:
mov tsec,a
u:
mov temp1,a jmp upkey begin:
mov sec10,tsec10
mov min10,tmin10
mov sec,tsec
mov min,tmin mov a,tsec10
mov b,#10
mul ab
add a,tsec
mov t_sec,a
mov a,tmin10
mov b,#10
mul ab
add a,tmin
mov t_min,a setb TR0 NEXTT0:
SETB EX0 //重启外中断
POP PSW
POP ACC
RETIDELY1: //为了消除重影延迟1ms
MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
DELAY10: 延迟10ms用于抖动去除
MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
//用于程序
DISPTAB:DB 00111111b、00000110b、01011011b、01001111b、01100110b、01101101b、0111111b、0111111b、01110000000001
DISPTABDP:DB 10111111b、10000110b、11011011b、11001111b、11100110b、11101101b、111111101 b、10000111b、1111111 b、11111111
结束; //倒计时的使用说明。 输出端口支持P0,扫描端口支持P2.7-p2.4,分十位、分一位、牌表十位、牌表一位
; //键盘输入端口为P1.5-begin,p1.6-up,p1.7-mode,p1.4-stop
正在读取注释.
请登录后发表评论!
修正失败了。 请稍后再试