找回密码
 立即注册
查看: 155|回复: 6

实际工程中的delay和按键消抖问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-05-02 11:07:38

8

主题

48

回帖

545

积分

高级会员

积分
545
发表于 2025-3-8 15:15:05 | 显示全部楼层 |阅读模式
RT,51的教学视频教程里基本清一色的都是用delay延时程序实现,但是群里的大神说这是教学用的,实际工程中delay延时程序基本不用,这是为什么?

请问按键在实际工程中应该怎么消抖?有的人说是中断?具体应该怎么做?
另外既然实际工程中delay延时程序基本不用,那用什么实现延时呢?比如说是我用LCD1602或者74595需要一个电平保留时间,这个怎么搞?
谢谢回复
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-8 15:18:00 | 显示全部楼层
在实际工程中,使用`delay`函数进行按键消抖确实不推荐,因为`delay`会阻塞CPU,影响系统实时性和多任务处理。按键消抖通常采用硬件或软件滤波方法。硬件上可使用RC滤波电路;软件上则通过定时器中断或状态机实现,例如在定时器中断中检测按键状态,连续多次读取稳定值后判定按键有效。

对于延时需求,实际工程中常用定时器或系统时钟实现非阻塞延时。例如,使用定时器中断或系统滴答计时器(SysTick)来管理延时任务,确保CPU在等待期间可处理其他任务。对于LCD1602或74595等外设的电平保留时间,同样可通过定时器或硬件特性精确控制,避免使用阻塞式`delay`。

总结,实际工程中应避免阻塞式`delay`,采用定时器、中断或状态机等方法实现延时和按键消抖,以提升系统效率和响应能力。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-8 15:23:00 | 显示全部楼层
在实际工程中,使用`delay`函数进行按键消抖确实存在效率低、资源浪费的问题。通常,按键消抖可以通过硬件滤波或软件定时器实现。软件消抖推荐使用状态机或定时器中断,通过检测按键状态的稳定时间来消除抖动。例如,使用定时器中断每隔10ms检测一次按键状态,连续多次检测到相同状态才认为按键有效。

对于延时需求,如LCD1602或74595的电平保留时间,推荐使用硬件定时器或系统滴答(SysTick)来实现精确延时。通过配置定时器,可以在不阻塞主程序的情况下实现精确的延时操作,从而提高系统的响应效率和多任务处理能力。

总结:按键消抖推荐使用状态机或定时器中断,延时需求通过硬件定时器实现,避免使用阻塞式的`delay`函数。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-3-8 16:00:43 | 显示全部楼层
教学是为了让你明白原理。

delay适用不适用,需要结合实际项目,,你做的东西就是个按键亮灯,用软件延时也无妨。。
你需要做的是了解按键检测有多少种方法,适合什么项目。你的问题就迎刃而解了。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2025-3-8 21:47:43 | 显示全部楼层
根据你自己的需要来吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2025-3-8 21:48:35 | 显示全部楼层
要实现多任务的话,一般不要死等
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-02 07:32:37

21

主题

564

回帖

2678

积分

金牌会员

积分
2678
发表于 2025-3-9 08:31:18 | 显示全部楼层
我看51黑论坛_从单片机基础到程序框架里面用的是中断计数的方法,
1ms中断检测到按键按下给标志位置1计数变量开始计数,20~30ms后再看按键是否按下,
还按下就判定为按键按下,返回对应的按键数值,如果没有按下就标志位清零、计数变量清零
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:46 , Processed in 0.195448 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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