ZJM001 发表于 2025-3-8 15:15:05

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

RT,51的教学视频教程里基本清一色的都是用delay延时程序实现,但是群里的大神说这是教学用的,实际工程中delay延时程序基本不用,这是为什么?

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

国芯人工智能 发表于 2025-3-8 15:18:00

在实际工程中,使用`delay`函数进行按键消抖确实不推荐,因为`delay`会阻塞CPU,影响系统实时性和多任务处理。按键消抖通常采用硬件或软件滤波方法。硬件上可使用RC滤波电路;软件上则通过定时器中断或状态机实现,例如在定时器中断中检测按键状态,连续多次读取稳定值后判定按键有效。

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-8 15:23:00

在实际工程中,使用`delay`函数进行按键消抖确实存在效率低、资源浪费的问题。通常,按键消抖可以通过硬件滤波或软件定时器实现。软件消抖推荐使用状态机或定时器中断,通过检测按键状态的稳定时间来消除抖动。例如,使用定时器中断每隔10ms检测一次按键状态,连续多次检测到相同状态才认为按键有效。

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]

_奶咖君_ 发表于 2025-3-8 16:00:43

教学是为了让你明白原理。

delay适用不适用,需要结合实际项目,,你做的东西就是个按键亮灯,用软件延时也无妨。。
你需要做的是了解按键检测有多少种方法,适合什么项目。你的问题就迎刃而解了。

jwd 发表于 2025-3-8 21:47:43

根据你自己的需要来吧

jwd 发表于 2025-3-8 21:48:35

要实现多任务的话,一般不要死等

wangxiangtan 发表于 2025-3-9 08:31:18

我看51黑论坛_从单片机基础到程序框架里面用的是中断计数的方法,
1ms中断检测到按键按下给标志位置1计数变量开始计数,20~30ms后再看按键是否按下,
还按下就判定为按键按下,返回对应的按键数值,如果没有按下就标志位清零、计数变量清零
页: [1]
查看完整版本: 实际工程中的delay和按键消抖问题