#include <TM1637.h>

const int CLK = 2; // CLK连接到UON的D2引脚
const int DIO = 3; // DIO连接到UON的D3引脚
const int RESET_PIN = 4; // 复位按钮连接到UON的D4引脚

TM1637 tm(CLK, DIO); // 初始化TM1637

unsigned long currentTime = 0; // 当前时间
unsigned long lastTime = 0; // 上一次更新时间
int elapsedTime = 0; // 经过的时间(秒)
bool isPaused = false; // 计时器是否暂停

void setup() {
  tm.init(); // 初始化TM1637
  pinMode(RESET_PIN, INPUT_PULLUP); // 启用D4引脚的内部上拉电阻
  tm.setBrightness(2); // 设置亮度为2
}

void loop() {
  // 检测是否按下了复位按钮
  if (digitalRead(RESET_PIN) == LOW) {
    delay(50); // 延迟去抖
    if (digitalRead(RESET_PIN) == LOW) {
      // 复位计时器
      elapsedTime = 0;
      isPaused = false;
    }
  }

  // 更新计时器
  currentTime = millis();
  if (!isPaused && currentTime - lastTime >= 1000) {
    elapsedTime++;
    lastTime = currentTime;
  }

  // 在数码管上显示计时器时间
  int seconds = elapsedTime % 60;
  int minutes = (elapsedTime / 60) % 60;
  int hours = (elapsedTime / 3600) % 24;
  tm.display(0, hours / 10); // 十位小时
  tm.display(1, hours % 10); // 个位小时
  tm.display(2, minutes / 10); // 十位分钟
  tm.display(3, minutes % 10); // 个位分钟
  tm.display(4, seconds / 10); // 十位秒钟
  tm.display(5, seconds % 10); // 个位秒钟
}

4-Digit Display