c语言怎样判断键盘按键的按下、释放?

c语言怎样判断键盘按键的按下、释放?,第1张

C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:

bit keychk()    //单一按键检测

{

if(P1.0==0)    //如果键按下

{

delay()     //延时去抖

if(P1.0==0)return(1)    //返回键状态

}

return(0)

}

unsigned char kbscan(void)    //矩阵扫描按键检测

{

unsigned char sccode,recode

P1=0x0f  //发0扫描,列线输入

if ((P2 & 0x0f) != 0x0f)  //有键按下

{

delay(20)   //延时去抖动

if ((P1&0x0f)!= 0x0f)

{

sccode = 0xef    //逐行扫描初值

while((sccode&0x01)!=0)

{

P1=sccode

if((P1&0x0f)!=0x0f)

{

recode=(P1&0x0f)|0xf0

while((P1&0x0f)!=0x0f)//等待键抬起

return((~sccode)+(~recode))

}

else

sccode=(sccode<<1)|0x01

}

}

}

return 0  //无键按下,返回0

}

if(key_l!=0xf0)

{

delay_nms(5)

key_l=P1

……

在第4行加 while( key_l!=0xf0 )

等待按键释放,按键不放开就一直在此处等待,知道按键释放,此语句执行完。再往下执行

1、通过1/0口连接。将每个按钮的一端接到单片机的I/O口,另一端接地,这是最简单的办法,如图3所示是实验板上按钮的接法,四个按钮分别接到P3.2 、P3.3、P3.4和P3.5。对于这种键各程序能采用持续查询的办法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入对应的键处理。下面给出一个例程。其功能很简单,四个键定义如下:

P3.2:开始,按此键则灯开始流动(由上而下)

P3.3:停止,按此键则停止流动,所有灯为暗

P3.4:上,按此键则灯由上向下流动

P3.5:下,按此键则灯由下向上流动

UpDown EQU 00H 上下行标志

StartEnd EQU 01H 起动及停止标志

LAMPCODE EQU 21H 存放流动的数据代码

ORG 0000H

AJMP MAIN

ORG 30H

MAIN:

MOV SP,#5FH

MOV P1,#0FFH

CLR UpDown 启动时处于向上的状态

CLR StartEnd 启动时处于停止状态

MOV LAMPCODE,#0FEH 单灯流动的代码

LOOP:

ACALL KEY 调用键盘程序

JNB F0,LNEXT 如果无键按下,则继续

ACALL KEYPROC 不然调用键盘处理程序

LNEXT:

ACALL LAMP 调用灯显示程序

AJMP LOOP 反复循环,主程序到此结束

DELAY:

MOV R7,#100

D1: MOV R6,#100

DJNZ R6,$

DJNZ R7,D1

RET

----------------------------------------延时程序,键盘处理中调用

KEYPROC:

MOV A,B 从B寄存器中获取键值

JB ACC.2,KeyStart 分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)

JB ACC.3,KeyOver

JB ACC.4,KeyUp

JB ACC.5,KeyDown

AJMP KEY_RET

KeyStart:

SETB StartEnd 第一个键按下后的处理

AJMP KEY_RET


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8090334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存