这个东西完全是突发奇想,有时候就只想看下今天星期几,离周末还有几天。。。
先上效果图:
硬件上用的是一个共阴的1.5寸数码管,根据官方引脚资料(下图)接上UNO。
把A至G分别接在D2至D9,1、5接在GND上。
然后再接上DS3231模块,用法及库文件见:https://blog.readgroup.cn/post/61
代码:
01 | #include <Wire.h> |
02 | #include "ds3231_2.h" |
03 |
04 | #define BUFF_MAX 128 |
05 |
06 | uint8_t time [8]; |
07 | char recv[BUFF_MAX]; |
08 | unsigned int recv_size = 0; |
09 | unsigned long prev, interval = 1000; |
10 | int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h |
11 | void setup() |
12 | { |
13 | Serial.begin(9600); |
14 | Wire.begin(); |
15 | DS3231_init(DS3231_INTCN); |
16 | memset (recv, 0, BUFF_MAX); |
17 | Serial.println( "GET time" ); |
18 | for ( int x=0; x<8; x++) |
19 | pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态 |
20 | |
21 | } |
22 | //在数码管中显示数字的函数 |
23 | void displayDigit(unsigned char digit) { |
24 | //定义一个数组表:不同数字的abcdefgh各段的取值 |
25 | unsigned char abcdefgh[][8] = { |
26 | {1,1,1,1,1,1,0,0}, //0 |
27 | {0,1,1,0,0,0,0,0}, //1 |
28 | {1,1,0,1,1,0,1,0}, //2 |
29 | {1,1,1,1,0,0,1,0}, //3 |
30 | {0,1,1,0,0,1,1,0}, //4 |
31 | {1,0,1,1,0,1,1,0}, //5 |
32 | {1,0,1,1,1,1,1,0}, //6 |
33 | {1,1,1,0,0,0,0,0}, //7 |
34 | |
35 | }; |
36 | |
37 | if ( digit >= 16 ) return ; |
38 | for (unsigned char x=0; x<8; x++) |
39 | digitalWrite( pinDigitron + x, abcdefgh[digit][x] ); |
40 | } |
41 | void loop() |
42 | { |
43 | char in; |
44 | char buff[BUFF_MAX]; |
45 | unsigned long now = millis(); |
46 | struct ts t; |
47 |
48 | // show time once in a while |
49 | if ((now - prev > interval) && (Serial.available() <= 0)) { |
50 | DS3231_get(&t); //Get time |
51 | displayDigit(t.wday); //调用displayDigit()子函数,显示数字 |
52 | prev = now; |
53 | } |
54 |
55 | |
56 | } |
发表评论: