|
|
本帖最后由 Soul110 于 2016-1-27 16:49 编辑
现在市面上有简单的RTC实时时钟模块,但是我手上只有一块IIC的四位数码管,如何将它变成一个具有显示时间功能的时钟呢?
事先说明,我手上的数码管与其对应的ALPHA的MEGA328-U均来自OCROBOT系列,它的板子都做的非常简单,使用方便,适合新手入门。
首先用四根公对母的杜邦线将数码管与ALPHA MEGA328-U模块连接起来,VCC对5V,GND对GND,C对SCL,D对SDA。
接着,用数据线把ALPHA MEGA328-U模块连接上电脑,并查看端口号。
然后,打开IDE,添加一个驱动库,一个描绘库,编写arduino代码。
ARDUINO代码:
- #include <Wire.h>
- #include "Adafruit_LEDBackpack.h"
- #include "Adafruit_GFX.h"
- Adafruit_7segment matrix = Adafruit_7segment();
- void setup() {
- #ifndef __AVR_ATtiny85__
- Serial.begin(9600);
- Serial.println("7 Segment Backpack Test");
- #endif
- matrix.begin(0x70);
- }
- void loop() {
- int16_t b=0,day_hour =16; //现在是16点,所以改day_hour=16;如果是别的小时,改数字即可。
- boolean drawDots = true;
- for (uint16_t m =31; m <60; m++) //现在是31分,所以改m=31,如果是别的分,就改数字就可。
- { b=day_hour*100+m;
- matrix.print(b,DEC);
- matrix.writeDisplay();
- for(uint16_t s=0;s<60;s++)
- {
- matrix.drawColon(drawDots);
- matrix.writeDisplay();
- if (s%2==0)
- {
- drawDots = false; delay(30);
- }
- else {
- drawDots = true; delay(30);
- }
- delay(1000);
- }
- }
- for(day_hour =17; day_hour <24; day_hour++ ) //特别提醒,需要将day_hour的时间+1
- {
- for (uint16_t mf =0; mf <60; mf++)
- { b=day_hour*100+mf;
- matrix.print(b,DEC);
- matrix.writeDisplay();
- for(uint16_t s=0;s<60;s++)
- {
- matrix.drawColon(drawDots);
- matrix.writeDisplay();
- if (s%2==0)
- {
- drawDots = false; delay(30);
- }
- else {
- drawDots = true; delay(30);
- }
- delay(1000);
- }
-
-
- }
- }
- for(uint16_t year =0; year <366; year++) //这里开始,则开始计时365天
- for(uint16_t hour =0; hour <24; hour++ )
- {
- for (uint16_t fen =0; fen <60; fen++)
- { b=hour*100+fen;
- matrix.print(b,DEC); //显示格式为数字
- matrix.writeDisplay(); //描绘
- for(uint16_t s=0;s<60;s++) //循环秒
- {
- matrix.drawColon(drawDots); //显示冒号
- matrix.writeDisplay();
- if (s%2==0) //如果秒为双数
- {
- drawDots = false; delay(30); //冒号不亮30s
- }
- else {
- drawDots = true; delay(30); //否则亮30s
- }
- delay(1000); //整体延时
- }
-
-
- }
- } }
复制代码
效果展示:
总结
程序说明:由于,初始时间需要设定,但是又不能一次性循环成果,所以我分成了分钟循环到初始值0,接着小时循环到下一个小时,以凑60为准,第一个是初始分钟循环,到59分钟结束;第二个是初始时间循环,到23:59分钟结束;第三个循环是从0:0开始,一直循环365天。
更改初始 值的地方已经注释。
60秒体现在中间的冒号上,一闪一闪的。
由于不是RTC模块制作,没有对准秒,肯定有些小误差,想要更更加精确,自己去调试时间。
此项目纯属灵光一闪,望各位看官,看完支持一下!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|