|
下列為一路按鍵檢測,可以增加到多路,原理都是這樣的,工程應(yīng)用在附件里。
STM32單片機(jī)源程序如下:
//按鍵檢測
void key_scan(void)
{
key_s.get_key_num=get_key_value();
if(key_s.get_key_num) //判斷是否有按鍵按下
{
switch(key_s.get_key_num)
{
//============================================================================================
case KEY_1: //按鍵1按下
switch(key_s.state)
{
case KEY_NONE: //之前沒有檢測到按下
key_s.state=KEY_1_DOWN;
break;
case KEY_1_DOWN: //檢測到按下
key_s.long_count++; //長按檢測開始
if(key_s.long_count>=KEY_LONG_TIME)
{
key_s.key_resault=KEY_1_LONG;
key_s.state=KEY_1_LONG;
}
break;
case KEY_1_UP: //雙擊按下
key_s.state=KEY_1_DUBDOW;
key_s.count=0;
break;
case KEY_1_LONG: //長按按下等待釋放
break;
case KEY_1_DUBDOW: //雙擊按下等待釋放
break;
case KEY_1_TIEBLE: //三擊按下等待釋放
break;
case KEY_1_DOUBLE: //三擊按下
key_s.state=KEY_1_TIEBLE;
break;
default:
break;
}
break;
default:
break;
}
}
else
{
switch(key_s.state)
{
case KEY_NONE: //沒有檢測到按下
key_s.count=0;
key_s.double_count=0;
key_s.long_count=0;
key_s.trible_count=0;
break;
//============================================================================================
case KEY_1_DOWN: //檢測到按鍵1按下后松手
key_s.state=KEY_1_UP;
break;
case KEY_1_UP:
key_s.count++; //單擊計數(shù)超時檢測
key_s.double_count++;
if(key_s.count>=KEY_DOUBLE_MAX)
{
key_s.key_resault=KEY_1_DOWN;
key_s.state=KEY_NONE;
}
break;
case KEY_1_LONG:
key_s.state=KEY_NONE;
break;
case KEY_1_DUBDOW:
key_s.state=KEY_1_DOUBLE;
break;
case KEY_1_DOUBLE:
key_s.count++; //雙擊計數(shù)超時檢測
key_s.trible_count++;
if(key_s.count>=KEY_DOUBLE_MAX)
{
if((key_s.double_count>=KEY_DOUBLE_MIN)&&(key_s.double_count<=KEY_DOUBLE_MAX))
{
key_s.key_resault=KEY_1_DOUBLE;
}
key_s.state=KEY_NONE;
}
break;
case KEY_1_TIEBLE:
if((key_s.trible_count>=KEY_DOUBLE_MIN)&&(key_s.trible_count<=KEY_DOUBLE_MAX))
{
key_s.key_resault=KEY_1_TIEBLE;
}
key_s.state=KEY_NONE;
break;
default:
break;
}
}
}
全部資料51hei下載地址:
STM32_key_chank.7z
(184.6 KB, 下載次數(shù): 115)
2019-8-25 15:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|