📄 pxsjpjs.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 + -