按下、抬起的按键检测

平时的按键检测大多数是检测按键的短按或长按;最近的项目中用到了另外一种按键处理,项目要求里面有 4个键,每个按键需要检测按下和抬起时的状态,并且只在状态改变时触发一次按键操作;

现做一下记录:

引脚定义:

sbit KEY1_key=P1^1;
sbit KEY2_key=P1^4;
sbit KEY3_key=P1^5;
sbit KEY4_key=P1^6;

宏定义一下:

#define DEBOUNCE_TIME      20 // 消抖时间20ms 

//0是按下;  1是抬起
#define KEY_PRESS         0 
#define KEY_RELEASE     1 


// 状态定义 
typedef enum {
    KEY_STATE_RELEASED=0,       // 稳定释放状态 
    KEY_DEBOUNCE_PRESSING,    // 按下消抖中 
    KEY_STATE_PRESSED,        // 稳定按下状态 
    KEY_DEBOUNCE_RELEASING    // 释放消抖中 
} KeyState;
 
// 按键配置结构体 
typedef struct {
    uchar pin_state;        // 当前物理引脚状态 实际就是读取IO引脚的状态,高=1,低=0;
    KeyState stable_state;    // 稳定状态   上面的4中状态来回切换
    uchar debounce_cnt;     // 消抖计数器    和定时的消抖时间对比ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值