按键中断消抖--2

来源:互联网 发布:手机淘宝保证金怎么退 编辑:程序博客网 时间:2024/05/17 02:31
外部中断按键处理

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;
    }
}

                        星空小蜗牛

原创粉丝点击