单片机按键检测函数
时间: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;
}
函数功能:判断某一按键的状态;
返回值: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;
}
单片机按键检测函 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)