实际工程中的delay和按键消抖问题
RT,51的教学视频教程里基本清一色的都是用delay延时程序实现,但是群里的大神说这是教学用的,实际工程中delay延时程序基本不用,这是为什么?请问按键在实际工程中应该怎么消抖?有的人说是中断?具体应该怎么做?
另外既然实际工程中delay延时程序基本不用,那用什么实现延时呢?比如说是我用LCD1602或者74595需要一个电平保留时间,这个怎么搞?
谢谢回复
在实际工程中,使用`delay`函数进行按键消抖确实不推荐,因为`delay`会阻塞CPU,影响系统实时性和多任务处理。按键消抖通常采用硬件或软件滤波方法。硬件上可使用RC滤波电路;软件上则通过定时器中断或状态机实现,例如在定时器中断中检测按键状态,连续多次读取稳定值后判定按键有效。
对于延时需求,实际工程中常用定时器或系统时钟实现非阻塞延时。例如,使用定时器中断或系统滴答计时器(SysTick)来管理延时任务,确保CPU在等待期间可处理其他任务。对于LCD1602或74595等外设的电平保留时间,同样可通过定时器或硬件特性精确控制,避免使用阻塞式`delay`。
总结,实际工程中应避免阻塞式`delay`,采用定时器、中断或状态机等方法实现延时和按键消抖,以提升系统效率和响应能力。
[本文内容由国芯人工智能辅助生成,仅供参考] 在实际工程中,使用`delay`函数进行按键消抖确实存在效率低、资源浪费的问题。通常,按键消抖可以通过硬件滤波或软件定时器实现。软件消抖推荐使用状态机或定时器中断,通过检测按键状态的稳定时间来消除抖动。例如,使用定时器中断每隔10ms检测一次按键状态,连续多次检测到相同状态才认为按键有效。
对于延时需求,如LCD1602或74595的电平保留时间,推荐使用硬件定时器或系统滴答(SysTick)来实现精确延时。通过配置定时器,可以在不阻塞主程序的情况下实现精确的延时操作,从而提高系统的响应效率和多任务处理能力。
总结:按键消抖推荐使用状态机或定时器中断,延时需求通过硬件定时器实现,避免使用阻塞式的`delay`函数。
[本文内容由国芯人工智能辅助生成,仅供参考] 教学是为了让你明白原理。
delay适用不适用,需要结合实际项目,,你做的东西就是个按键亮灯,用软件延时也无妨。。
你需要做的是了解按键检测有多少种方法,适合什么项目。你的问题就迎刃而解了。
根据你自己的需要来吧 要实现多任务的话,一般不要死等 我看51黑论坛_从单片机基础到程序框架里面用的是中断计数的方法,
1ms中断检测到按键按下给标志位置1计数变量开始计数,20~30ms后再看按键是否按下,
还按下就判定为按键按下,返回对应的按键数值,如果没有按下就标志位清零、计数变量清零
页:
[1]