这个东西完全是突发奇想,有时候就只想看下今天星期几,离周末还有几天。。。
先上效果图:
硬件上用的是一个共阴的1.5寸数码管,根据官方引脚资料(下图)接上UNO。
把A至G分别接在D2至D9,1、5接在GND上。
然后再接上DS3231模块,用法及库文件见:https://blog.readgroup.cn/post/61
代码:
#include <Wire.h> #include "ds3231_2.h" #define BUFF_MAX 128 uint8_t time[8]; char recv[BUFF_MAX]; unsigned int recv_size = 0; unsigned long prev, interval = 1000; int pinDigitron = 2; //管脚D2连接到数码管的A脚,D3连B... D9连h void setup() { Serial.begin(9600); Wire.begin(); DS3231_init(DS3231_INTCN); memset(recv, 0, BUFF_MAX); Serial.println("GET time"); for(int x=0; x<8; x++) pinMode(pinDigitron+x, OUTPUT); //设置各脚为输出状态 } //在数码管中显示数字的函数 void displayDigit(unsigned char digit) { //定义一个数组表:不同数字的abcdefgh各段的取值 unsigned char abcdefgh[][8] = { {1,1,1,1,1,1,0,0}, //0 {0,1,1,0,0,0,0,0}, //1 {1,1,0,1,1,0,1,0}, //2 {1,1,1,1,0,0,1,0}, //3 {0,1,1,0,0,1,1,0}, //4 {1,0,1,1,0,1,1,0}, //5 {1,0,1,1,1,1,1,0}, //6 {1,1,1,0,0,0,0,0}, //7 }; if ( digit >= 16 ) return; for (unsigned char x=0; x<8; x++) digitalWrite( pinDigitron + x, abcdefgh[digit][x] ); } void loop() { char in; char buff[BUFF_MAX]; unsigned long now = millis(); struct ts t; // show time once in a while if ((now - prev > interval) && (Serial.available() <= 0)) { DS3231_get(&t); //Get time displayDigit(t.wday); //调用displayDigit()子函数,显示数字 prev = now; } }
发表评论: