stm32f103
按鍵長短按得識別原理
需要乙個定時器,用來計算按鍵按下的時間,可以一秒鐘檢測100次, 設定初始化為10ms的中斷,比如使用定時4作為按鍵時間計算的定時器
比如我們需要4種模式,輕觸,短按,長按,超級長按
#define clicktypetouch 1 //輕觸#define clicktypeshort 2 //
短按#define clicktypelong 3 //
長按#define clicktypeverylong 4 //
非常長的長按
#define timecntclicktouch 500 //
ms內為短按
#define timecntclickshort 1000 //
ms內為短按
#define timecntclicklong 2000//
ms內,且大於短按時間為長按
#define timecntclickverylong 5000//
ms的按鍵時間為非常長,用於進入高階模式
//定時器的初始化這裡時鐘選擇為apb1的2倍,而apb1為36m
//arr:自動重灌值。
//psc:時鐘預分頻數
//這裡使用的是定時器7
void
tim4_init(u16 arr,u16 psc)
然後設定乙個變數用來累計按鍵按下的時間,沒按鍵按下的時候, 一直迴圈累計時間,從0到溢位,有按鍵按下的時候,立即清空,重新開始累計
首先初始化按鍵埠
void keyioinit(void)
u16 timekeypressed; //設定兩個常量,用來區別按鍵的狀態,是按下還是釋放按鍵按下的時間 10ms 步進
#define keystatuspressed 0定時器的中斷,累計時間#define keystatusreleased 1
void tim4_irqhandler(void) //這個鍵,我叫做設定鍵,什麼時候開始給設定鍵開始計算按下時間呢?中斷}
設定鍵被按下 而且 按鍵狀態還是釋放
需要幾個常量標誌和幾個變數
u8 statuscntingkeytime; ////設定鍵按下,且之前沒開始計時的時候,開始計算按下時間是否開始計算按鍵時間
#define statuscnting 1
#define statusnotcnting 0
if(keyset==keystatuspressed && statuscntingkeytime==statusnotcnting )
當按鍵鬆開後,統計一下,按下的時間為多長
//鬆手後統計按下時間
if(keyset==keystatusreleased && statuscntingkeytime==statuscnting)
//短按
else
if(timekeypressed>=timecntclickshort &&timekeypressed
//長按
else
if(timekeypressed>=timecntclicklong &&timekeypressed
//超級長按
else
if(timekeypressed>=timecntclickverylong)
}
10 5 微控制器長短按鍵的應用
在微控制器系統中應用按鍵的時候,如果只需要按下一次按鍵加 1 或減 1,那用第 8 章學到的知識就可以完成了,但如果想連續加很多數字的時候,要一次次按下這個按鍵確實有點不方便,這時我們會希望一直按住按鍵,數字就自動持續增加或減小,這就是所謂的長短按鍵應用。當檢測到乙個按鍵產生按下動作後,馬上執行一次...
10 5 微控制器長短按鍵的應用
在微控制器系統中應用按鍵的時候,如果只需要按下一次按鍵加 1 或減 1,那用第 8 章學到的知識就可以完成了,但如果想連續加很多數字的時候,要一次次按下這個按鍵確實有點不方便,這時我們會希望一直按住按鍵,數字就自動持續增加或減小,這就是所謂的長短按鍵應用。當檢測到乙個按鍵產生按下動作後,馬上執行一次...
微控制器 按鍵定時器檢測 短按 長按
通過使用定時器計數的方法來分辨按鍵的 短按 長按 檢測到引腳被拉低 按鍵按下為低電平,沒有按下為高電平 延時10毫秒 濾波 引腳還是被拉低 確定按鍵被按下 設定按鍵按下標誌 開啟定時器,開始計數 定時器中有乙個全域性變數用於記錄計數值 直到引腳被拉高 按鍵被釋放將為高電平 關閉定時器 檢測按鍵按下標...