按鍵中斷消抖--2

外部中斷按鍵處理

uchar g_ucKeyVal=0;
uchar g_ucKeyCnt=0;  
uchar g_ucKeySta=0;  表明有無按鍵按下

u8 KeyDeal(void) //獲取按鍵值  ---記住不要延時

   return data
}
//對獲取鍵值,進行一下正確性處理
//關鍵字: g_ucKeySta  表明按下狀態
//                    只要按下不鬆開,狀態一直爲1
//                    只要鬆開就爲0
u8 KeyScan(void)
{
    key1=KeyScan();
    if(key1!=0xff)
    {
         key2=KeyScan();
         if(key1==key2)
         {
            g_ucKeySta=1;
         }
         else
            g_ucKeySta=0;
     }
     else
         g_ucKeySta=0;
     return key1;
}

//定時器中  進行減操做
//做用:延時處理
void time0()
{
    if(g_ucKeyCnt) g_ucKeyCnt--;
    //一直按
    if(g_ucKeyCnt==0)&&(g_ucKeySta)
             g_ucKeyCnt=20;
}

// g_ucKeyCnt   鍵值延時
// 核心 當中斷髮生後
//獲取到鍵值延時爲0,則把鍵值延時賦值
//在些期間,再有中斷髮生,不會再次採集按鍵(取巧避過延時)
void ISR ()
{    
   if(g_ucKeyCnt==0)   當值爲0才進行下一次採集,避免按鍵延時
   {
    g_ucKeyVal=KeyScan();
        g_ucKeyCnt=20;
    }
}

                        星空小蝸牛
相關文章
相關標籤/搜索