×
嵌入式 > 嵌入式开发 > 详情

单片机按键检测函数

发布时间:2025-06-27 发布时间:
|
/*******************************************************************
函数功能:判断某一按键的状态;
返回值:0x00-未按键,0x01-短按键,0x02-长按键;(本程序不设连发功能)
注意:本长短按键是在同一按键上实现;
长按键是持续按下2秒后认为是长按键,此时可以执行按键功能程序,必须释放
按键后才可以再次执行按键判断;
短按键是按下时间在2秒以内并释放的为短按键,含20ms的防抖,按键执行是在
按键释放后执行的;
为了定时方便,本函数是每10ms执行一次的,如果执行周期有变,注意更改相
关变量。
(可以将此函数以结构体形式扩展为多个通道检测,本处测试函数未做。)
********************************************************************/
uchar get_sw_state(void)
{
static uchar count=0; //按键状态计时;
static uchar long_key=0; //长按键标志;
static uchar t50ms_for_err=0; //50ms防释放干扰或人认抖动,即有按键时,须检测到释放时间达到50ms才认为真的是释放;
uchar value_tmp=0x00; //键值;

if(NO_SWITCH)
{
if(t50ms_for_err!=0) t50ms_for_err--;
if(0==t50ms_for_err) //确实释放;
{
if(0==long_key) //不可省,防止按键一直不放,count从TOP值又到了BOTTOM重新计数;
{
if(count<2) value_tmp=0x00; //防抖;
else if(count<200) value_tmp=0x01; //2秒以内释放为短按键;
}
count=0; //计数清零;
long_key=0;
}
}
else
{
count++;
if(count>2) t50ms_for_err=5;
if((200==count)&&(0==long_key))
{
long_key=1;
value_tmp=0x02;
}
}
return value_tmp;
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
高通汽车芯片布局之道