微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机按键检测函数

单片机按键检测函数

时间:12-01 来源:互联网 点击:
/*******************************************************************
函数功能:判断某一按键的状态;
返回值: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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top