首页 理论教育 建议避免使用长时间延时函数,优化按键检测方法

建议避免使用长时间延时函数,优化按键检测方法

时间:2023-06-28 理论教育 版权反馈
【摘要】:请读者认真阅读图5-12,理解并消化这种高效率的按键检测方法,并建议在后续学习工作中尽量避免使用长时间延时函数。

建议避免使用长时间延时函数,优化按键检测方法

1.请解释“全局变量”“局部变量”和“静态变量”。

2.请使用定时器T1实现数码管每隔100ms循环显示0~9。要求T1每隔20ms中断一次,高优先级

3.请解释TMOD、TCON、IP和IE等特殊功能寄存器的含义。

4.在前面几章的学习中,我们只用“延时函数”来实现延时的目的,其效果是十分糟糕的,首先难以产生较为精确的延时,更重要的是在延时过程中,单片机无法往下执行其他指令(它在忙着数绵羊呢),导致单片机执行的效率非常低下。通过本章的学习,我们知道有了定时器,我们可以每隔一段时间去处理某件事,比如每隔1s改变一下指示灯状态。请使用定时器,实现对接在P0口的8个指示灯依次循环点亮。说明:我们建议读者把流水灯章节全部模式的流水灯全部重新实现一次。

5.第3章我们在学习按键检测时,同样使用了“延时函数”以实现“去抖动”的目的,其实我们完全可以换个思维——每隔一段时间(比如10ms、20ms)去检测按键状态,如果连续两次检测到的状态是一致的,则可以认为该状态是有效的。请看图5-11。

978-7-111-55685-5-Chapter05-28.jpg

图5-11 按键动作过程

我们可以将按键检测状态定义为如下三种:

➢“初始状态”——每隔一段时间检测一次按键状态,若为高电平,则保持此状态;若变为低电平,则进入下一个状态,即消抖状态。(www.xing528.com)

➢“消抖状态”——此状态再次检测按键状态,若变为高电平,则返回初始状态,说明上一个状态检测到的电平为干扰;若保持为低电平,则说明按键真的被按下,这是可设置按键按下标志,同时进入下一个状态,等待松开状态。

➢“等待松开状态”——此状态由于这一次的按键按下已被响应了,哪怕它一直保持低电平,也不再认为按键有效了;此状态,一旦检测到按键变为高电平,则恢复到“初始状态”。

这样,我们可以使用if语句,每隔一段时间进行查询与判断,而不用使用for或while语句进行循环操作。如此,单片机会有大把的“时间”去处理其他事务。请读者认真阅读图5-12,理解并消化这种高效率的按键检测方法,并建议在后续学习工作中尽量避免使用长时间延时函数。

978-7-111-55685-5-Chapter05-29.jpg

图5-12 高效的按键检测函数

在理解与消化图5-12的基础上,请使用图5-12的按键检测方法,每按一下接在P3.2的按键,数码管显示的数码加l。要求:数码管初始时显示“0”;当数码管显示“9”时再加1,恢复为显示“0”。

978-7-111-55685-5-Chapter05-30.jpg

978-7-111-55685-5-Chapter05-31.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