15
2019
02

DS1307+MAX7219四合一点阵时钟制作

需要模块

  • DS1307带电池模块 * 1

  • MAX7219四合一模块 * 1

  • Arduino UNO * 1

  • 面包板一块,导线若干

硬件连接

  • MAX7219使用SPI接口

MAX7219ArduinoUNO
VCC5V
GNDGND
CS10
DIN11
CLK13
  • DS1307使用I2C接口(VCC使用5V供电)

DS1307ArduinoUNO
VCC5V
GNDGND
SDAA4
SCLA5

需要安装的库

  • u8g2 (MAX7219)

  • RTCLib by NeiroN (DS1307)

    (通过arduinoUNO项目->加载库->管理库...安装)

代码

/*
 * water
 * 2019-02-13
 * DS1307时钟模块(带电池)
 * MAX7219(四合一)点阵
 */
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_MAX7219_32X8_1_4W_SW_SPI u8g2(U8G2_R0, 13, 11, 10, 9);

#include <Wire.h>
#include "RTClib.h"
DS1307 rtc;

int i_0 = 0;
int i_h = 21;
int i_m = 27;
int i_s = 0;
int j = 0;
void setup(void)
{
  Serial.begin(57600);
  u8g2.begin();
  u8g2.setContrast(0); // 0~255

#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();
  if (!rtc.isrunning())
  {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
  //rtc.adjust(DateTime(__DATE__, __TIME__));
}

void loop(void)
{
  DateTime now = rtc.now();
  i_h = now.hour();
  i_m = now.minute();
  i_s = now.second();

  Serial.print(now.year(), DEC);
  Serial.print('-');
  Serial.print(now.month(), DEC);
  Serial.print('-');
  Serial.print(now.day(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  u8g2.clearBuffer();                 // clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
  String s = "";
  String c1 = ":";
  String c2 = ":";
  char c[9];
  if (i_0 % 2 == 0)
  {
    c2 = " ";
  }
  s = String(i_h < 10 ? "0" : "") + String(i_h) + c1;
  s += String(i_m < 10 ? "0" : "") + String(i_m) + c2;
  //s += String(i_s < 10 ? "0" : "") + String(i_s);
  //s.toCharArray(c, 9);
  s.toCharArray(c, 7);
  u8g2.drawStr(0, 8, c);

  int i1 = i_s / 8;
  int i2 = i_s % 8;
  u8g2.drawLine(30, i1, 30, i1);
  u8g2.drawLine(31, i2, 31, i2);

  u8g2.sendBuffer(); // transfer internal memory to the display

  delay(500);
  i_0++;
  if (i_0 % 2 == 0)
  {
    i_s++;
  }
}

最终效果

P90214-233223_2.png

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。