您的位置 首页 发布

单片机按键检测函数

*******************************************************************函数功能:判断某一按键的状态;返回值:0x00-未按键,0x01-

/*******************************************************************
函数功用:判别某一按键的状况;
返回值: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;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/317484.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部