【STM32随笔 一】按键消抖处理
【STM32随笔 一】按键消抖处理
通过计数的形式,对按键进行消抖处理,而非用延时的形式,具体可向下查看。
一 、按键类型说明
以下定义了两个类型在接下来的程序下会用到,释义可看注释
typedef
enum{
eErr_Ok
,
eErr_Fail
}err_t
;
typedef
u8 (*KeyCallBack_t
)(void);
typedef struct
{
u16 usCnt
;
u8 ucActiveLevel
;
KeyCallBack_t ucValCallBack
;
u16 usDebounDly
;
}key_t
;
二 、按键类型初始化
key_t 是按键类型,可查看(一) key_t *pkey:需初始化的按键类型 u8 active:设置检测高电平还是低电平 u16 dly:设置消抖时间 可查看以下代码实现:
void vKey_Init(key_t
*pkey
,u8 active
,u16 dly,KeyCallBack_t callback
)
{
pkey
->usCnt
= 0;
pkey
->ucActiveLevel
= active
;
pkey
->ucValCallBack
= callback
;
pkey
->usDebounDly
= dly
;
}
二 、按键消抖实现
如果当前按键电平等于设置的电平
{
计数值加1;
如果计数值大于等于设置的电平
{
计数值 = 边界值;//防止计数值累加溢出
返回成功;
}
}
否则
{
计数值清零;
}
返回失败;
以下是代码的实现:
err_t
xKey_Detect(key_t
*pkey
)
{
if(pkey
->ucValCallBack()==pkey
->ucActiveLevel
)
{
pkey
->usCnt
++;
if(pkey
->usCnt
> pkey
->usDebounDly
)
{
pkey
->usCnt
= pkey
->usDebounDly
;
return eErr_Ok
;
}
}
else
{
pkey
->usCnt
= 0;
}
return eErr_Fail
;
}
三、在单片机中的实现
此代码是在stm32f407ve中实现的,只是对高电平消抖,如有兴趣自己可以对高低电平都消抖。这只是初始版本,以下是代码自己可下载: 在QQ群中可下载:857081287 如果觉得楼主写可以给个打赏(支付宝),让楼主更有信心写下去,谢谢!