请问单片机4*4矩阵键盘如何检测并返回多个按键按下的键值和多个按键抬起的键值?(注:不使用死循环)
发布网友
发布时间:2022-04-30 00:41
我来回答
共2个回答
热心网友
时间:2023-10-11 05:23
你按键要是没有松手检测的话,按键按下后程序会执行一次按键一的数据,然后在执行按键2的数据,按键1和按键2就成了循环检测了,执行两个按键事件,如果按键有松手检测的话,例如按键1按下,程序会在按键1哪里等待按键松手后,才会跳出按键,否则按键会一直死在哪里等待按键松手,希望我的回答对你有帮助!
那就用这种方法解决:
if(keyxxx == 0)
{
if(++i <= 10)
return;
//
if(keyxxx == 0)
{
i = 0;
//处理按键程序
}
}
if(keyxxx == 0)
{
if(++y <= 10)
return;
//
if(keyxxx == 0)
{
y = 0;
//处理按键程序
}
}追问这样处理那需要用到太多的计数变量了,并且这个还不包括按键抬起的处理
追答这样是用很多计数变量,但是占用CPU资源很小
热心网友
时间:2023-10-11 05:23
定时 5ms 检测一次,比较两次的结果,
无论是按下、还是释放,都可以检测出来。
请问单片机4*4矩阵键盘如何检测并返回多个按键按下的键值和多个按键抬起...
按键1和按键2就成了循环检测了,执行两个按键事件,如果按键有松手检测的话,例如按键1按下,程序会在按键1哪里等待按键松手后,才会跳出按键,否则按键会一直死在哪里等待按键松手,希望我的回答对你有帮助!
单片机中的4×4矩阵键盘的键值怎么求?
还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每个按键需要两个I/O口,一端连接行(行4bit之一),一端连接列(列4bit之一);若此时按键的电平状态为0010 0001,即十六进制数据0x21,按下的按键所对应的键值编码即为0x21。当然为了使用方便,在确定了按下...
单片机矩阵式键盘显示设计中,如何处理多个按键同时按下的情况
矩阵键盘有多种键盘算法,如果是行列扫描的话,多个按键同时按下是可以得到所有的键值,如果是线反转法的话,就会有误判的可能。行列扫描的话,一次只扫描一行按键,而且对应行的按键的状态也会通过互相独立的IO得到。
对于这样的4×4矩阵键盘与单片机连接,单片机如何去识别每个按键?
第一种可以叫口扫描法,先给P1口赋值0F0H由高四位读入数据,保存;再给P1口赋值0FH由低四位读入数据,两次的数据即为相应按键的键值,比如此时“0”的键值是0EEH,而“1”是0EDH。第二种是回送法,先给P1口赋值0F0H由高四位读入数据,再判断哪颗线上读到了低电平,再将p1.0~p1.3,和没有读...
51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能?
1、在程序检测到按键后,加个延时去抖,不要加松手检测。然后执行第一个按键相对应的程序。然后继续按键扫描。注意这里说的是继续,也就是继续往下检测。否则的程序就只能执行第一个按键所对应的程序了。这样,就能检测到第二次按键的键值了。2、例程:uchar shaomiao(){uchar l,h;P1=0xf0;//获取...
谁能给我讲明白单片机的4x4矩阵键盘工作原理
给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉...
单片机中的4×4矩阵键盘的键值怎么求?
这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。原理如同矩阵数列的行列式 可以用下述代码进行://*** //函数功能...
4x4按键矩阵原理是什么?为什么要移位?他是怎么样确认按键位置的,求教大 ...
这个是高低电平反转法确定4x4按键,P1口4位接行矩阵四位接列矩阵。首先让P1口高四位为0,低四位为1。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。然后让P1口高四位为1,低四位为0。若有按键按下,则高四位中会有一个1翻转为0,低四位不会...
单片机4*4矩阵按键如何计算键值???
MOV KEY,A ;保存键值 CJNE A,#0FFH,JIANZHI LJMP KEY_SCAN JIANZHI:MOV R4,#0FFH MOV DPTR,#TABLE_JIANZHI LOOP:INC R4 INC 58H MOV A,R4 MOVC A,@A+DPTR CJNE A,KEY,BAOHU MOV KEY_NUMBER,R4 BAOHU:MOV A,58H CJNE A,#17,LOOP RET TABLE_JIANZHI: ;键值表 DB 0E7H,0D...
大神帮我看下我这个C51单片机4*4矩阵键盘扫描,在keil变量窗口查看键入值...
uchar scan()//扫描键值的子程序 { P1=0xf0;scan0=P1;delay1ms(20);if(scan0!=0xf0) //判键是否按下 { scan0=P1;if(scan0!=0xf0) //二次判键是否按下 { P1=0x0f; //线反转法的核心 delay1ms(20);scan1=P1;keycode=scan0|scan1; //组合成键编码 for(m=0;m<16...