⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pxsjpjs.asm

📁 电子时钟的单片机设计
💻 ASM
字号:
        org     0000h
        ljmp    main
;***************************;
;         主程序	    ;
;***************************;
        org     0030h
main:   
	mov   28h,#00h		 ;标记位总清零
	mov   20h,#2eh	         ;显示缓冲低位
	mov   21h,#2eh
        mov   22h,#2eh
        mov   23h,#2fh           ;显示缓冲高位(让23单元显示P.)
key:    lcall dirv
;-------------------------;
;         读键            ;
;-------------------------;
kl0:  
       mov   a,#0fh
       mov   p2,a
       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
       jnb   acc.0,kl1          ;判断有无键按下
       jnb   acc.1,kl1          ;判断有无键按下
       jnb   acc.2,kl1          ;判断有无键按下
       jnb   acc.3,kl1          ;判断有无键按下
       lcall dirv
       ljmp  kl0                ;无键按下继续
kl1:   lcall dirv               ;20h单元位0为1处于最高位带小数点显示
kl12:  mov   a,#0fh
       mov   p2,a
       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
       jnb   acc.0,kl2
       jnb   acc.1,kl2
       jnb   acc.2,kl2
       jnb   acc.3,kl2          ;判断有无键按下
       clr   51h               ;清除键按下标记:28h单元位1为1则键按下
       lcall dirv
       ljmp  kl0               ;为抖动没键按下继续	
kl2:   jnb   51h,ke1y          ;28h单元位1为1则键按下已经处理过反回
       ljmp  kl0    
ke1y:  setb  51h               ;打上键按下标记:28h单元位1为1则键按下
       mov   r2,#0efh          ;确实有键开始扫描键值
       mov   r4,#00h
pk1:  ; mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
       mov   a,r2
       mov   p2,a
       mov   a,p2               ;p2口低四位为键扫描输入,高四位数出
       mov   r1,#00h            ;r1中为键行数
       jnb   acc.0,pk20          ;判有无键按下
       lcall kll2
       jnb   acc.1,pk20          ;判有无键按下
       lcall kll2
       jnb   acc.2,pk20          ;判有无键按下
       lcall kll2
       jnb   acc.3,pk20          ;判有无键按下
       ljmp  pk2
pk20:  mov   a,#00h
       add   a,r4
       add   a,r1
       ljmp  pk5               ;扫到键值去散转处理
pk2:   inc   r4
       mov   a,r2
       jnb   acc.7,pk3         ;判断4个键是否扫描完
       rl    a
       mov   r2,a
       ajmp  pk1               ;16个键没扫完继续
pk3:   ajmp  kl0               ;16个键全扫完为误动作反回   

kll2:  mov   r0,a
       mov   a,r1
       add   a,#04h              ;加一行四个键
       mov   r1,a
       mov   a,r0
       ret
   
;------------------------------;
;       键状态判断子程序       ;
;------------------------------;
pk5:    mov   dptr,#tb0         ;散转处理
        mov   r2,a
        add   a,r2
        jnc   pk6
        inc   dph
pk6:    jmp   @a+dptr
tb0:    ajmp  k11                ;键7
        ajmp  k12                ;键8
        ajmp  k13                ;键9
        ajmp  k14                ;键/

        ajmp  k21                ;键4
        ajmp  k22                ;键5
        ajmp  k23                ;键6
        ajmp  k24                ;键x

        ajmp  k31                ;键1
        ajmp  k32                ;键2
        ajmp  k33                ;键3
        ajmp  k34                ;键-

        ajmp  k41                ;键c
        ajmp  k42                ;键0
        ajmp  k43                ;键=
        ajmp  k44                ;键+

        ljmp  kl0

k11:                            ;键7
        lcall zy
        mov   20h,#07h
        ljmp  kl0
k12:                            ;键8
	lcall zy
        mov   20h,#08h
        ljmp  kl0
k13:                            ;键9
	lcall zy
        mov   20h,#09h
	ljmp  kl0
k14:                            ;键/
	ljmp  kl0

k21:                            ;键4
	lcall zy
        mov   20h,#04h
	ljmp  kl0
k22:                            ;键5
	lcall zy
        mov   20h,#05h
	ljmp  kl0
k23:                            ;键6
	lcall zy
        mov   20h,#06h
	ljmp  kl0
k24:                            ;键x
	ljmp  kl0

k31:                            ;键1
	lcall zy
        mov   20h,#01h
	ljmp  kl0
k32:                            ;键2
	lcall zy
        mov   20h,#02h
	ljmp  kl0
k33:                            ;键3
	lcall zy
        mov   20h,#03h
	ljmp  kl0
k34:                            ;键-
	ljmp  kl0

k41:                            ;键c
        mov   a,20h
        clr   c
        subb  a,#0ah
        jnc    k410	        ;够减》a
        mov   a,20h              ;不够减《a
        add   a,#0ah
        mov   20h,a
	ljmp  k412
k410:   mov   20h,a
k412:	ljmp  kl0
k42:                            ;键0
	lcall zy
        mov   20h,#00h
	ljmp  kl0
k43:                            ;键=
	ljmp  kl0
k44:                            ;键+
        ljmp  kl0
;***********************;
;      光标左移		;
;***********************;
zy:    mov    23h,22h
       mov    22h,21h
       mov    21h,20h
       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 0fdH,087H,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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -