0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用外部中断方式来检查按键KEY状态

冬至子 来源:醉里挑灯舞剑 作者:Franze 2023-11-08 14:15 次阅读

我们学习了如何使用 MicropythonESP32 实现 GPIO 输入输出功能。然而,这种方式存在一个问题:代码需要不断地检测 IO 输入口的变化,导致效率较低。特别是在一些特定场景下,例如某个按键可能一天只被按下一次,但我们仍然浪费了大量时间实时检测按键情况。

为了解决这个问题,我们引入了外部中断的概念。顾名思义,当按键被按下(产生中断)时,我们才去执行相关功能。这大大节省了 CPU 的资源,因此中断在实际项目中的应用非常普遍。

在这个实验证中,我们利用中断方式来检查按键 KEY 状态,被按键被按下(产生外部中断)后使 LED的亮灭状态翻转。

什么是外部中断

外部中断是一种硬件机制,用于通知 CPU 有事件发生。当某个特定的条件满足时(例如,一个按键被按下),CPU 会暂停当前的任务,转而执行与该事件相关的处理程序。这样,我们可以在事件发生时才去处理,而不是持续地检测事件是否发生。

材料准备

  • ESP32开发板
  • LED灯
  • 220欧姆电阻
  • 面包板
  • USB数据线
  • 电脑
  • 按键开关(最好是自复位的)
    和前面那篇用的一样的材料

连接电路

图片

数字电路中的高低电平

在数字电路中,信号的传输是通过电压的变化来实现的。上升沿、下降沿和高低电平是描述信号变化过程的重要概念。

1.高电平和低电平:

高电平和低电平是用来表示数字信号的两个状态。通常情况下,我们将逻辑“1”对应的电压值称为高电平(如3.3V或5V),将逻辑“0”对应的电压值称为低电平(如0V)。这两个状态之间的电压差称为阈值电压

2.上升沿:

上升沿是指信号从低电平跳变到高电平的过程。在这个过程中,信号的电压从一个阈值电压上升到另一个阈值电压。上升沿通常用于表示一个事件的发生,例如按键按下、时钟信号的上升等。

3.下降沿:

下降沿是指信号从高电平跳变到低电平的过程。在这个过程中,信号的电压从一个阈值电压下降到另一个阈值电压。下降沿通常用于表示一个事件的结束,例如按键释放、时钟信号的下降等。

图片

编写代码

图片

代码简说

外部中断也是通过 machine 模块的 Pin 子模块来配置,我们来看看其配构造函数和使用方法:

构造函数

KEY=machine.Pin(id,mode,pull) 构建按键对象

  • id:引脚编号
  • mode:输入输出方式
  • pull:上下拉电阻配置

中断使用方法

KEY.irq(handler,trigger) 配置中断模式
handler:中断执行的回调函数;
trigger: 触发中断的方式,共 4 种分别是

  • Pin.IRQ_FALLING(下降沿触发)
  • Pin.IRQ_RISING(上升沿触发)
  • Pin.IRQ_LOW_LEVEL(低电平触发)
  • Pin.IRQ_HIGH_LEVEL(高电平触发)

上升沿和下降沿触发统称边沿触发,根据前面的波形图,我们可以选择下降沿方式触发外部中断,也就是当按键被按下的时候立即产生中断。

整体思路中断跟前面的实验类似,在初始化中断后,当系统检测到外部终端时候,执行 LED 亮灭状态反转的代码即可。

在以上代码中,需要注意以下几点:

1.在函数fun中使用全局变量state时,需要使用global state声明,否则会在函数内部创建一个新的同名变量,导致冲突。

2.在定义回调函数fun时,需要将Pin对象KEY作为参数传递进去。这样可以确保在回调函数内部可以访问到正确的引脚对象。

运行程序

运行代码,每次按下按键 LED 状态翻转。

总结

从参考代码来看,仅仅几行代码就实现了实验功能,而且相对于使用while True实时检测函数来说,代码的效率得到了极大的提升。外部中断的应用非常广泛,不仅包括普通的按键输入和电平检测,还有很多输入设备,如传感器,也是通过外部中断方式来实时检测的。这些在后面的章节中会详细讲解。

