//数码管实验,1624221,1624222,单片机原理与接口技术
#include "SevSeg.h"
// 实例化一个七段数码管控制器对象
SevSeg sevseg;
int deciSeconds = 0;
void setup() {
// 定义数码管的数量
byte numDigits = 4;
// 定义控制每个数码管的引脚
byte digitPins[] = {2, 3, 4, 5};
// 定义控制七段中每一段的引脚
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
// 如果电阻在段引脚上,则设置为false;如果在数码管引脚上,则设置为true
bool resistorsOnSegments = false;
// 硬件配置,COMMON_ANODE表示公共阳极,COMMON_CATHODE表示公共阴极
byte hardwareConfig = COMMON_ANODE;
// 是否使用延迟来更新显示,通常设置为false以提高性能
bool updateWithDelays = false;
// 是否保留前导零,true表示保留,false表示不保留
bool leadingZeros = false;
// 如果小数点不存在或未连接,则设置为true
bool disableDecPoint = false;
// 初始化七段数码管控制器
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
// 设置数码管的亮度,学号后两位
sevseg.setBrightness(66);
}
void loop() {
// 使用静态变量来保持计时器和计数值在循环之间的状态
static unsigned long timer = millis();
// 检查是否已经过去了一毫秒(或更多)
if (millis() - timer >= 1) {
// 更新计时器
timer += 1;
// 每过一毫秒,计数值增加1(这里实际上是每秒增加1000,因为千分之一秒计数)
// 注意:原注释中的"100 milliSeconds is equal to 1 deciSecond"可能有误,
// 因为这里实际上是每次循环增加1,每秒大约增加1000(取决于循环速度)
deciSeconds++;
// 更新数码管显示的数字
if (deciSeconds <= 10000)
{
sevseg.setNumber(deciSeconds, 3); // -1表示不显示小数点
}
// 当计数值达到10000时,更改为学号后四位,并等待10秒
else if(deciSeconds > 10000 && deciSeconds <= 19999) {
// 学号后四位
sevseg.setNumber(6666, 0); // -1表示不显示小数点
}
else if(deciSeconds > 19999) {
deciSeconds = 0;
sevseg.setNumber(0, 0); // -1表示不显示小数点
}
}
// 刷新数码管显示,这一步必须反复执行以保持显示更新
sevseg.refreshDisplay();
}