📄 key4.asm
字号:
xsdsm equ 30h
fwdsm equ 31h
txdsm equ 32h
txjym equ 33h
xsm1 equ 37h ;显示缓冲区
xsm2 equ 38h ;
xsm3 equ 39h ;
xsm4 equ 3ah ;
xsm5 equ 3bh ;
xsm6 equ 3ch ;
xsmm1 equ 3dh
xsmm2 equ 3eh
xsmm3 equ 3fh
xsmm4 equ 40h
xsmm5 equ 41h
xsmm6 equ 42h
txsjm equ 24h
jpm equ 25h
dqdsm equ 26h
txzcbzm equ 27h
xsclm equ 43h ;显示处理单元
sjzzm equ 44h
jpclbzm equ 49h
raddlm equ 4ch
raddhm equ 4dh
wdatam equ 4eh
xsdsm1 equ 4fh
xsjym equ 50h
secm equ 51h ;秒数据
minm equ 52h ;分数据
hrm equ 53h ;小时数据
datem equ 54h ;日数据
monthm equ 55h ;月数据
weekm equ 56h ;星期数据
yearm equ 57h ;年数据低2位
kscanfm equ 58h
keyctm equ 59h
keym1 equ 5ah
keym2 equ 5bh
keybm1 equ 5ch
keybm2 equ 5dh
adsjdzl equ 34h
adsjdzh equ 35h
dpm equ 23h
dp1 bit 18h
dp2 bit 19h
dp3 bit 1ah
dp4 bit 1bh
dp5 bit 1ch
dp6 bit 1dh
ptt bit 1eh
swa bit 1fh
org 0000h
ljmp start
org 000bh
ljmp zdt0
org 0100h
start: mov sp,#5eh
;-------------------------------t0 10 ms中断初始化
mov tmod,#00100001b
; setb pt0
mov tl0,#00h
mov th0,#0dch
setb tr0
setb et0
setb ea
;--------------------------数码管显示存储单元初始化
mov dpm,#0ffh
mov xsm1,#00h
mov xsm2,#00h
mov xsm3,#00h
mov xsm4,#00h
mov xsm5,#00h
mov xsm6,#00h
mov r4,#00h
;------------------------------
acall key0
acall display
;
jk:nop
jk4: mov a,kscanfm
cjne a,#55h,jk
ljmp keypr
jk3: acall key0
ljmp jk
keypr: mov a,keym1
cjne a,#0f7h,jk3 ;f1
acall key0
mov xsmm1,#01h
mov xsmm2,#0ffh
mov xsmm3,#0ffh
mov xsmm4,#0ffh
mov xsmm5,#0ffh
mov xsmm6,#0ffh
mov xsm1,xsmm1
mov xsm2,xsmm2
mov xsm3,xsmm3
mov xsm4,xsmm4
mov xsm5,xsmm5
mov xsm6,xsmm6
lcall display
keypr9: mov a,kscanfm
cjne a,#55h,keypr9
mov a,keym2
cjne a,#0feh,keypr3
acall key0
mov xsm2,#00h
lcall display
ljmp dsxg ;时钟修改0
keypr3: mov a,keym1
cjne a,#7fh,keypr4
acall key0
mov xsm2,#01h
lcall display
ljmp dssxg ;时钟修改1
keypr4: mov a,keym2
cjne a,#0f7h,keypr5
acall key0
mov xsm2,#02h
lcall display
ljmp adzh ;ad转换2
keypr5: mov a,keym2
cjne a,#7fh,keypr6
acall key0
mov xsm2,#03h
lcall display
ljmp cd4014o ;并串转换3
keypr6: mov a,keym1
cjne a,#0bfh,keypr7
acall key0
mov xsm2,#04h
lcall display ljmp tx485 ;485通信4
keypr7: mov a,keym2
cjne a,#0fbh,keypr8
acall key0
mov xsm2,#05h
lcall display
ljmp tx232 ;232通信5
keypr8: mov a,keym2
cjne a,#0bfh,keypr10
acall key0
mov xsm2,#06h
lcall display
ljmp keyshou ;桉数字健显示健值6
keypr10:ljmp keypr
;---------------------------------;桉数字健显示健值
;-----------------------键盘存储单元初始化
key0: mov keybm1,#0ffh
mov keybm2,#0ffh
mov keym1,#0ffh
mov keym2,#0ffh
mov kscanfm,#00h ;kscanfm键盘扫描标志单元
ret
dsxg: ljmp jk ;时钟修改0,
dssxg: ljmp jk ;时钟修改1
adzh: ljmp jk ;ad转换2
cd4014o:ljmp jk ;并串转换3
tx485: ljmp jk ;485通信4
tx232: ljmp jk ;232通信5
keyshou:mov a,kscanfm
cjne a,#55h,keyshou
mov a,keym1
cjne a,#0efh,keyshou0 ;是否按下取消健
acall key0
ljmp jk
keyshou0:acall cbzc0
mov xsm2,r4
acall display
acall key0
ajmp keyshou
;-----------------------------------;10ms中断扫描
zdt0: push psw
push acc
push dpl
push dph
clr PSW.4
setb PSW.3
mov tl0,#00h
mov th0,#0dch
setb tr0
setb et0
zdjp9: acall zdjp1 ;读键值
mov a,keyctm
jz zdjp90 ;是否健按下
dec a
jz zdjp91
ljmp zdjp6 ;键盘存储单元初始化
zdjp91: mov a,kscanfm ;kscanfm键盘扫描标志单元
cjne a,#00h,zdjp8 ;kscanfm=00h,无健按下
mov kscanfm,#44h
mov keybm1,keym1 ;keybm1键盘前次读数存储单元1
mov keybm2,keym2 ;keybm2键盘前次读数存储单元2
ljmp zdds
zdjp90: mov a,kscanfm ;kscanfm键盘扫描标志单元
cjne a,#0aah,zdjp92 ;kscanfm=aah,健按下
mov kscanfm,#55h ;健释放,执行任务,kscanfm=55h
;----------------------------------健值翻译
mov keym1,keybm1
mov keym2,keybm2
; acall cbzc0
;---------------------------------;桉数字健显示健值
; mov xsm2,r4
; acall display
;--------------------------
; acall key0
zdjp92: cjne a,#44h,zdjp93
ljmp zdds
zdjp8: cjne a,#44h,zdjp93 ;kscanfm=44h,暂态,健按下去抖动
mov a,keym1
cjne a,keybm1,zdjp6
mov a,keym2
cjne a,keybm2,zdjp6
mov kscanfm,#0aah
zdjp93: ljmp zdds
zdjp6: mov kscanfm,#00h
mov keybm1,#0ffh
mov keybm2,#0ffh
mov keym1,#0ffh
mov keym2,#0ffh
zdds: pop dph
pop dpl
pop acc
pop psw
reti
;--------------------------读键值
zdjp1: mov r0,#08h
mov keyctm,#00h
mov dpl,#00h ;cs4
mov dph,#11000000b
movx a,@dptr
mov keym1,a ;keym1键盘读数存储单元1
zdjp3: rlc a
jc zdjp2
inc keyctm ;键盘计数单元
zdjp2: djnz r0,zdjp3
mov r0,#08h
mov dpl,#00h ;cs5
mov dph,#11010000b
movx a,@dptr
mov keym2,a ;keym2键盘读数存储单元2
zdjp5: rlc a
jc zdjp4
inc keyctm ;键盘计数单元
zdjp4: djnz r0,zdjp5
ret
;-----------------------------------;健值翻译
cbzc0: mov a,keym1
cjne a,#0ffh,dssxg1
mov a,keym2
cjne a,#0ffh,dssxg2
ret
dssxg1: mov jpm,a ;jpm键盘数值
mov dptr,#table1
lcall cbzc
ret
dssxg2: mov jpm,a ;jpm键盘数值
mov dptr,#table2
lcall cbzc
ret
;-----------------------------------查表翻译健值
cbzc:
cb2: clr a
movc a,@a+dptr
cjne a,jpm,cb1
inc dptr
clr a
movc a,@a+dptr
mov r4,a
ljmp cb3
cb1: inc dptr
inc dptr
cjne a,#0ffh,cb2
mov r4,#0ah
cb3: ret
table1: db 7fh,01h,0bfh,04h,0dfh,07h,0ffh,0ffh
; 1 4 7
table2: db 0f7h,02h,0fbh,05h,0fdh,08h,0feh,00h,7fh,03h,0bfh,06h,0dfh,09h,0ffh,0ffh
; 2 5 8 0 3 6 9
;-----------------------------
sz1: mov a,xsm1
inc a
mov xsm1,a
cjne a,#0ah,sz2
mov xsm1,#00h
sz2: ret
display:clr p3.5
mov dptr,#8000h ;数码管小数点、通信口转换控制地址
;
mov a,dpm
movx @dptr,a
mov dptr,#9000h ;1、2位数码管地址
anl xsm1,#0fh ;xsm1、xsm2、xsm3显示缓冲单元,10进制数
anl xsm2,#0fh
mov xsclm,xsm1 ;xsclm显示处理单元
orl xsclm,#0f0h
mov a,xsm2
swap a
orl a,#0fh
anl a,xsclm
movx @dptr,a
mov dptr,#0a000h ;3、4位数码管地址
;
anl xsm3,#0fh
anl xsm4,#0fh
mov xsclm,xsm3
orl xsclm,#0f0h
mov a,xsm4
swap a
orl a,#0fh
anl a,xsclm
movx @dptr,a
mov dptr,#0b000h ;5、6位数码管地址
;
anl xsm5,#0fh
anl xsm6,#0fh
mov xsclm,xsm5
orl xsclm,#0f0h
mov a,xsm6
swap a
orl a,#0fh
anl a,xsclm
movx @dptr,a
; acall sz1
ret
; ------------------------------------------------------------------------
display1: clr p3.5
mov dptr,#8000h ;数码管小数点、通信口转换控制地址
;
mov a,#00h
nop
nop
movx @dptr,a
;1、2位数码管地址
mov dptr,#9000h ;
mov a,#0ffh
nop
nop
movx @dptr,a
mov dptr,#0a000h ;3、4位数码管地址
mov a,#0ffh
movx @dptr,a
mov dptr,#0b000h ;5、6位数码管地址
;
mov a,#0ffh
nop
nop
movx @dptr,a
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -