C语言编程,利用51
单片机控制一些东西,矩阵键盘扫描时遇到了问题,可以计算出键值号,比如key=1,但是如果我再按一下1号键,key还是等于1,那么我该怎么判断同一个键被连续按了多少次呢?热心人帮帮我,谢谢了!!!作为奖励给大家一本很好的
电子书,《世界是平的--21世纪简史》
-
-
The World is Flat.pdf
下载积分: 积分 -1 分
1.6 MB, 下载次数: 48, 下载积分: 积分 -1 分
-
-
世界是平的(完整).pdf
下载积分: 积分 -1 分
1.31 MB, 下载次数: 50, 下载积分: 积分 -1 分
是那种按一下就又弹起来的按键,这个程序是用来判断键号值的,十个按键依次对应0到9 ,你写的“不是这样的用delay()”是什么意思?
平时的按键大多数也是你说的按一下松开就会弹起来啊。你可以在被按下的时候不触发,只有松开的时候才触发按键,这是就可以计数+1,同一个键按多少次就是会加多少啊,你只需要定义好一个时间间隔阈值,明确要按多快才会加1,又在超过多久后计数会清零,
贴个供参考,但注意,该程序是人家的,你可以搜索MS3看,摘自里面,但有经过小部分修改,这只为说明不用delay()的。
对于一些有按下处理和释放处理的按键扫描程序,本程序可能不太适用
void KeyScan(void)
{
static INT16U keyCounter = 0u;
static INT08U keyOldVal = KEY_NONE;
static bool isLongKeyPress = FALSE;
INT08U keyNewVal;
keyNewVal = KeyRead();
if (keyNewVal == KEY_NONE)
{
if (keyCounter == KEY_LONG_TIME)
{
isLongKeyPress = FALSE;
}
else if (keyCounter >= KEY_SHORT_TIME)
{
keyActionVal = KeyMap(SHORT_KEY_MODE, keyOldVal);
}
keyCounter = 0u;
keyOldVal = keyNewVal;
}
else
{
keyCounter++;
if (keyCounter <= KEY_DEBOUNCE_TIME)
{
if (keyOldVal != keyNewVal)
{
keyOldVal = keyNewVal;
keyCounter = 0u;
}
}
else if (keyCounter >= KEY_LONG_TIME)
{
keyCounter = KEY_LONG_TIME;
if (isLongKeyPress == FALSE)
{
isLongKeyPress = TRUE;
keyActionVal = KeyMap(LONG_KEY_MODE, keyOldVal);
}
}
}
}
unsigned cha A[9]={};//定义一个全局变量记录KEY被按的次数
这里加这个
while(P2!=0X0F);
key=hang*4+lie;
SWITCH(KEY)
{
CASE 1://判断KEY值
A[0]=A[0]+1;
break;
''''''''
''''''''
//写9个
}
//要知道哪个键被按了多少次 读数组A[]的元素
一周热门 更多>