,使用数码管写一个倒计时器,使用按钮可以 设置倒计时时间,倒计时过程中按按钮停止倒计 时,并重新设置倒计时时间,倒计时时间到时,蜂 鸣器响3秒。
时间: 2024-05-07 07:21:52 浏览: 258
这是一个基于Arduino的示例代码,使用了一个4位数码管、一个按钮和一个蜂鸣器。请确保你已经连接好了这些硬件设备。
```c++
#include <SevSeg.h>
SevSeg sevseg; // 数码管对象
const int buttonPin = 2; // 按钮引脚
const int buzzerPin = 3; // 蜂鸣器引脚
int countdown = 0; // 倒计时时间(秒)
bool countdownStarted = false; // 是否已经开始倒计时
bool countdownStopped = false; // 是否已经停止倒计时
bool countdownFinished = false; // 是否已经完成倒计时
void setup() {
byte numDigits = 4; // 数码管显示4位数字
byte digitPins[] = {4, 5, 6, 7}; // 数码管的4个引脚
byte segmentPins[] = {8, 9, 10, 11, 12, 13, A0, A1}; // 数码管的7个段的引脚
bool resistorsOnSegments = false; // 数码管的段是否接上了电阻
bool updateWithDelays = false; // 是否使用延时更新数码管的显示
bool leadingZeros = false; // 是否在前面补0
bool disableDecPoint = true; // 是否禁用小数点
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
pinMode(buttonPin, INPUT_PULLUP); // 按钮使用内置上拉电阻
pinMode(buzzerPin, OUTPUT); // 蜂鸣器输出
Serial.begin(9600); // 打开串口以便调试
}
void loop() {
// 读取按钮状态
bool buttonState = digitalRead(buttonPin) == LOW;
// 如果按钮被按下并且倒计时没有开始,则设置倒计时时间
if (buttonState && !countdownStarted) {
countdown = 10; // 设置倒计时时间为10秒
countdownStarted = true; // 标记已经开始倒计时
countdownStopped = false; // 标记没有停止倒计时
countdownFinished = false; // 标记没有完成倒计时
}
// 如果按钮被按下并且倒计时已经开始,则停止倒计时并重新设置倒计时时间
if (buttonState && countdownStarted && !countdownStopped) {
countdownStopped = true; // 标记已经停止倒计时
countdown = 5; // 重新设置倒计时时间为5秒
}
// 更新数码管的显示
if (!countdownFinished) {
sevseg.setNumber(countdown); // 显示倒计时时间
sevseg.refreshDisplay(); // 刷新数码管的显示
}
// 如果倒计时已经开始并且没有被停止,则倒计时减1
if (countdownStarted && !countdownStopped && !countdownFinished) {
countdown--; // 倒计时减1
if (countdown == 0) {
countdownFinished = true; // 标记已经完成倒计时
digitalWrite(buzzerPin, HIGH); // 开启蜂鸣器
delay(3000); // 等待3秒
digitalWrite(buzzerPin, LOW); // 关闭蜂鸣器
}
}
// 调试信息
Serial.print("Countdown: ");
Serial.println(countdown);
Serial.print("Countdown started: ");
Serial.println(countdownStarted);
Serial.print("Countdown stopped: ");
Serial.println(countdownStopped);
Serial.print("Countdown finished: ");
Serial.println(countdownFinished);
Serial.println();
}
```
这个代码主要是通过读取按钮的状态来设置倒计时时间,并且可以在倒计时过程中按下按钮停止倒计时并重新设置倒计时时间。同时,它还会在倒计时结束时开启蜂鸣器响3秒。你可以根据需要修改代码来适应自己的硬件环境。
阅读全文