使用数码管写一个倒计时器,使用按钮可以 设置倒计时时间,倒计时过程中按按钮停止倒计时,并重新设置倒计时时间,倒计时时间到时,蜂呜器响3秒。
时间: 2024-06-09 14:08:39 浏览: 115
基于51单片机的数码管倒计时可以设置时间
5星 · 资源好评率100%
好的,这是一个比较完整的倒计时器代码,涉及到了数码管、按钮、蜂鸣器等模块的使用,需要连接好硬件后进行测试。
```arduino
#include <TM1637Display.h>
// 定义数码管引脚
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
// 定义按钮引脚
#define BUTTON 4
// 定义蜂鸣器引脚
#define BUZZER 5
// 定义倒计时时间(秒)
int countdown = 0;
// 定义倒计时是否停止
bool stopped = true;
void setup() {
// 设置按钮引脚为输入模式
pinMode(BUTTON, INPUT);
// 设置蜂鸣器引脚为输出模式
pinMode(BUZZER, OUTPUT);
// 初始化数码管
display.setBrightness(0x0f);
}
void loop() {
// 判断倒计时是否停止
if (stopped) {
// 获取按钮状态
int buttonState = digitalRead(BUTTON);
// 如果按钮按下
if (buttonState == HIGH) {
// 停止倒计时
stopped = false;
// 重置倒计时时间
countdown = 60;
// 清除数码管显示
display.clear();
// 显示倒计时时间
display.showNumberDec(countdown);
}
} else {
// 获取按钮状态
int buttonState = digitalRead(BUTTON);
// 如果按钮按下
if (buttonState == HIGH) {
// 停止倒计时
stopped = true;
// 清除数码管显示
display.clear();
// 重置倒计时时间
countdown = 0;
} else {
// 倒计时
countdown--;
// 如果倒计时到达 0
if (countdown == 0) {
// 停止倒计时
stopped = true;
// 播放蜂鸣器声音
digitalWrite(BUZZER, HIGH);
delay(3000);
digitalWrite(BUZZER, LOW);
// 清除数码管显示
display.clear();
} else {
// 显示倒计时时间
display.showNumberDec(countdown);
}
}
}
// 延迟 1 秒
delay(1000);
}
```
需要使用 [TM1637Display](https://github.com/avishorp/TM1637) 库来控制数码管的显示。在代码中,我们首先定义了数码管、按钮、蜂鸣器的引脚,然后在 `setup()` 函数中进行初始化。在 `loop()` 函数中,我们首先判断倒计时是否停止,如果停止,则检测按钮是否按下,如果按下,则重置倒计时时间,并开始倒计时。如果倒计时没有停止,则检测按钮是否按下,如果按下,则停止倒计时,并重置倒计时时间。如果按钮没有按下,则每隔 1 秒进行一次倒计时,并在数码管上显示倒计时时间。当倒计时到达 0 时,停止倒计时,并播放蜂鸣器声音。
阅读全文