基于状态机思想的按键扫描程序支持单按,连续按,长按模式。

typedef enum {
	ButtonsStateUp           = 0,
	ButtonsStateDownJitter      ,
	ButtonsStateDown            ,
	ButtonsStateUpJitter
} EnumButtonsState;

typedef unsigned char uint8;
typedef unsigned long uint32;

#define BUTTONS_UP    0
#defien BUTTONS_DOWN  1

#define BUTTONS_EVENT_NONE           0x00
#define BUTTONS_EVENT_SINGLE_DOWN    0x01
#define BUTTONS_EVENT_SERIES_DOWN    0x02
#define BUTTONS_EVENT_CONTINUE_DOWN  0x03
#define BUTTONS_EVENT_UP             0x04

EnumButtonsState ButtonsState;

void ButtonsScanSM(uint8 *event_type)
{
	uint8 buttons_status;
	
	static uint32 time_point        = 0;
	static uint8  series_down_flg   = 0;
	
	buttons_status = GetButtonsStatus();
	
	switch(ButtonsState)
	{
		case ButtonsStateUp:
		{		
			if(GetSysTicks() - time_point > 1000u)
			{
				series_down_flg = 0;
			}
			
			if(buttons_status == BUTTONS_UP)
			{
				;
			}
			else
			{
				ButtonsState = ButtonsStateDownJitter;
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值