- while(1)
- {
- if(PushCount++ > 2000)//按鍵掃描延時
- {
- PushCount=0;
- if(!K1 && K1_Old)//下降沿檢測
- {
- K1_Flag = 1;
- K2_Flag = 0;
- }
- if(!K2 && K2_Old)//下降沿檢測
- {
- K1_Flag = 0;
- K2_Flag = 1;
- }
- K1_Old = K1;
- K2_Old = K2;
- }
- if(K1_Flag)
- {
- K1_Push();//K1按下函數(shù)
- }
- if(K2_Flag)
- {
- K2_Push();//K2按下函數(shù)
- }
- }
復制代碼 任何時候都不要用太長時間的delay(如>100us)
如果一定要長時間延時,可用變數(shù)加1結合標置位代替
例子如下
- void K1_Push()
- {
- static unsigned int delay_count1, delay_count2;//static 變數(shù)在跳出函數(shù)也不會被清零
- if(delay_count1++ >1000)
- {
- delay_count1 = 0;
- if(delay_count2++ >1000)
- {
- delay_count2 = 0;
- K1_Mode = !K1_Mode;
- }
- }
- if(K1_Mode)
- {
- MA = 0;
- MB = 1;
- MC = 0;
- MD = 0;
- }else
- {
- MA = 0;
- MB = 0;
- MC = 0;
- MD = 1;
- }
- }
復制代碼
|