stm32按鍵 長按 短按 函式 一

2021-08-30 19:51:08 字數 2450 閱讀 6165

在stm32工程中,長按和短按的**書寫, 呼叫的讀取按鍵狀態的底層函式。封裝成的按鍵函式**。下面是函式的標頭檔案,和.c檔案的**。使用定時器來掃瞄按鍵。

#define key_on	1

#define key_off 0

#define key_null 0

#define key_short 1

#define key_long 10

#define short_time 200

uint8_t key_state(gpio_typedef* gpiox,uint16_t gpio_pin)

if ( time == 5 ) /* 5 * 1 ms = 5ms 定時時間到 */

else //按鍵鬆開

else if( longtime > short_time ) //長按

else //去抖動

longtime = 0; //清零

}

} return key_value;

}

#define    key_press(gpiox,gpio_pin)      gpio_readinputdatabit(gpiox,gpio_pin)

#define key_input key_press(gpiox,gpio_pin) //讀取按鍵狀態

#define key_state_0 0 // 按鍵狀態位

#define key_state_1 1

#define key_state_2 2

#define key_state_3 3

#define long_key_time 300 //長按的3秒時間

#define single_key_time 3 // 短按的消抖時間

#define n_key 0 // 無狀態

#define s_key 1 // 單擊

#define l_key 10 // 長按

函式的主體部分,**中按下按鍵讀取到高電平。

unsigned char key_driver(gpio_typedef* gpiox,uint16_t gpio_pin)) 

break;

case key_state_1: // 按鍵狀態1:軟體消抖(確定按鍵是否有效,而不是誤觸)。按鍵有效的定義:按鍵持續按下超過設定的消抖時間。

if (key_press == key_on)

}

else key_state = key_state_0; // 如果按鍵時間沒有超過,判定為誤觸,按鍵無效,返回 按鍵狀態0,繼續等待按鍵

break;

case key_state_2: // 按鍵狀態2:判定按鍵有效的種類:是單擊,還是長按

if(key_press == key_off) // 如果按鍵在 設定的長按時間 內釋放,則判定為單擊

else

}break;

case key_state_3: // 等待按鍵釋放

if (key_press == key_off)

break;

default: // 特殊情況:key_state是其他值得情況,清零key_state。這種情況一般出現在 沒有初始化key_state,第一次執行這個函式的時候

key_state = key_state_0;

break;

}return key_return; // 返回 按鍵值

}

unsigned char key_handle(gpio_typedef* gpiox,uint16_t gpio_pin)

return key_value;

}

time 這個變數,定義在了定時器檔案中

在main.c中呼叫

int main(void)

else if(key_value == key_long)

}}

這樣可以實現長按不鬆手,首席執行官按的**。以後遇到好的思想會繼續學習,總結下來。

**風格不是特別好,很早之前寫的了,放在這裡了,僅供參考

這個是我寫的按鍵二的部落格,一些思想可以提供學習

STM32獨立按鍵之長按 短按

內容如題 1.獨立按鍵 軟體消抖 晶元引腳初始化為上拉輸入 define key l state ll gpio isinputpinset key l port,key l pin define key r state ll gpio isinputpinset key r port,key r ...

stm32外部中斷按鈕短按長按1 0

key.c define pwmaddkey 0 gpio readinputdatabit gpiob,gpio pin 8 讀取按鍵pwmaddkey 0 b8 define pwmreducekey 0 gpio readinputdatabit gpiob,gpio pin 9 讀取按pwm...

stm32 工業按鍵檢測 STM32按鍵的檢測

stm32的按鍵檢測相對比較簡單,首先按部就班的初始化連線的到的i o,然後寫乙個按鍵掃瞄函式,這個和51微控制器的差不多。以下是乙個比較典型的例子 利用按鍵控制led key.件 ifndef key h define key h include sys.h definekey0 gpio rea...