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 + -
显示快捷键?