如何实现单片机单击、双击、长按操作,可以参考别人文章:https://blog.youkuaiyun.com/qq997758497/article/details/80606710;
在这里我主要将这个功能再进行扩展,实现按键的单击、双击、长按3s、长按10s操作。
需要修改的地方:
1、预定义:
//#define key_long_3 3 注释这行代码
#define key_long_3s 3 //返回值,长按3s
#define key_long_10s 4 //返回值,长按10s
#define key_state_4 4 //定义一个新的状态值
2、修改key_driver()函数:
unsigned char key_driver(void)
{
unsigned char key_return = key_no;
key1 = ((keys_flag)&(0x00080000));//key_input; //read the I/O states
switch(key_state_buffer1)
{
case key_state_0:
if(key1 == KeyOn())
key_state_buffer1 = key_state_1;
//按键被按下,状态转换到按键消抖和确认状态//
break;
case key_state_1://消抖
if(key1 == KeyOn())
{
key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
//此时按键仍然处于按下的状态