pxsjpgb.asm
来自「电子时钟的单片机设计」· 汇编 代码 · 共 486 行 · 第 1/2 页
ASM
486 行
ljmp kw
k171: mov 42h,#2eh ;减一后的显示指针是指向最高显示位,当前显示"灭"
mov @r0,42h
kw3: mov a,41h
inc a
xrl a,5bh ;是否第一次按k34
jz kw12
mov a,41h ;不是第一次按k34
inc a
subb a,5bh ;
jnc kw
mov 42h,#2eh
kw12: mov @r0,42h ;当前显示位是显示"灭"
mov r0,41h
mov @r0,#30h
mov 42h,@r0
ljmp kl0
kw:
mov @r0,42h
mov r0,41h
mov 42h,@r0
ljmp kl0
k41: ;键c
lcall xshg ;显示退一位(向20h方向)
mov r0,41h ;当前显示位(23h--20h)指针取到r0
mov a,@r0 ;当前显示内容取到a
xrl a,#2eh ;当前显示是否为"灭"
jz k150 ;当前显示为"灭"跳
mov a,@r0 ;当前显示内容取到a(不为"灭")
ljmp k151
k150: mov a,42h ;当前显示内容取到a(不为"灭")
k151: mov b,a
xrl a,#30h ;当前显示是否为"_"
jnz k152 ;当前显示不为"_"跳
setb 47h
mov r0,41h ;当前显示位取到a
dec r0 ;显示退一位(向20h方向)
mov @r0,#2eh ;显示"灭"(显示不移位)
mov r0,41h ;当前显示位取到a
inc r0 ;显示进一位(向23h方向)----小数点打在该位
mov a,@r0 ;当前显示内容取到a
mov b,a
k152: clr c
subb a,#0ah ;显示内容是否已经有"."
jnc k155 ;显示内容已经有"."退出
mov a,b
add a,#0ah ;打小数点
mov @r0,a
mov 42h,a
mov a,b
xrl a,#30h
jz k155
mov r0,41h
dec r0
mov a,@r0
xrl a,#30h
jnz k155
k153: lcall xs ;当前显示位(23h--20h)指针减一(向20h方向)
mov 6bh,#00h ;清除键"-"记忆
mov 5bh,#00h ;显示数据末位指针清零
k155: jnb 47h,k156 ;当前显示不为"_"跳
clr 47h
mov r0,41h
mov @r0,#30h
mov 42h,#30h
k156:
ljmp kl0
k42: ;键0
lcall xshg
mov r0,41h
mov @r0,#00h
lcall xs
mov 6bh,#00h ;清除键"-"记忆
mov 5bh,#00h ;显示数据末位指针清零
ljmp kl0
k43: ;键=
ljmp kl0
k44: ;键+
mov 4ah,41h
inc 41h
mov a,41h
mov 6ch,41h
xrl a,#24h
jnz k160
mov 41h,#20h
ajmp k160
k160: mov a,41h
xrl a,#20h
jnz kw4
mov 6ch,21h
mov a,6ch
subb a,5bh
jc kw5
kw4: mov r0,4ah
mov a,6ch
subb a,5bh
jc kw1
mov a,6ch
xrl a,5bh
jnz kw6
mov 42h,#30h
kw6: mov @r0,42h
mov r0,41h
mov 42h,@r0
ljmp kl0
kw5: push 0
mov r0,4ah
mov @r0,42h
mov r0,41h
mov @r0,#2eh
mov 42h,@r0
pop 0
ljmp kl0
kw1: mov 42h,#30h
mov @r0,42h
mov r0,41h
mov @r0,#2eh
mov 42h,@r0
ljmp kl0
;*************************************************************
; 时钟中断0 程序
;*************************************************************
it00: push 0 ;R0入栈
JnB 6EH,it001
mov r0,41h
MOV @r0,42H ;显示输入的信号与灭构成一闪一灭
ajmp it002
it001: mov r0,41h
MOV 42h,@r0
MOV @r0,#2eH ;显示灭
it002: cpl 6eh ;取反6eh闪动开关(0:开 1:关)
pop 0
reti
;***********************;
; 显示移位 ;
;***********************;
xshg:
push 0 ;r0入栈
mov a,41h ;当前显示位存A
dec a ;当前显示位减一位
xrl a,50h ;当前显示位减一位是否等于"-"显示位
jz csz0 ;当前显示位减一位等于"-"跳
mov r0,41h ;当前显示位存r0
dec r0 ;当前显示位减一位
mov a,@r0
xrl a,#2eh ;当前显示位减一位是否等于"灭"
jnz csz ;当前显示位减一位不等于"灭"退出
mov @r0,#30h ;当前显示位减一位等于"灭":"-"值送显示
ljmp csz ;退出
csz0: mov r0, 50h ;当前显示位减一位是等于"-"显示位
mov @r0,#30h ;"-"值送显示
dec 50h ;"-"值显示位减一
mov a,#1fh ;"-"值显示位是否减过最低显示位20h
xrl a,50h
jnz csz ;"-"值显示位没有减过最低显示位20h退出
mov 50h,#23h ;"-"值显示位减过最低显示位20h,指针指向最高显示位23h
csz: pop 0 ;r0出栈
ret
;***********************;
; 光标右移 ;
;***********************;
xs: dec 41h ;光标减一
mov a,41h
xrl a,#1fh ;光标是否减过最低显示位20h
jz pd ;光标是减过最低显示位20h跳
mov r0,41h ;光标所指显示位送r0
mov 42h,@r0 ;显示内容送42h
ret ;退出
pd: mov 41h,#23h ;光标是减过最低显示位20h,循环到23h
mov r0,41h ;光标所指显示位送r0
mov 42h,@r0 ;显示内容送42h
ret ;退出
;******************;
; 显示 ;
;******************;
dirv:
mov r0,#0feh
mov r1,#23h
mov a,r0
di1: jb acc.0,di10 ;位选
clr p1.3
ljmp di13
di10: setb p1.3
jb acc.1,di11
clr p1.2
ljmp di18
di11: setb p1.2
jb acc.2,di12
clr p1.1
ljmp di18
di12: setb p1.1
jb acc.3,di13
clr p1.0
ljmp di18
di13: setb p1.0
di18: mov dptr,#table ;查段选表
mov a,@r1
movc a,@a+dptr
mov p0,a ;段选
; mov r7,#01h
;di2: mov r6,#01h
;di3: djnz r6,di3
; djnz r7,di2
mov r7,#03h
di2: mov r6,#0ffh
di3: djnz r6,di3
djnz r7,di2
dec r1 ;
mov a,r0
jnb acc.4, di4
rl a ;下一位(左移)
mov r0,a
ljmp di1
di4: ret
table:
DB 03fh,06H,05bH,04fH,066H,06dH,07dH,07H
; "0" "1" "2" "3" "4" "5" "6" "7"
DB 07fH,06fH,0Bfh,86H,0dbH,0cfH,0e6H,0edH
; "8" "9" "0." "1." "2." "3." "4." "5."
DB 07dH,07H,0ffH,0efH,077H,07cH,039H,05eH
; "6." "7.""8." "9." "A" "b" "C" "d"
DB 079H,071H,03dH,076H,00fH,00eH,0f0H,038H
; "E" "F" "G" "H" "I" "J" "k" "L"
DB 0d4H,054H,05cH,073H,0dcH,050H,0d8H,078H
; "m" "n" "o" "P" "Q" "r "s" "t"
DB 03eH,018H,098H,0f2H,06eh,0ccH,000h,0f3H
; "U" "v" "w" "x" "y" "z" " " "p."
DB 08h
; "-"
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?