下面是一个键盘扫描电路,除了第一段,都能看懂。请问大家:加下划线的几句话是什么意思?是汇编语言吗?
code_seg segment code
data_seg segment data
stack_seg segment idata
rseg data_seg
key_s: ds 1
key_v: ds 1
rseg stack_seg
stack: ds 20
an1 bit p3.2 ;
an2 bit p3.3 ;
cseg at 0000h
jmp main
;===============================================================================
rseg code_seg
main:
mov sp,#(stack-1) ; 设置栈指针
mov p0,#0feh ; 初始点亮led p00
mov key_v,#03h ; 初始键值
key_chksw: ; 循环检测按键是否按下
acall scan_key ; 输入按键状态
mov key_s,a
xrl a,key_v ; 检查按键值是否改变
jz key_chksw ; 若无键被按,则跳回key_chksw
mov r7,#10 ; 延时10ms
acall delayms ; 延时去抖
acall scan_key ; 再次检查按键值
mov key_s,a
xrl a,key_v
jz key_chksw
mov key_v,key_s ; 保存按键状态
acall proc_key ;
sjmp key_chksw
;===============================================================================
scan_key:
; 扫描按键
; 传入参数:无
; 返回值:a --- 按键状态
clr a
mov c,an1
mov acc.0,c
mov c,an2
mov acc.1,c
ret
;===============================================================================
proc_key:
; 按键处理子程序
; 传入参数: key_v --- 按键值
; 返回值: 无
mov a,key_v
jnb acc.0,proc_an1
jnb acc.1,proc_an2
ret
proc_an1: ; 按键an1处理程序
mov a,p0 ; 右移
rr a
mov p0,a
ret
proc_an2: ; 按键an2处理程序
mov a,p0 ; 左移
rl a
mov p0,a
ret
;===============================================================================
delayms:
; 延时子程序
; 传入参数:r7 --- 延时值(ms)
; 返回值:无
mov a,r7
jz end_dlyms
dly_lp1:
mov r6,#185
dly_lp2:
nop
nop
nop
djnz r6,dly_lp2
djnz r7,dly_lp1
end_dlyms:
ret
; end of delayms
end