自制简易时钟——IIC四位数码管(进阶版)

2016-01-295.3万
AI 快速预览详细 收起
本项目介绍如何使用IIC四位数码管和ALPHA MEGA328-U模块制作一个简易时钟。通过Arduino代码实现时间显示功能。首先,使用四根杜邦线将数码管与ALPHA MEGA328-U模块连接,然后编写Arduino代码实现时间显示。代码中通过分段循环分钟、小时和天数来显示时间,中间冒号闪烁表示秒数。该项目适合初学者,无需RTC模块即可完成。


现在市面上有简单的RTC实时时钟模块,但是我手上只有一块IIC的四位数码管,如何将它变成一个具有显示时间功能的时钟呢?

首先用四根公对母的杜邦线将数码管与ALPHA MEGA328-U模块连接起来,VCC对5V,GND对GND,C对SCL,D对SDA。
接着,用数据线把ALPHA MEGA328-U模块连接上电脑,并查看端口号。
然后,打开IDE,添加一个驱动库,一个描绘库,编写Arduino代码。


ARDUINO代码:

  1. #include <Wire.h>
  2. #include "Adafruit_LEDBackpack.h"
  3. #include "Adafruit_GFX.h"
  4. Adafruit_7segment matrix = Adafruit_7segment();
  5. void setup() {
  6. #ifndef __AVR_ATtiny85__
  7.   Serial.begin(9600);
  8.   Serial.println("7 Segment Backpack Test");
  9. #endif
  10.   matrix.begin(0x70);
  11. }
  12. void loop() {
  13. int16_t b=0,day_hour =16;                   //现在是16点,所以改day_hour=16;如果是别的小时,改数字即可。
  14. boolean drawDots = true;
  15. for (uint16_t m =31; m <60; m++)             //现在是31分,所以改m=31,如果是别的分,就改数字就可。
  16.    {     b=day_hour*100+m;
  17.          matrix.print(b,DEC);
  18.          matrix.writeDisplay();
  19.         for(uint16_t s=0;s<60;s++)
  20.         {
  21.           matrix.drawColon(drawDots);
  22.           matrix.writeDisplay();
  23.          if (s%2==0)
  24.         {
  25.           drawDots = false; delay(30);
  26.         }
  27.         else {
  28.          drawDots = true; delay(30);
  29.        }
  30.          delay(1000);
  31.         }
  32.    }
  33. for(day_hour =17; day_hour <24; day_hour++ )       //特别提醒,需要将day_hour的时间+1
  34. {      
  35.   for (uint16_t mf =0; mf <60; mf++)
  36.    {     b=day_hour*100+mf;
  37.          matrix.print(b,DEC);
  38.          matrix.writeDisplay();
  39.         for(uint16_t s=0;s<60;s++)
  40.         {
  41.           matrix.drawColon(drawDots);
  42.           matrix.writeDisplay();
  43.          if (s%2==0)
  44.         {
  45.           drawDots = false; delay(30);
  46.         }
  47.         else {
  48.          drawDots = true; delay(30);
  49.        }
  50.          delay(1000);
  51.         }
  52.    }
  53.   }
  54. for(uint16_t year =0; year <366; year++)                              //这里开始,则开始计时365天
  55. for(uint16_t hour =0; hour <24; hour++ )
  56. {      
  57.   for (uint16_t fen =0; fen <60; fen++)
  58.    {     b=hour*100+fen;
  59.          matrix.print(b,DEC);                                     //显示格式为数字
  60.          matrix.writeDisplay();                                  //描绘
  61.         for(uint16_t s=0;s<60;s++)                          //循环秒
  62.         {
  63.           matrix.drawColon(drawDots);                     //显示冒号
  64.           matrix.writeDisplay();
  65.          if (s%2==0)                                           //如果秒为双数
  66.         {            
  67.           drawDots = false; delay(30);                   //冒号不亮30s
  68.         }
  69.         else {
  70.          drawDots = true; delay(30);                     //否则亮30s
  71.        }
  72.          delay(1000);                                           //整体延时
  73.         }
  74.   }      
  75.   }  }
复制代码

效果展示:


总结
程序说明:由于,初始时间需要设定,但是又不能一次性循环成果,所以我分成了分钟循环到初始值0,接着小时循环到下一个小时,以凑60为准,第一个是初始分钟循环,到59分钟结束;第二个是初始时间循环,到23:59分钟结束;第三个循环是从0:0开始,一直循环365天。
更改初始 值的地方已经注释。
60秒体现在中间的冒号上,一闪一闪的。




下载附件Adafruit_GFX_Library.zip下载附件Adafruit_LED_Backpack_Library.zip


由于不是RTC模块制作,没有对准秒,肯定有些小误差,想要更更加精确,自己去调试时间。
此项目纯属灵光一闪,望各位看官,看完支持一下!


转自  自制简易时钟——IIC四位数码管(进阶版) - Powered by Discuz!


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
20060606
20060606
感谢分享,我以前用ardubiock+数码管也做了一个,同样不用时钟模块
dsweiliang
dsweiliang
很好看
qq815076543322
qq815076543322
作者
回复dsweiliang
您也可以试试看
归去来兮
归去来兮
请教一个问题,我也是用的四位数码馆,做倒计时功能,现在想加入一个按键,每按下一次倒计时的时间增加一分钟,这个功能要如何实现?
归去来兮
归去来兮回复qq815076543322
好的,我也是边做边学,大家多交流
qq815076543322
qq815076543322
作者
回复归去来兮
可以写一篇教程了 分享给小伙伴了
共12条回复,已加载2条,点击查看更多共12条回复,已加载全部
吹口琴的钢铁侠
吹口琴的钢铁侠
绿色这个颜色很赞
但是电子钟要加个调整时间的按键之类的吧....
qq815076543322
qq815076543322
作者
回复吹口琴的钢铁侠
可以试试看
吹口琴的钢铁侠
吹口琴的钢铁侠回复qq815076543322
就是在它上电工作之后,你可以通过几个按钮来修改时间啊
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
孙毅
孙毅
恩,跟定时炸弹相比,就差炸弹了。。。。
qq815076543322
qq815076543322
作者
回复孙毅
大圣 不要骄傲吗
孙毅
孙毅回复qq815076543322
好吧,你这样我会骄傲的。。哈哈哈
共5条回复,已加载2条,点击查看更多共5条回复,已加载全部
- 没有更多了 -