参考:2-5 按键进阶——独立按键的单击与双击(或多击)的编程实现_哔哩哔哩_bilibili
uchar KeyNum;
uchar key_lock_flag;
uint key_cnt;
uint key_cnt2;
uchar key_timers;
#define KEY_DELAY_TIME 20
#define KEY_LONG_TIME 1000
#define KEY_DOUBLE_TIME 500
void Key_Scan()
{
if(!KEY1) //如果按键没有被按下
{
key_lock_flag=0; //清零自锁标志
key_cnt=0; //清零计数标志
if(key_times > 0)
{
key_cnt2++;
if(key_cnt2 > KEY_DOUBLE_TIME) //按下松开时间较长
{
if(key_times == 1)
{
KeyNum=1; //按键单击
}
key_cnt2=0; //清除双击时间间隔
key_times=0; //清除按键次数
}
}
}
else if(!key_lock_flag)
{
key_cnt++;
if(key_cnt > KEY_DELAY_TIME)
{
k