標(biāo)題: 我寫了一段行列按鍵掃描程序松手檢測加那里?求高手指點(diǎn) [打印本頁]

作者: horishi    時(shí)間: 2017-3-11 17:19
標(biāo)題: 我寫了一段行列按鍵掃描程序松手檢測加那里?求高手指點(diǎn)
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    時(shí)間: 2017-3-11 19:48
檢測到有鍵按下后(一般是某IO=0),延時(shí)后該IO=1即為該鍵已放開。
作者: angmall    時(shí)間: 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. }

復(fù)制代碼

作者: horishi    時(shí)間: 2017-3-13 10:04
修改后,按鍵數(shù)字不變化,
作者: horishi    時(shí)間: 2017-3-13 10:20
ahshmj 發(fā)表于 2017-3-11 19:48
檢測到有鍵按下后(一般是某IO=0),延時(shí)后該IO=1即為該鍵已放開。

檢測到有鍵按下后,延時(shí),確認(rèn),松開,執(zhí)行按下的內(nèi)容該I,要這樣的結(jié)果

作者: imxuheng    時(shí)間: 2017-3-13 16:53
2樓的方法應(yīng)該可行,關(guān)鍵就是while((P1&0xf0)!=0xf0);//等待松開并輸出   
作者: 13452693837    時(shí)間: 2017-3-13 17:13
加在按鍵執(zhí)行完后面key(!key)
作者: 八仙    時(shí)間: 2017-3-13 18:17
不需要松手檢測吧 畫蛇添竹了吧 是微動(dòng)開關(guān)嗎 只要防抖動(dòng)就行了
作者: zl2168    時(shí)間: 2017-3-13 21:44
有兩種方式,一種是確認(rèn)按鍵按下就動(dòng)作,另一種是確認(rèn)按鍵按下后等待按鍵釋放后再動(dòng)作。
作者: ahshmj    時(shí)間: 2017-3-14 14:50
horishi 發(fā)表于 2017-3-13 10:20
檢測到有鍵按下后,延時(shí),確認(rèn),松開,執(zhí)行按下的內(nèi)容該I,要這樣的結(jié)果

看不明白你說的是什么問題了。你說的“檢測到有鍵按下后,延時(shí),確認(rèn),松開,執(zhí)行按下的內(nèi)容該I,要這樣的結(jié)果”,這是按鍵應(yīng)有的功能。

你是不是要說“一直按住不放,執(zhí)行一個(gè)功能,松開后執(zhí)行另一個(gè)功能”?
作者: horishi    時(shí)間: 2017-3-15 09:38
你是不是要說“一直按住不放,執(zhí)行一個(gè)功能,松開后執(zhí)行另一個(gè)功能”?
這個(gè)不對

我是說“一個(gè)功能 在按住時(shí)不執(zhí)行,松開后才執(zhí)按鍵應(yīng)有的功能。即松手檢測





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1