CSDN-Ada助手 2023-05-28 17:11 采纳率: 1.5%
浏览 31

这里为什么使用双边沿触发中断而不直接用上升沿触发中断?既然使用双边沿触发中断,为什么没有出现按下按键后灯亮,此时松开按键后灯灭的情景?

该问题来自社区帖: https://bbs.csdn.net/topics/615579614.为符合问答规范, 该问题经过ChatGPT优化
为何使用双边沿触发中断而非上升沿触发中断?为什么按下按键后灯未亮,并在松开按键后熄灭?请参考以下代码和电路图:

此代码中选用双边沿触发中断,因为按键的机械特性会导致电平从高到低、低到高来回切换,双边沿触发中断可以将所有触发边缘有效地捕获。同时,在按下按键时,电平需要切换两次才能达到有效触发中断的状态,因此使用上升沿触发中断无法满足要求。

而按下按键后灯未亮,是因为按键的电路结构修改了芯片上拉(或下拉)电阻的电平,导致电平状态被改变。因此需要在代码中添加相应的判断语句,对电平状态的变化进行识别并执行相应的操作。下面是完整的优化代码:

```html

// 电路图见上图 const int buttonPin = 2; // 按键连接到引脚2 const int ledPin = 13; // LED连接到引脚13 int buttonState = 0; // 初始化按键状态为0 void setup() { pinMode(ledPin, OUTPUT); // 初始化LED为输出 pinMode(buttonPin, INPUT_PULLUP); // 初始化按键为输入上拉 attachInterrupt(buttonPin, buttonInterrupt, CHANGE); // 绑定中断函数 } void loop() { } void buttonInterrupt() { // 按键触发中断函数 buttonState = digitalRead(buttonPin); // 读取按键状态 if (buttonState == LOW) { // 判断按键状态是否低电平 digitalWrite(ledPin, HIGH); // 点亮LED } else { // 按键状态非低电平,即松开按键,熄灭LED digitalWrite(ledPin, LOW); } }

```
  • 写回答

2条回答 默认 最新

  • 于扶摇 2023-05-28 18:08
    关注
    
    
    ```c
    // 电路图见上图   
    const int buttonPin = 2; // 按键连接到引脚2   
    const int ledPin = 13; // LED连接到引脚13   
    int buttonState = 0; // 初始化按键状态为0   
      
    void setup() {   
      pinMode(ledPin, OUTPUT); // 初始化LED为输出   
      pinMode(buttonPin, INPUT_PULLUP); // 初始化按键为输入上拉   
      attachInterrupt(buttonPin, buttonInterrupt, CHANGE); // 绑定中断函数 }   
      
    void loop() { }   
      
    void buttonInterrupt() { // 按键触发中断函数   
      buttonState = digitalRead(buttonPin); // 读取按键状态   
      if (buttonState == LOW) { // 判断按键状态是否低电平   
        digitalWrite(ledPin, HIGH); // 点亮LED   
      } else { // 按键状态非低电平,即松开按键,熄灭LED   
        digitalWrite(ledPin, LOW);   
      }   
    }
    
    

    ```

    评论

报告相同问题?

问题事件

  • 创建了问题 5月28日

悬赏问题

  • ¥15 谁知道这个咋搞的吗,有偿
  • ¥20 基于spring boot、的scorm
  • ¥15 往复密封问题的两个问题
  • ¥15 DAC函数和STM32
  • ¥15 任务是接收数据并把数据写入DAC7311,这些代码能实现此功能吗
  • ¥15 分析FP -Growth代码运行内存太大而无法运行的原因
  • ¥20 qtcreat 使用msvc编译器开发软件运行时字体锯齿感严重
  • ¥15 为何显示keyerror fruit
  • ¥15 imageware粗糙度表面
  • ¥15 为什么我的uibot导入py模块出错呀。py文件放在了uibot里对应的python文件夹了,卸了重安也不行