外部中断按键处理
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;
}
}
星空小蜗牛