前言
我们经常会看到 各个场合下面有 基于数码管 的时钟程序
比如 在车站, 教室, 办公室 等等 各个场合都有
然后 这里就是做一个 简单的 时钟程序 展示程序
测试用例
每一秒钟更新时间, 然后 迭代更新 天, 时, 分 等等
然后 主流程 基于 天, 时分秒 渲染数码管
#include "utils.h"
u8 emptyLedCols[8] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
/**
* main related
*/
long counter = 1;
long baseDay = 24;
long baseHour = 15;
long baseMinute = 30;
long baseSecond = 30;
/**
* reset all
*/
void resetAll();
u32 genDateNumber();
void incrementSecond();
void main() {
u32 dateNumber;
resetAll();
while (1) {
dateNumber = genDateNumber();
lightTubeByInt(dateNumber);
// 计算和渲染貌似挺花时间, 这里 incrementSecond 的频率调整一下
if(counter % 100 == 0) {
incrementSecond();
}
delay_ms(5);
counter++;
}
}
void resetAll() {
u8 i;
printLedWord(8, emptyLedCols);
BEEP = 1;
for(i=0; i<8; i++) {
ledCtl(i, 0);
}
}
u32 genDateNumber() {
u32 result = 0;
result = baseDay;
result = result * 100;
result += baseHour;
result = result * 100;
result += baseMinute;
result = result * 100;
result += baseSecond;
return result;
}
void incrementSecond() {
baseSecond ++;
if(baseSecond == 60) {
baseSecond = 0;
baseMinute++;
if(baseMinute == 60) {
baseMinute = 0;
baseHour ++;
if(baseHour == 24) {
baseHour = 0;
baseDay ++;
if(baseDay == 31) {
baseDay = 1;
}
}
}
}
}
展示效果
当前状态
下一秒
下一秒
完