u8 click_check(void){
// 可修改的局部变量
u8 short_time=50,long_time=200;
// 定义全局变量
static u8 flag_click,first_click,second_click;
static u16 first_count,second_count;
//当按键按下,即KEY==0,first_count 就计数,松开就清零
if(KEY==0){
first_count++;
flag_click=1;
}else{
first_count=0;
flag_click=0;
first_click=0;
}
// 标记按下一次,并记录次数
if(first_click==0&&flag_click==1){
second_click++;
first_click=1;
if(second_click==2){
second_click=0;
second_count=0;
flag_click=0;
return 2;
}
}
// 如果已有一次按下,就开始计数
if(second_click==1){
second_count++;
// 判定为单击
if(first_count<short_time&&short_time<second_count){
second_click=0;
second_count=0;
flag_click=0;
return 1;
}
// 一直按住,达到长按时间
if(long_time<first_count){
second_click=0;
second_count=0;
flag_click=0;
return 3;
}
}
return 0;
}
常量short_time,long_time是次数,是无单位数据,根据扫描频率来确定时间。
我的每次扫描间隔10ms,所以双击要在0.5s内完成,长按要超过2s。
返回值:
0:无
1:单击
2:双击
3:长按