本帖最后由 TJM2613 于 2023-3-1 14:18 编辑
按键实现功能,按下和松开都能识别,长按就一直发送数据,在定时器中扫描,不要添加delay。多个按键,由于按键功能要求,并没有做矩阵键盘,都是单个io口上拉
这是我目前的做法
#define Key_time_cnt 15
#define Key_long_cnt 65
struct scan_key
{
uint8_t key1;
uint8_t key2;
};
char Flag = 0x00;
struct scan_key ABOVE_K;
void ABOVE_KEY()//在2ms中断中调用
{
if(gpio_read(ABOVE) == 0)
{
ABOVE_K.key1++;
ABOVE_K.key2 = 0;
if(ABOVE_K.key1 == Key_time_cnt)//消抖确认按下
{
Flag |= 0x01;
data[3] = 1;
}
else if(ABOVE_K.key1 >= Key_long_cnt)长按
{
ABOVE_K.key1 = Key_time_cnt;
data[3] = 1;
}
}
else
{
ABOVE_K.key1 = 0;
if(Flag & 0x01 == 0x01)
{
ABOVE_K.key2++;
if(ABOVE_K.key2 >= Key_time_cnt)//消抖确认松开
{
ABOVE_K.key2 = 0;
Flag &= ~0x01;
data[3] = 0;
}
}
else
{
ABOVE_K.key2 = 0;
}
}
}
|