for循环是在这里执行循环函数,等待执行完成再去执行其他任务。下面是一个按键的判断函数,没有用for延时消抖,用的是if,没执行一次循环累加1,这样主循环的执行时间变短,适合按键延时特别多,后面又程序需要及时刷新的程序,当让也可以用中断。
if(KEY[ucKey_num]==0) //按键1按下
{
keytime_Y[ucKey_num]++; //按下消抖计时加1
keytime_N[ucKey_num]=0; //未按下消抖计时清零
if(keytime_Y[ucKey_num]>Const_Keysnake_time) //消抖滤波 ,受程序循环影响延时时间,需要程序完成后校准Const_Keysnake_time值
{
keytime_Y[ucKey_num]=0; //按下消抖计时清零
bitSet(key_value,ucKey_num+1); //是否按下标志位
}
}
else //按键1未按下
{
keytime_N[ucKey_num]++; //未按下消抖计时加1
keytime_Y[ucKey_num]=0; //按下消抖计时清零
if(keytime_N[ucKey_num]>Const_Keysnake_time)
{
keytime_N[ucKey_num]=0;
bitClear(key_value,ucKey_num+1);
}
} |