微控制器實現同乙個按鍵的長按3s與長按10s操作

2021-09-20 09:50:56 字數 975 閱讀 7244

如何實現微控制器單擊、雙擊、長按操作,可以參考別人文章:

在這裡我主要將這個功能再進行擴充套件,實現按鍵的單擊、雙擊、長按3s、長按10s操作。

需要修改的地方:

1、預定義:

//#define key_long_3   3    注釋這行**

#define key_long_3s 3 //返回值,長按3s

#define key_long_10s 4 //返回值,長按10s

#define key_state_4 4 //定義乙個新的狀態值

2、修改key_driver()函式:

unsigned char key_driver(void)

else

key_state_buffer1 = key_state_0;

//如果按鍵抬起釋放,那麼按鍵狀態回到初始狀態

break; //軟體消抖

case key_state_2:

if(key1 == keyoff())

else if(++key_timer_cnt1 >= 300) //如果按鍵處於繼續按下的狀態當計時計數器超過3s時

break;

case key_state_3:

if( key1 == keyoff() && key_timer_cnt1 <1000 ) //按鍵鬆開,計時小於10s

}break;

case key_state_4: //等待按鍵釋放

if(key == keyoff()) //按鍵釋放

key_state_buffer1 = key_state_0; //切回按鍵初始狀態

break;

} return key_return;

}

有一點需要注意:key_timer_cnt1 的定義需要修改為unsigned int型別,不然計數值不會超過255

同乙個按鍵短按與長按的區別觸發

include reg52.h define const voice short 20 蜂鳴器短叫的持續時間 define const voice long 140 蜂鳴器長叫的持續時間 define const key time1 short1 20 短按的按鍵去抖動延時時間 define con...

基於狀態機的微控制器按鍵短按長按功能的實現

發表於 2017 12 28 08 43 46 控制 mcu 關注在自己在科研實踐和對學生教學中發現,現在微控制器學習中對於按鍵處理的方法都是 檢測按鍵 延時消抖 按鍵執行 等待釋放,整個按鍵處理的程式中大量出現 delay 1ms 5 和 while key 這樣的語句,這明顯是在給自己找麻煩,延...

乙個鬧鐘的微控制器程式

乙個鬧鐘的微控制器程式。其中蜂鳴器接p37,我的微控制器數碼管是四位共陽數碼管,接p0和p2,k1接p14,k2接p15,k3接p16,k4接p17。晶振採用12mhz。stc89c52 file clock.c include const unsigned char led7code unsign...