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

    文章

    1554

    浏览量

    107034
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15598
  • 欧姆电阻
    +关注

    关注

    0

    文章

    69

    浏览量

    15493
  • 阈值电压
    +关注

    关注

    0

    文章

    61

    浏览量

    51039
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15816
收藏 人收藏

    评论

    相关推荐

    按键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

    用外中断方式按键,控制灯的亮灭

    用外中断方式按键,控制灯的亮灭 这一颗,我们学习外中断的用法。也
    发表于 08-09 23:14 6718次阅读

    外部中断按键抖动(按键消抖)

    当我们写完一个外部中断程序测试时,例如按键计数和按键点亮led灯,我们可能会遇到一次按键按下松开却触发了多次
    发表于 11-22 15:36 26次下载
    <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>

    K210中断按键,自复位按键的两种状态

    K210中断按键,自复位按键的两种状态自复位按键的功能通常有两种:按下按键松手,蓝灯亮起,再次按
    发表于 01-17 12:50 2次下载
    K210<b class='flag-5'>中断</b><b class='flag-5'>按键</b>,自复位<b class='flag-5'>按键</b>的两种<b class='flag-5'>状态</b>