外部中斷按鍵處理
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;
}
}
星空小蝸牛