现在越来越注重青少年的科创活动,micropython,树莓派arduino,图形化编程学会了硬件控制的基础,这些平台用起来大同小异。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107841
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15801
  • 欧姆电阻
    +关注

    关注

    0

    文章

    71

    浏览量

    15568
  • 阈值电压
    +关注

    关注

    0

    文章

    73

    浏览量

    51366
  • ESP32
    +关注

    关注

    18

    文章

    958

    浏览量

    17094
收藏 人收藏

    评论

    相关推荐

    Linux下如何使用中断方式驱动按键

    Linux下的按键输入驱动开发模板一文中介绍了基本的按键输入捕获流程,这里将进一步介绍如何使用中断方式驱动
    发表于 07-29 08:59 961次阅读

    按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触发方式和程序设置的方式对不上是为什么?

    按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触发方式和程序设置的方式 对不上?学习了
    发表于 04-22 06:25

    基于STM32的按键控制与外部中断实例详解

    [tr=transparent] //======================================================// **基于STM32的按键控制与外部中断实例
    发表于 07-02 07:33

    基于STM32的按键控制与外部中断实例详解

    [tr=transparent] //======================================================// **基于STM32的按键控制与外部中断实例
    发表于 07-06 08:43

    通过按键外部中断改变对应LED的状态

    使用标准库实现本次功能的源代码已上传:STM32F103ZET6IDE: MDK-ARM V5 +STM32CubeMX5.0.0本次实现的功能是通过按键外部中断改变对应LED的
    发表于 08-13 08:44

    如何利用外部中断实现按键控制LED灯的亮灭?

    如何利用外部中断实现按键控制LED灯的亮灭?
    发表于 11-24 06:22

    按键控制外部中断实现LED亮灭的方法

    直连P3.3外部中断1的管脚,当按键按下则P3.3脚就会被拉低,从而触发外部中断而改变LED状态
    发表于 12-06 08:19

    通过外部中断方式控制LED1的状态

    1【问答题】 (20分)通过外部中断方式控制LED1的状态。初始状态LED1熄灭,按一下KEY1
    发表于 01-25 06:14

    使用中断方式进行检测按键

    使用中断方式进行检测按键实验目的本节实验目的为通过中断方式
    发表于 02-09 07:09

    STM32按键扫描/按键中断/外部中断资料下载

    电子发烧友网为你提供STM32按键扫描/按键中断/外部中断资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料
    发表于 04-13 08:45 23次下载
    STM32<b class='flag-5'>按键</b>扫描/<b class='flag-5'>按键</b><b class='flag-5'>中断</b>/<b class='flag-5'>外部</b><b class='flag-5'>中断</b>资料下载

    实验一——外部中断以及数码管显示

    直连P3.3外部中断1的管脚,当按键按下则P3.3脚就会被拉低,从而触发外部中断而改变LED状态
    发表于 11-23 18:06 6次下载
    实验一——<b class='flag-5'>外部</b><b class='flag-5'>中断</b>以及数码管显示

    MSP432(Keil5)——2.按键外部中断驱动

    本次按键实验是采用了板载的两个按键分别对应的P1.1与P1.4口,具体迁移到其他IO口的外部中断请移步原理图。实验现象:按下按键会翻转板载L
    发表于 12-05 12:36 10次下载
    MSP432(Keil5)——2.<b class='flag-5'>按键</b>及<b class='flag-5'>外部</b><b class='flag-5'>中断</b>驱动

    K210应用4-使用中断方式检测按键

    使用中断方式进行检测按键实验目的本节实验目的为通过中断方式
    发表于 12-05 15:21 9次下载
    K210应用4-使用<b class='flag-5'>中断</b><b class='flag-5'>方式</b>检测<b class='flag-5'>按键</b>

    STM32 HAL库 CubeMX教程(四)按键外部中断

    STM32 HAL库 CubeMX教程(四)外部中断实验内容NVIC(嵌套向量中断控制器)外部中断简介CubeMX配置
    发表于 01-14 15:11 10次下载
    STM32 HAL库 CubeMX教程(四)<b class='flag-5'>按键</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    STM8学习笔记---按键KEY

    按键按下时为低电平。对于KEY来说,IO口为输入口,IO口要读取外部电平状态,根据电平状态
    发表于 01-18 08:43 5次下载
    STM8学习笔记---<b class='flag-5'>按键</b><b class='flag-5'>KEY</b>