如何检测一个按键是否被按下

如何检测一个按键是否被按下,第1张

看输脊启闭入,如果同一个按键被以诸如0.5秒这样的间隔不断发出来就可以认为是长按了

更复杂的方法:键盘按下发出来一个scan

code,抬起来的时樱裂候还会发出另外一个值.当然这样弄起旁扮来

非常底层,非常复杂

取那么多、那么长时间的平均值干什么?

连续取 20 次,其中有10 次,按的是这个键,有10 次,按的是那个键,

平均一下,判定结果:是按下了一个根本就没有按的键。

========

#include<reg52.h>键蔽

#include<intrins.h>

unsigned char code k_AD[] = {

10, 40, 70, 100, 130, 160, 190, 210, 230}//九个按基兆键所对应的ADC值

unsigned char code duan[] = { //共阳段码

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}

//--------------------------------------------

void delay(int x)

{

int i

while(x--) for(i = 115i >0i--)

}

//--------------------------------------------

unsigned char keyscan()

{

unsigned char k1, k2

k1 = GetADCResult(0)//读出

if(k1 <238) { //按下了

delay(20)//延时

k2 = GetADCResult(0) //再次读出

if((k1 >(k2 - 5) &&(k1 <(k2 + 5)) { //两者相差无几

k1 /= 2 k2 /= 2 k1 += k2//两次的平均值

for(k2 = 0k2 <9k2++) //稿锋州在表格中查找9次

if(k1 >(k_AD[k2]) - 5) &&(k1 <(k_AD[k2]) + 5)) //找到了

return(k2) //就返回键值

}

}

return(255) //没有按键

}

//--------------------------------------------

void main()

{

unsigned char key

while(1) {

key = keyscan()

if(key != 255) P0 = duan[key]//显示键值

}

}

//--------------------------------------------

本程序未经验证,仅供参考。

AD按键也有很多种,我使用的是下图所示的4个引脚的按键。键盘有一种连接方式,一般一个ADC端口就可以实现多个按键功能,不过需要加电阻。

按键的电路图很简单,如下图所示,按钮一按下,可搭衡以看到该电路就接通,也就是有信号。

连接方式有很多种,下图所画的电路图就是其中一种,但是要注意,ADC按键连接时,由于端口数量是有限的,所以适用于按键核枝弯数量不多的场合。

要看下arduino板子的实物图,改闷如下图所示,大家就可以更直观,大家要知道每个引脚代表什么。

关于程序,很简单,通过电阻均匀分压,在每个分压节点连接一个按键到A0,这个也随便你选,A0-A5都行。


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

原文地址: http://outofmemory.cn/yw/12436236.html

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

发表评论

登录后才能评论

评论列表(0条)

保存