/*
SevTimer
使用定时器驱动四位数码管实现分钟:秒钟的数字时钟显示
*/
#include "TimerOne.h"
#include "SevSeg.h"
SevSeg sevseg;
// 定义时间变量
int minutes = 0; // 分钟
int seconds = 0; // 秒钟
// 数码管配置
const byte NUM_DIGITS = 4; // 数码管位数
const byte DIGIT_PINS[NUM_DIGITS] = {2, 3, 12, 13}; // 数码管位选引脚(连接 Arduino)
const byte SEGMENT_PINS[8] = {7, 6, 5, 10, 11, 8, 9, 4}; // 数码管段选引脚 a,b,c,d,e,f,g,dp
const byte HARDWARE_CONFIG = COMMON_CATHODE; // 共阴极数码管
void setup() {
// 初始化数码管
sevseg.begin(HARDWARE_CONFIG, NUM_DIGITS, DIGIT_PINS, SEGMENT_PINS);
// 初始化定时器 Timer1 为 1 秒周期
Timer1.initialize(1000000);
Timer1.attachInterrupt(timerISR); // 设置中断回调函数
}
void loop() {
// 显示时间,格式 MMSS(分钟*100 + 秒)
sevseg.setNumber(minutes * 100 + seconds, -1); // -1 表示不显示小数点
sevseg.refreshDisplay(); // 刷新显示,必须循环调用
}
// 定时器中断服务程序,每秒触发一次
void timerISR() {
seconds++;
if (seconds > 59) {
seconds = 0;
minutes++;
if (minutes > 59) {
minutes = 0;
}
}
}