1、基于定时器设计一个最大范围10s的秒表。 2、按键有三重功能,包含开始/暂停/清零。第一次按下,秒表开始计时,SEG72显示毫秒,SEG71显示秒。第二次按下,暂停计时。第三次按下,两个数码管数据显示为0.
时间: 2024-05-01 08:22:55 浏览: 74
代码_单片机定时器/计数器设计一个秒表_proteus实现秒表_
5星 · 资源好评率100%
以下是基于Arduino的秒表程序:
```
#include <TM1637Display.h>
const int CLK = 2; // CLK引脚连接到Arduino数字引脚2
const int DIO = 3; // DIO引脚连接到Arduino数字引脚3
const int BUTTON_PIN = 4; // 按钮引脚连接到Arduino数字引脚4
TM1637Display display(CLK, DIO);
unsigned long startTime = 0;
unsigned long elapsedTime = 0;
boolean isRunning = false;
boolean isPaused = false;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
display.setBrightness(0x0f); // 设置亮度为最大值
display.clearDisplay(); // 清空数码管显示
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // 检测按钮是否按下
delay(50); // 延时去抖动
if (digitalRead(BUTTON_PIN) == LOW) {
if (!isRunning && !isPaused) { // 第一次按下按钮,开始计时
startTime = millis();
isRunning = true;
isPaused = false;
} else if (isRunning && !isPaused) { // 第二次按下按钮,暂停计时
elapsedTime = millis() - startTime;
isRunning = false;
isPaused = true;
} else { // 第三次按下按钮,清零计时
startTime = 0;
elapsedTime = 0;
isRunning = false;
isPaused = false;
display.showNumberDec(0); // 显示0
delay(1000);
display.showNumberDec(0, true); // 显示0.0
delay(1000);
display.clearDisplay(); // 清空数码管显示
}
}
}
if (isRunning) { // 计时进行中,更新数码管显示
elapsedTime = millis() - startTime;
int seconds = elapsedTime / 1000;
int milliseconds = (elapsedTime % 1000) / 10;
display.showNumberDec(milliseconds, true, 2, 0); // 显示毫秒
display.showNumberDecEx(seconds, 0b01000000); // 显示秒(带小数点)
}
}
```
该程序使用了TM1637Display库控制数码管显示,使用数字引脚2和3连接CLK和DIO引脚。按键连接到数字引脚4,并通过INPUT_PULLUP模式启用内部上拉电阻。
程序中使用了isRunning和isPaused两个变量来记录计时器的状态。按下按钮后,根据当前状态执行不同的操作。当计时进行中时,使用millis()函数计算已经过的时间,并更新数码管显示。注意在更新显示时使用了0b01000000来设置小数点位置,这表示在秒的第二位显示小数点。
在按钮按下时使用了50ms的延时去抖动,以避免误触。当第三次按下按钮清零时,使用了延时函数分别显示0和0.0,以让用户知道计时器已经被清零。
阅读全文