编写下面的程序按动一次K3,中断次数加1,中断次数以二进制的形式用发光二极管显示。
时间: 2024-05-08 08:19:37 浏览: 65
以下是参考代码:
```c
int interruptCount = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 设置发光二极管为输出模式
attachInterrupt(digitalPinToInterrupt(11), addInterruptCount, FALLING); // 将 K3 与数字引脚 11 相连,设置下降沿触发中断
}
void loop() {
// 将中断次数转换为二进制并显示在发光二极管上
int binaryCount = interruptCount;
for (int i = 7; i >= 0; i--) {
digitalWrite(LED_BUILTIN, binaryCount & (1 << i));
delay(200);
}
}
void addInterruptCount() {
interruptCount++; // 中断次数加1
}
```
稍微解释一下,这个程序有两个核心部分:
- `attachInterrupt`:这个函数可以将某个数字引脚与中断函数绑定,当引脚电平发生指定变化时,就会触发中断函数。在这个程序中,我们将数字引脚 11 与 `addInterruptCount` 函数绑定,当 K3 按下时,引脚电平从高变为低,就会触发中断函数。
- 循环显示二进制数:在 `loop` 中,我们使用一个循环来将计数器 `interruptCount` 的值转换为二进制并显示在发光二极管上。具体来说,我们将 `interruptCount` 的二进制表示从高位到低位一位一位地取出来,然后用 `digitalWrite` 函数将相应的引脚输出高电平或低电平,从而在发光二极管上显示出数字。为了让数字显示得清晰一些,我们在每个数字之间加了一个短暂的延时。
需要注意的是,由于我们在 `addInterruptCount` 中增加计数器的代码非常简单,所以这个程序实际上存在一个问题,就是有可能在计数器被增加之前,K3 被连续按下多次。为了解决这个问题,我们需要在 `addInterruptCount` 中加入一些额外的逻辑,例如限制每次按下的时间间隔,或者使用状态机等方式来确保计数器的增加不会因为连续按键而失效。
阅读全文