利用8个数码管实现一个实时时钟的显示效果。同时显示:时:分:秒。例如:08:09:30。计时时间误差不超过0.1秒。

1个回答
展开全部
摘要 以下是一个简单的用Arduino实现8个数码管实时时钟的示例代码:复制代码#include #include #define CLK 2#define DIO 3TM1637Display display(CLK, DIO);void setup() { Serial.begin(9600); setTime(0); // 设置时间为0,即从00:00:00开始计时}void loop() { static uint32_t last_time = 0; if (millis() - last_time >= 100) { // 每隔100毫秒更新一次时间 last_time = millis(); printTime(); }}void printTime() { time_t t = now(); // 获取当前时间 int hour = hour(t); int minute = minute(t); int second = second(t)
咨询记录 · 回答于2023-04-17
利用8个数码管实现一个实时时钟的显示效果。同时显示:时:分:秒。例如:08:09:30。计时时间误差不超过0.1秒。
以下是一个简单的用Arduino实现8个数码管实时时钟的示例代码:复制代码#include #include #define CLK 2#define DIO 3TM1637Display display(CLK, DIO);void setup() { Serial.begin(9600); setTime(0); // 设置时间为0,即从00:00:00开始计时}void loop() { static uint32_t last_time = 0; if (millis() - last_time >= 100) { // 每隔100毫秒更新一次时间 last_time = millis(); printTime(); }}void printTime() { time_t t = now(); // 获取当前时间 int hour = hour(t); int minute = minute(t); int second = second(t)
uint8_t data[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; data[0] = hour / 10; // 十位小时数 data[1] = hour % 10; // 个位小时数 data[2] = minute / 10; // 十位分钟数 data[3] = minute % 10; // 个位分钟数 data[4] = second / 10; // 十位秒数 data[5] = second % 10; // 个位秒数 display.setBrightness(7); // 设置亮度为最大值 display.showNumberDecEx(data[0] * 10 + data[1], 0b01000000, true); // 显示小时数 display.showNumberDecEx(data[2] * 10 + data[3], 0b00100000, true); // 显示分钟数 display.showNumberDecEx(data[4] * 10 + data[5], 0b00010000,
display.showNumberDecEx(data[4] * 10 + data[5], 0b00010000, true); // 显示秒数}
能用C语言解答吗?
OK
以下是一个用C语言实现8位数码管实时时钟的示例代码:复制代码#include #include #define CLK 0#define DIO 1int main () { wiringPiSetup(); unsigned char TubeTab[]={ // 数码管显示数字表 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf,0xff,0xff,0xff,0xff,0xff }; int fd = wiringPiI2CSetup(0x27); // 初始化I2C总线,地址为0x27 wiringPiI2CWriteReg8(fd, 0x01, 0x00); // 打开数码管显存输出 while (1) { time_t now = time(NULL); struct tm *tm = localtime(&now); int hour = tm->tm_hour; int minute
int minute = tm->tm_min; int second = tm->tm_sec; unsigned char data[8] = { 0 }; // 数字缓存数组 data[0] = hour / 10; // 十位小时 data[1] = hour % 10; // 个位小时 data[2] = minute / 10; // 十位分钟 data[3] = minute % 10; // 个位分钟 data[4] = second / 10; // 十位秒钟 data[5] = second % 10; // 个位秒钟 for (int i = 0; i < 6; i++) { data[i] = TubeTab[data[i]]; } unsigned char i2cdata[8] = { // I2C输出数据数组 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; i2
i2cdata[0] = data[1]; i2cdata[1] = data[0]; i2cdata[2] = data[3]; i2cdata[3] = data[2]; i2cdata[4] = data[5]; i2cdata[5] = data[4]; for (int i = 0; i < 8; i++) { wiringPiI2CWriteReg8(fd, i * 2, i2cdata[i]); // 写入数据到I2C总线输出寄存器 } delay(100); // 更新延迟时间为100ms } return 0;}
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消