找回密码
 立即注册
楼主: vb2002

找到个很好的状态机按键程序.想添加3击,4击,怎么弄哦求大神

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-12-29 14:13:48 | 显示全部楼层
wnag*** 发表于 2024-12-29 14:08
我感觉有点乱,你觉得呢?还是用状态机写比较好

我现在是在没弄懂和差点弄懂的中间徘徊了.
就差临门一脚了.
再琢磨两天看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-29 14:52:46 | 显示全部楼层
这个程序看起来并不像你的标题说的那样“很好”

至少状态机枚举量用的都是magic number,而没有使用专业严谨的enum数据类型!
这是一个不好的编程习惯,容易导致犯错

比如几个枚举量不小心用了相同数值
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-12-29 15:53:45 来自手机 | 显示全部楼层
VCC 发表于 2024-12-29 14:52
这个程序看起来并不像你的标题说的那样“很好”

至少状态机枚举量用的都是magic number,而没有使用专业严 ...

有更好的状态机按键的代码分享一下吗?
我研究下
最好有短按长按双击多击
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-29 16:00:26 | 显示全部楼层
vb2*** 发表于 2024-12-29 15:53
有更好的状态机按键的代码分享一下吗?
我研究下
最好有短按长按双击多击 ...

哈哈哈哈我没写过

我只是吐槽一下


而且注意到,它的消抖写得也不健全,
只连续采样到2次按下状态就认为已经稳定了

很多机械按键的固有频率如果比较低,可能此时还在震动
应该多采几次,比如等间隔采样3~5次
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-12-29 16:48:51 | 显示全部楼层
VC*** 发表于 2024-12-29 16:00
哈哈哈哈我没写过

我只是吐槽一下

难怪消抖的时候,有时候按下去消抖不是很准
是不是有误触
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-29 16:59:06 | 显示全部楼层
vb2*** 发表于 2024-12-29 16:48
难怪消抖的时候,有时候按下去消抖不是很准
是不是有误触

两次随机采样就认为按钮已经不抖动了,这个从逻辑上就是经不起推敲的

不知道第一个这么写代码的人是怎么想的
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-12-29 19:40:58 | 显示全部楼层
VC*** 发表于 2024-12-29 16:59
两次随机采样就认为按钮已经不抖动了,这个从逻辑上就是经不起推敲的

不知道第一个这么写代码的人是怎么 ...

那如果我要增加消抖次数的话,应该怎么弄,
现在其他的我都弄好了.
就差您说的这个消抖了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-12-30 10:14:12 | 显示全部楼层

给你一个我琢磨的代码

u8 KeyVal = 0;//主循环判断,用完清零
void key_Proc()//单键多按,1ms中断内运行
{
	static u16 Delay_Push=20; //按下消抖
	static u16 Delay_Release=200; //放手消抖
	static u8 KeyCnt = 0;
	if(!Key_XX)
	{
		if(Delay_Push)
		{
			Delay_Push--;
			if(Delay_Push==0) //消抖
			{
				KeyCnt++;
			}
		}
		Delay_Release=200; //Delay_Release重装
	}
	else //按键抬起
	{
		if(Delay_Release)
		{
			Delay_Release--;
			if(Delay_Release==0) //消抖
			{
				KeyVal = KeyCnt;
				KeyCnt = 0;
			}
		}
		Delay_Push=20; //Delay_Push重装
	}
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-12-30 18:28:31 | 显示全部楼层
Lkck*** 发表于 2024-12-30 10:14
给你一个我琢磨的代码
u8 KeyVal = 0;//主循环判断,用完清零
void key_Proc()//单键多按,1ms中断内运行

这个能长按,多按吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-12-30 18:46:11 | 显示全部楼层
vb2*** 发表于 2024-12-30 18:28
这个能长按,多按吗?

这个只有多按
想要长按,稍微改一下代码就行
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:04 , Processed in 0.135571 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表