和12岁小同志搞创客开发:检测按键状态的两件法宝

如题所述

第1个回答  2022-06-10
按键是创客开发过程中必不可少的器件之一,用户可以通过按键实现交互控制。例如:按键开关灯、长按按键解除报警、按键实现设备控制等功能。

检测按键状态有两种方式:第一种,检测按键端口的输出电压信号变化,判断按键的状态;第二种,按键状态变化触发中断。

下面让我们学习这两种检测按键状态的方法~

在 如何驱动各类型传感器? 这篇文章中讲到:可以将传感器进行分类,主要包括: 数字量输出类型传感器、数字量输入类型传感器、模拟量电压类型传感器、模拟量电流类型传感器和协议类型传感器 。

按键本质上并不是传感器,但是按照驱动方式来看,可当作 数字量输出类型传感器 ,进行驱动。

可以通过按键的设计图明白其中的原理,如下图所示,假设TP点接入单片机IO端口,当按键未被按下时,此处为5V高电平,当按键被按下时,此处就会变为0V低电平,通过这种高、低电平状态变化判断按键的状态变化。

那么设计按键控制LED亮、灭的程序就非常好理解了,如下所示:

我们在设计功能时,难免要用到延时,如果延时时间过长,可以发现按键就不那么灵敏了,主要原因在于:延时消耗过多的处理器资源,程序大多时间都运行在延时函数中,无法进行按键状态的判断。

这时候就需要使用中断触发功能了~

当控制器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断,过程如下所示:

可通过监测按键电平信号变化,触发中断,如下图情况所示,当按键未按下,此时是5V高电平信号。

当按下按键瞬间,高电平会切换到低电平,产生下降沿信号,此时可触发下降沿中断。

当松开按键瞬间,低电平会切换到高电平,产生上降沿信号,此时可触发上降沿中断。

中断程序的实现也非常简单,无需在主程序中设计程序,选择合适的中断信号触发模式,将需要实现的功能写在中断处理函数中,当检测到相应的触发信号,中断处理函数就可以运行了,如下所示:

有一点需要注意,中断处理函数适合处理“急件”,处理完毕后,再回到原来被中断的地址,继续原来的工作,所以不应该在中断程序中有大量长时间的延时,以免对主程序产生影响。

和12岁小同志搞创客开发:检测按键状态的两件法宝
按键是创客开发过程中必不可少的器件之一,用户可以通过按键实现交互控制。例如:按键开关灯、长按按键解除报警、按键实现设备控制等功能。检测按键状态有两种方式:第一种,检测按键端口的输出电压信号变化,判断按键的状态;第二种,按键状态变化触发中断。下面让我们学习这两种检测按键状态的方法~在 如何驱...

和12岁小同志搞创客开发:如何选择合适的传感器?
传感器采集到的数据最终都会以电信号的方式输出,选择合适的输出方式,会极大方便开发过程。例如,电容非接触式液位传感器,输出信号是:开关量,也就是高\/低电平,用户可通过配置控制器端口为输入模式,采集液位传感器输入,若为低电平则说明液体未满,若为高电平则说明液体达到检测点。而接触式光电液位传感...

和12岁小同志搞创客开发:免费开源的激光切割工具库
首先,我们关注的是LaserMaker激光切割设计软件提供的设计图库。这个图库位于LaserMaker官网,提供了大量的免费开源激光切割设计CAD图纸。用户可以自由下载这些图纸,根据实际需求进行简单修改,快速完成打样工作。此外,LaserMaker应用软件中还内置了许多图形文件,支持用户进行快速开发设计。接着,我们来了解一个名为...

相似回答
大家正在搜