根据高手指点修改了长按短按识别程序,放到任务中,只有短按能识别,长按还是无法识别,程序如下:
根据高手指点修改了长按短按识别程序,放到任务中,只有短按能识别,长按还是无法识别,程序如下:#define const_key_time_short120 //短按的按键去抖动延时的时间
#define const_key_time_long1 400 //长按的按键去抖动延时的时间
#define const_key_time_short220 //短按的按键去抖动延时的时间
#define const_key_time_long2 400 //长按的按键去抖动延时的时间
void task4_task(void * pvParameters)
{
static int uiKeyTimeCnt1=0;
static u8ucKeyLock1=0;
static u8ucShortTouchFlag1=0;
while(1)
{
if(KEY2==1)//IO是高电平,说明两个按键没有全部被按下,这时要及时清零一些标志位
{
ucKeyLock1=0; //按键自锁标志清零
uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
if(ucShortTouchFlag1==1)//短按触发标志
{
ucShortTouchFlag1=0;
K2Sec_1=1; //触发一号键的短按
}
}
else if(ucKeyLock1==0)//有按键按下,且是第一次被按下
{
uiKeyTimeCnt1++; //累加定时中断次数
if(uiKeyTimeCnt1>const_key_time_short1)
{
ucShortTouchFlag1=1; //激活按键短按的有效标志
}
if(uiKeyTimeCnt1>const_key_time_long1)
{
ucShortTouchFlag1=0;//清除按键短按的有效标志
uiKeyTimeCnt1=0;
ucKeyLock1=1;//自锁按键置位,避免一直触发
K2Sec_1=2; //触发1号键的长按
}
}
printf("task-2:%d\r\n",K2Sec_1);
vTaskDelay(100 / portTICK_RATE_MS);//增加延时节拍函数
}
}
直接移植我们H7-TOOL里面的按键代码吧,比较好移植。
做了长按,短按,双击等支持。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=95468&extra=page%3D1
上面的程序已经很简单了,只想搞清楚是嘛原因,求高手指点,可将程序复制到工程试试 wis98 发表于 2020-3-7 10:52
上面的程序已经很简单了,只想搞清楚是嘛原因,求高手指点,可将程序复制到工程试试
看了下,没看懂,让坛友帮你看看
{:33:}
页:
[1]