【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:设置消抖时间
可查看以下代码实现:

// An highlighted block
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
如果觉得楼主写可以给个打赏(支付宝),让楼主更有信心写下去,谢谢!
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值