网站首页
minecraft
资源共享
个人随笔
科技圈
杂七杂八
豆丁wiki
您的位置:首页 > 笔记 > 只能显示星期的数码管时钟
只能显示星期的数码管时钟
2018-8-5    1979    0

这个东西完全是突发奇想,有时候就只想看下今天星期几,离周末还有几天。。。

先上效果图:

微信截图_20180806000606.png

硬件上用的是一个共阴的1.5寸数码管,根据官方引脚资料(下图)接上UNO。

把A至G分别接在D2至D9,1、5接在GND上。

TB2FxelfVXXXXaiXXXXXXXXXXXX_!!2427502002.jpg

然后再接上DS3231模块,用法及库文件见:http://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;
    }

    
}



上一篇: 显示本学期第几周php
下一篇: ESP8266+1602时钟(温湿度版)
发表评论:
您的网名:
个人主页:
编辑内容: