【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 如果觉得楼主写可以给个打赏(支付宝),让楼主更有信心写下去,谢谢!