单片机按键的定时器消抖处理

使用定时器计时,给按键的按下、抬起的计时消抖,在大循环while里不堵塞,可以同时检测到每个按键各自的“按下”“长按”“抬起”的状态。在此基础上,按键的长按一秒、两秒三秒,按键的双击,组合键功能(例如Ctrl+C)等已经很容易实现了。
button.c和button.h直接添加到工程里,编译然后修改到对应的布尔变量。user.c是应用文件。

一、源文件button.c

按键操作。不同的编译器里布尔变量类型的几种写法:bit - bool - _Bool - unsigned char。
函数Btn_InitNull(BtnControl_pst pBtn)对按键参数初始化,设置按键初始状态为“无动作”。
函数Btn_InitPress(BtnControl_pst pBtn)对按键参数初始化,设置按键初始状态为“长按”。
函数Btn_Scan(BtnControl_pst pBtn, _Bool bPin)是在main()的大循环里检测按键状态。

#include "button.h"



static _Bool Btn_Shake(BtnControl_pst pBtn, uint8_t site);



/**************************************************************************
Function:    Btn_InitNull
Description: 初始化按键参数,状态设为:S_NULL(无动作)
Input:       - pBtn 按键操作结构体
Return:      no
**************************************************************************/
void Btn_InitNull(BtnControl_pst pBtn)
{
    pBtn->status  = S_NULL;
    pBtn->bAction = 0;
    pBtn->bDelay  = 0;
}
/**************************************************************************
Function:    Btn_InitPress
Description: 初始化按键参数,状态设为:S_PRESS(长按)
Input:       - pBtn 按键操作结构体
Return:      no
**************************************************************************/
void Btn_InitPress(BtnControl_pst pBtn)
{
    pBtn->status  = S_PRESS;
    pBtn->bAction = 1;
    pBtn->bDelay  = 0;
}
/*******************************************************
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值