📄 key1.asm
字号:
;//****************************************************
;//实现功能:本程序实现把键盘的输入码型按二进制的方式在
;// p0口显示,若果没有按键按下P0的灯全部亮
;//目标板 :51开发板
;//****************************************************
;//******************宏定义*************************
p_key equ P1;宏定义键盘的接口是p1
;//*************************************************
org 00h
ajmp main
org 30h
;//*****************主程序*********************
;//描 述:把键盘的输入码型按二进制的方式在p0
;// 口显示,若没有按键按下P0的灯全部亮
;//入口参数:无
;//返回参数:无
;//设计人:y
;//最后修改:时间(2006.4.24) 修改人(y)
;//*****************************************
main:
mov sp,#50h;设置堆栈指针
main1:
call read_key ;调用按键子程序
cpl a ;取反键值
mov P0,a ;送到P0口显示键盘码
ajmp main1 ;循环
;//******************按键扫描函数**********************
;//设计人:y
;//入口参数:无
;//返回参数:a,为按键的编号
;//注意:此程序只适合4*4键盘使用,键盘占用一组完整的i/o口
;// 在使用这个只程序前要宏定义p_key为用户实际连接键
;// 盘的i/o口
;//最后修改时间:2006.4.6
;//****************************************************
read_key:
mov p_key,#0ffh
mov p_key,#0f0h
mov a,p_key
;判断是否有键按下
cjne a,#0f0h,rk1
;没有则返回0xff
ajmp no_key
;有按键按下,延时去抖
rk1:
mov r1,#20
call delay_time
mov p_key,#0f0h
mov a,p_key
;确认是否有键按下
cjne a,#0f0h,rk2
;没有则返回0xff
ajmp no_key
;确认是有按键按下, 判断哪行按键按下
rk2:
jnb ACC.4,rk4
jnb ACC.5,rk5
jnb ACC.6,rk6
jnb ACC.7,rk7
;没有检测到按键
ajmp no_key
rk4:
mov b,#0
mov p_key,#0efh
ajmp rk_next
rk5:
mov b,#4
mov p_key,#0dfh
ajmp rk_next
rk6:
mov b,#8
mov p_key,#0bfh
ajmp rk_next
rk7:
mov b,#12
mov p_key,#07fh
rk_next:
mov a,p_key
jnb ACC.0,rk_next_0
jnb ACC.1,rk_next_1
jnb ACC.2,rk_next_2
jnb ACC.3,rk_next_3
;没有检测到按键
ajmp no_key
rk_next_0:
mov a,#0
ajmp get_key
rk_next_1:
mov a,#1
ajmp get_key
rk_next_2:
mov a,#2
ajmp get_key
rk_next_3:
mov a,#3
;返回检测到的按键编号
get_key:
add a,b
ret
;没检测到按键,返回0xff
no_key:
mov a,#0ffh
ret
;//******************时间延迟函数**********************
;//设计人:y
;//入口参数:r1,为时间延迟参数,延时(r1*500+r1*2)*机器周期
;//出口参数:无
;//注意:无
;//最后修改时间:2006.4.6
;//****************************************************
delay_time:
push psw; psw进栈
push acc ; a 进栈
mov a,#250
loop1:
djnz acc,loop1
mov a,#250
djnz r1,loop1
pop acc; a 出栈
pop psw;psw出栈
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -