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

📄 key1.asm

📁 本程序实现把键盘的输入码型按二进制的方式在51单片机p0口显示
💻 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 + -