标题: 我写了一段行列按键扫描程序松手检测加那里?求高手指点 [打印本页]

作者: horishi    时间: 2017-3-11 17:19
标题: 我写了一段行列按键扫描程序松手检测加那里?求高手指点
uchar keyscan()
{
uchar keyl,keyh;
uchar key;  
         {
         P1=0Xf0;
         keyl=P1;  
         keyl=keyl&0xf0;   
         if(keyl!=0xf0)     
                {
                 delay(5);
                   if(keyl!=0xf0)  
                      {
                           keyl=P1&0xf0; //1110 0000  
                           keyl=keyl|0x0f;//1110 1111
                           P1=keyl;                                          
                           keyh=P1;                                               
                           keyh=keyh&0x0f;//0000 1110       
                           keyl=keyl&0xf0;//1110 0000
                           key=keyl+keyh; //1110 1110         
                          }
                }
                switch(key)
                    {
                             case 0xee: num=4;
                             break;
                                 case 0xde: num=3;
                             break;
                                  case 0xbe: num=2;
                             break;
                        }       
                   }                                                                              
return num;          
}
作者: ahshmj    时间: 2017-3-11 19:48
检测到有键按下后(一般是某IO=0),延时后该IO=1即为该键已放开。
作者: angmall    时间: 2017-3-12 10:30
  1. uchar keyscan()
  2. {
  3.         uchar keyl,keyh;
  4.         uchar key;  
  5.         {
  6.                 P1=0Xf0;
  7.                 keyl=P1;  
  8.                 keyl=keyl&0xf0;   
  9.                 if(keyl!=0xf0)     
  10.                 {
  11.                         delay(5);
  12.                         if(keyl!=0xf0)  
  13.                         {
  14.                                 keyl=P1&0xf0; //1110 0000  
  15.                                 keyl=keyl|0x0f;//1110 1111
  16.                                 P1=keyl;                                          
  17.                                 keyh=P1;                                                
  18.                                 keyh=keyh&0x0f;//0000 1110        
  19.                                 keyl=keyl&0xf0;//1110 0000
  20.                                 key=keyl+keyh; //1110 1110  
  21.                                 while((P1&0xf0)!=0xf0);//等待松开并输出      
  22.                         }
  23.                 }
  24.                 switch(key)
  25.                 {
  26.                 case 0xee: num=4;
  27.                         break;
  28.                 case 0xde: num=3;
  29.                         break;
  30.                 case 0xbe: num=2;
  31.                         break;
  32.                 }        
  33.         }                                                                              
  34.         return num;         
  35. }

复制代码

作者: horishi    时间: 2017-3-13 10:04
修改后,按键数字不变化,
作者: horishi    时间: 2017-3-13 10:20
ahshmj 发表于 2017-3-11 19:48
检测到有键按下后(一般是某IO=0),延时后该IO=1即为该键已放开。

检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果

作者: imxuheng    时间: 2017-3-13 16:53
2楼的方法应该可行,关键就是while((P1&0xf0)!=0xf0);//等待松开并输出   
作者: 13452693837    时间: 2017-3-13 17:13
加在按键执行完后面key(!key)
作者: 八仙    时间: 2017-3-13 18:17
不需要松手检测吧 画蛇添竹了吧 是微动开关吗 只要防抖动就行了
作者: zl2168    时间: 2017-3-13 21:44
有两种方式,一种是确认按键按下就动作,另一种是确认按键按下后等待按键释放后再动作。
作者: ahshmj    时间: 2017-3-14 14:50
horishi 发表于 2017-3-13 10:20
检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果

看不明白你说的是什么问题了。你说的“检测到有键按下后,延时,确认,松开,执行按下的内容该I,要这样的结果”,这是按键应有的功能。

你是不是要说“一直按住不放,执行一个功能,松开后执行另一个功能”?
作者: horishi    时间: 2017-3-15 09:38
你是不是要说“一直按住不放,执行一个功能,松开后执行另一个功能”?
这个不对

我是说“一个功能 在按住时不执行,松开后才执按键应有的功能。即松手检测





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1