矩阵键盘扫描时遇到了问题

2019-07-15 19:55发布

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 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
愤怒的企鹅
1楼-- · 2019-07-15 22:58
按下后,你可以直接加一就可以计算了,还是我理解错了呢
blueli
2楼-- · 2019-07-16 03:31
 精彩回答 2  元偷偷看……
bj2008wyou
3楼-- · 2019-07-16 03:42
不明白后面你想说明什么,好像没描述清楚呢
愤怒的企鹅
4楼-- · 2019-07-16 06:45
blueli 发表于 2014-5-2 23:09
不是吧,加一之后,键盘扫描是持续的,我按一下,key的键值就一直是一,即使我不按键,它还会一直加一, ...

键盘扫描是持续的,可是你的处理按键的程序是唯一的,每次不同的按键按下,你总有一个处理的地方吧!不可以一直会跳进那个地方呀!所以,你只需在那个处理的地方加一就行了,或许我还是没有明白你想要表达的意思
blueli
5楼-- · 2019-07-16 07:29
每次都安相同的按键呢?以下是键盘扫描函数
uchar scan_key()
{
uchar hang,lie;
P2=0X0F;
if(P2!=0X0F)
delayms(10);
if(P2!=0X0F)
{
   switch(P2&0X0F)
   {
             case 0x0e:hang=0;break;
          case 0x0d:hang=1;break;
          case 0x0b:hang=2;break;
          case 0x07:hang=3;break;
   }
   P2=0XF0;
   switch(P2&0XF0)
   {
             case 0xe0:lie=0;break;
          case 0xd0:lie=1;break;
          case 0xb0:lie=2;break;
          case 0x70:lie=3;break;
   
   }
   P2=0X0F;
   while(P2!=0X0F);
   key=hang*4+lie;
}
return(key);
}
每次扫描完都有一个键值号,比如按下一键。则key一直就是1,在没按其它键的的时候,键值号不变,我如果连续按一键,就是一直按相同的键,键值号就一直是1,那我怎么计算出这同一个键被按了多少次?谢谢你持续的回答!
blueli
6楼-- · 2019-07-16 10:57
bj2008wyou 发表于 2014-5-2 23:41
不明白后面你想说明什么,好像没描述清楚呢

uchar scan_key()
{
uchar hang,lie;
P2=0X0F;
if(P2!=0X0F)
delayms(10);
if(P2!=0X0F)
{
   switch(P2&0X0F)
   {
             case 0x0e:hang=0;break;
          case 0x0d:hang=1;break;
          case 0x0b:hang=2;break;
          case 0x07:hang=3;break;
   }
   P2=0XF0;
   switch(P2&0XF0)
   {
             case 0xe0:lie=0;break;
          case 0xd0:lie=1;break;
          case 0xb0:lie=2;break;
          case 0x70:lie=3;break;
   
   }
   P2=0X0F;
   while(P2!=0X0F);
   key=hang*4+lie;
}
return(key);
}
就这样一个矩阵键盘扫描函数,怎么编一个函数判断同一个按键被连续按了多少次

一周热门 更多>