矩阵按键问题
本帖最后由 514430901 于 2019-7-26 20:11 编辑#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define GPIO_DIG P0
#define GPIO_KEY P1
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)
{
u8 a=0;
GPIO_KEY=0xf0;
if(GPIO_KEY!=0xf0)//读取按键是否按下
{
delay(1000);//延时10ms 进行消抖
if(GPIO_KEY!=0xf0)//再次检测键盘是否按下
{
//列
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0Xe0): GPIO_DIG=~0x01;break;
case(0Xd0): GPIO_DIG=~0x02;break;
case(0Xb0): GPIO_DIG=~0x04;break;
case(0X70): GPIO_DIG=~0x08;break;
}
}
}
while((a<50)&&(GPIO_KEY!=0xf0))
{
delay(100);
a++;
}//检测按键松手检测
}
void main()
{
while(1)
{
KeyDown(); //按键判断函数
}
}
为了检测矩阵键盘的数据,在提供的原代码上稍作了修改,目的是为了按第一列按键时D1等亮,按第二列按键时D2等亮,按第三列按键时D3等亮,按第四列按键时D4等亮。知道a在这里是强制退出循环,但是感觉a在这里没有什么作用,要是在此处不设置a,放开按键后一样可以退出循环,不放开按键一直循环也没有什么影响,所以把检测按键松手检测这段改了一下,直接将a去掉了: while(GPIO_KEY!=0xf0);去掉后发现, 按键时好时坏,有时候按着枚反应,多按两下就好了,要是加上a后就不存在这个问题,这是为什么呢?请大佬求教
加不加这句话应该都存在“有时候按着没反应,多按几下就好了的”情况吧
页:
[1]