標(biāo)題:
基于單片機(jī)定時(shí)器中斷計(jì)時(shí)的按鍵長按,短按,多擊的寫法
[打印本頁]
作者:
大麥豆
時(shí)間:
2023-6-16 12:13
標(biāo)題:
基于單片機(jī)定時(shí)器中斷計(jì)時(shí)的按鍵長按,短按,多擊的寫法
設(shè)定定時(shí)器1ms進(jìn)入一次中斷,按鍵檢測(cè)口設(shè)為輸入上拉模式,默認(rèn)不按下時(shí)為高電平
PIN_KEY1 為要設(shè)置的按鍵引腳
//--------------------------------------------------------------------------------------------------------------------
//聲明所需的全局變量
bit Key1_Lock = 0;
unsigned char Key1_Up_Time = 0;
unsigned char Key1_Pre_Num = 0;
unsigned int Key1_Pre_Time = 0;
//--------------按鍵功能------------------------
void Key_Pro(void) //1ms進(jìn)一次程序
{
if((!PIN_KEY1)&&(!Key1_Lock))
{
Key1_Up_Time = 0;
Key1_Pre_Time++;
if(Key1_Pre_Time >= 1000) // 1s
{
Key1_Pre_Time = 0;
Key1_Up_Time = 0;
Key1_Pre_Num = 0;
Key1_Lock = 1;
//----------------------------
//這里寫長按后輸出的命令
//----------------------------
}
}
else if(PIN_KEY1)
{
Key1_Lock = 0;
if(Key1_Pre_Time >= 30)
{
Key1_Pre_Num++;
}
Key1_Pre_Time = 0;
Key1_Up_Time++;
if(Key1_Up_Time >= 250)
{
Key1_Up_Time = 0;
if(Key1_Pre_Num)
{
//---------------------
if(Key1_Pre_Num==1)
{
//單擊
}
else if(Key1_Pre_Num==2)
{
//雙擊
}
//--------------------
Key1_Pre_Num = 0;
}
}
}
}
//-----------------------------------------------------------------
這樣就可以把一個(gè)引腳利用到最大化,用于調(diào)試程序也很方便
作者:
Q__Q
時(shí)間:
2023-6-17 14:13
這個(gè)很好 謝謝樓主,昨天看到個(gè)單按鍵 支持長短按鍵不同功能的,這個(gè)增加了個(gè)功能, 先收藏學(xué)習(xí)下
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1