21cnsound
发表于 2024-4-3 19:09:59
1楼键盘扫描代码放在1ms定时中断中用很好用,如果有双击的代码就更好了了。
大哲老师
发表于 2024-6-16 11:58:47
很有想法{:4_174:}
lyldzxx
发表于 2024-8-15 19:55:06
学习借鉴借鉴
weatt
发表于 2024-8-15 22:25:38
zhang32568 发表于 2024-4-3 18:12
一楼的我认为不能使用。首先 计数没有清零!这个不是问题好解决。但是如果第一个延时到了标志变成1.但是 ...
我直接做了一个一个计数,少于数字算短按,多于数字算长按,少于50MS算没按
vb2002
发表于 2025-1-18 13:25:39
大佬有不有带长按,和双击的版本,
用你这个代码好一段时间了.挺稳定的.就是缺个双击
vb2002
发表于 2025-1-19 23:44:27
已经在代码上加入了双击功能,
但是有个问题出来了.
进入省电模式后, 要两次单击(不是双击)才能唤醒单片机,第一次我用电流表量了.其实已经唤醒了. 但是没有执行其他代码, 第二次才进入
但是长按却可以一次唤醒.
vb2002
发表于 2025-1-19 23:45:08
这个是我添加双击的代码, 大佬帮看看可以吗
if(!key)
{
if(!key_flag)
{
key_cnt++;
if(key_cnt >= 25) //长按1s
{
key_Short_Flag = 0; //清除短按标志
key_Long_Flag = 1; //设置长按标志
key_flag = 1; //设置按键状态,防止重复触发
key_Long_Function = 1;
}
else if(key_cnt >= 5) //50ms防抖
{
key_Short_Flag = 1; //设置短按标志
}
}
}
else
{
if(key_Short_Flag) //判断是否短按
{
key_Short_Flag = 0; //清除短按标志
// key_Short_Function = 1;
key_cnt3=0;
key_timers++; //统计按键次数
if(key_timers ==1)
{
key_Short_Function = 1;
}
else if(key_timers ==2)
{
key_double_function=1;
}
}
key_cnt = 0;
key_flag = 0; //按键释放
if(key_timers>0)
{
key_cnt3++;
if(key_cnt3>20)
{
key_cnt3=0; //清楚双击时间计数
key_timers =0; //清除按键次数
}
}
}
}
vb2002
发表于 2025-1-20 00:15:41
21cnsound 发表于 2024-4-3 19:09
1楼键盘扫描代码放在1ms定时中断中用很好用,如果有双击的代码就更好了了。 ...
双击我弄出来了.但是不能唤醒省电模式
有点郁闷
tianjing818
发表于 2025-1-20 07:24:38
收藏学习
zhaoye818
发表于 2025-1-20 07:28:14
收藏学习