0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino的大型实时时钟的制作

454398 来源:wv 2019-10-22 17:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:

使用p10 Matrix Display和DS3231 RTC时钟

硬件:

Arduino Uno x 1

按钮(键盘)x 4

RTC模块(DS3231)

P10点矩阵显示

软件:

Arduino IDE

DMD 2库/DMD库

在此之前,您需要一个必须在Arduino IDE上安装的支持库。要下载上面提到的DMD2库

步骤2:连接

* Arduino-》 RTC模块*

A4-》 SDA

A5-》 SCL

VCC-》 5V

GND-》 GND

* Arduino-》 P10 DMD *

D8-》 SCK

D6-》 A

D7- 》 B

D11-》 R

D13-》 CLK

D9-》 OE

第3步:代码

You can find the sample code below.

//使用Arduino的Chakra Healing Harmonizer

/*访问Channel以获得更有趣的信息项目https://www.youtube.com/channel/UCks-9JSnVb22dlqt.。.*/

byte dayOfWeek=4;

byte dayOfMonth=1;#include //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)

#include //

#include //

#include “Wendy3x5.h”

#include “Wire.h”

#define DS1307_I2C_ADDRESS 0x68int AlarmSetPin = 2;

int SnoozePin = 3;

int Alarm = 4;

int AlarmSet = 0;

int Snooze = 0;

int a,b;

// Convert normal decimal numbers to binary coded decimal

byte decToBcd(byte val)

{

return ( (val/10*16) + (val%10) );

}// Convert binary coded decimal to normal decimal numbers

byte bcdToDec(byte val)

{

return ( (val/16*10) + (val%16) );

}// 1) Sets the date and time on the ds1307

// 2) Starts the clock

// 3) Sets hour mode to 24 hour clock// Assumes you‘re passing in valid numbersvoid setDateDs1307(byte second, // 0-59

byte minute, // 0-59

byte hour, // 1-23

byte dayOfWeek, // 1-7

byte dayOfMonth, // 1-28/29/30/31

byte month, // 1-12

byte year) // 0-99

{

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0);

Wire.write(decToBcd(second)); // 0 to bit 7 starts the clock

Wire.write(decToBcd(minute));

Wire.write(decToBcd(hour));

Wire.write(decToBcd(dayOfWeek));

Wire.write(decToBcd(dayOfMonth));

Wire.write(decToBcd(month));

Wire.write(decToBcd(year));

Wire.write(00010000); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave

Wire.endTransmission();

}// Gets the date and time from the ds1307

void getDateDs1307(byte *second,

byte *minute,

byte *hour,

byte *dayOfWeek,

byte *dayOfMonth,

byte *month,

byte *year)

{

// Reset the register pointer

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0);

Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

}//Fire up the DMD library as dmd

DMD dmd(1,1);void ScanDMD()

{

dmd.scanDisplayBySPI();

}void setup()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; //initialize TimerOne’s interrupt/CPU usage used to scan and refresh the display

Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.

Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI() //clear/init the DMD pixels held in RAM

dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on)

dmd.selectFont(Wendy3x5 ); Wire.begin(); // Change these values to what you want to set your clock to.

// You probably only want to set your clock once and then remove

// the setDateDs1307 call. second = 0;

minute = 35;

hour = 11; // use 24-hour time otherwise day/date calculations will be off

dayOfWeek = 1;

dayOfMonth = 23;

month = 3;

year = 14;

//uncomment the setDateDs1307 call below to set time to intervals above. Remember if you set the time

//you need to uncomment the line below again otherwise the sketch will only stay at the time set.

//setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); pinMode(AlarmSetPin, INPUT_PULLUP);

pinMode(SnoozePin, INPUT_PULLUP);

pinMode(Alarm, OUTPUT);

digitalWrite(Alarm, LOW);

}void drawDay()

// shows day of week

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

switch(dayOfWeek)

{

case 1:

dmd.drawString( 1,0, “Sun,”, 3, GRAPHICS_NORMAL );

break; case 2:

dmd.drawString( 1,0, “Mon,”, 3, GRAPHICS_NORMAL );

break; case 3:

dmd.drawString( 1,0, “Tue,”, 3, GRAPHICS_NORMAL );

break; case 4:

dmd.drawString( 1,0, “Wed,”, 3, GRAPHICS_NORMAL );

break; case 5:

dmd.drawString( 1,0, “Thu,”, 3, GRAPHICS_NORMAL );

break; case 6:

dmd.drawString( 1,0, “Fri,”, 3, GRAPHICS_NORMAL );

break; case 7:

dmd.drawString( 1,0, “Sat,”, 3, GRAPHICS_NORMAL );

break;

}

}void drawDate()

// shows numerical date

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

switch(dayOfMonth)

{

case 1:

dmd.drawString( 20,0, “01”, 2, GRAPHICS_NORMAL );

break;

case 2:

dmd.drawString( 20,0, “02”, 2, GRAPHICS_NORMAL );

break;

case 3:

dmd.drawString( 20,0, “03”, 2, GRAPHICS_NORMAL );

break;

case 4:

dmd.drawString( 20,0, “04”, 2, GRAPHICS_NORMAL );

break;

case 5:

dmd.drawString( 20,0, “05”, 2, GRAPHICS_NORMAL );

break;

case 6:

dmd.drawString( 20,0, “06”, 2, GRAPHICS_NORMAL );

break;

case 7:

dmd.drawString( 20,0, “07”, 2, GRAPHICS_NORMAL );

break;

case 8:

dmd.drawString( 20,0, “08”, 2, GRAPHICS_NORMAL );

break;

case 9:

dmd.drawString( 20,0, “09”, 2, GRAPHICS_NORMAL );

break;

case 10:

dmd.drawString( 20,0, “10”, 2, GRAPHICS_NORMAL );

break;

case 11:

dmd.drawString( 20,0, “11”, 2, GRAPHICS_NORMAL );

break;

case 12:

dmd.drawString( 20,0, “12”, 2, GRAPHICS_NORMAL );

break;

case 13:

dmd.drawString( 20,0, “13”, 2, GRAPHICS_NORMAL );

break;

case 14:

dmd.drawString( 20,0, “14”, 2, GRAPHICS_NORMAL );

break;

case 15:

dmd.drawString( 20,0, “15”, 2, GRAPHICS_NORMAL );

break;

case 16:

dmd.drawString( 20,0, “16”, 2, GRAPHICS_NORMAL );

break;

case 17:

dmd.drawString( 20,0, “17”, 2, GRAPHICS_NORMAL );

break;

case 18:

dmd.drawString( 20,0, “18”, 2, GRAPHICS_NORMAL );

break;

case 19:

dmd.drawString( 20,0, “19”, 2, GRAPHICS_NORMAL );

break;

case 20:

dmd.drawString( 20,0, “20”, 2, GRAPHICS_NORMAL );

break;

case 21:

dmd.drawString( 20,0, “21”, 2, GRAPHICS_NORMAL );

break;

case 22:

dmd.drawString( 20,0, “22”, 2, GRAPHICS_NORMAL );

break;

case 23:

dmd.drawString( 20,0, “23”, 2, GRAPHICS_NORMAL );

break;

case 24:

dmd.drawString( 20,0, “24”, 2, GRAPHICS_NORMAL );

break;

case 25:

dmd.drawString( 20,0, “25”, 2, GRAPHICS_NORMAL );

break;

case 26:

dmd.drawString( 20,0, “26”, 2, GRAPHICS_NORMAL );

break;

case 27:

dmd.drawString( 20,0, “27”, 2, GRAPHICS_NORMAL );

break;

case 28:

dmd.drawString( 20,0, “28”, 2, GRAPHICS_NORMAL );

break;

case 29:

dmd.drawString( 20,0, “29”, 2, GRAPHICS_NORMAL );

break;

case 30:

dmd.drawString( 20,0, “30”, 2, GRAPHICS_NORMAL );

break;

case 31:

dmd.drawString( 20,0, “31”, 2, GRAPHICS_NORMAL );

break;

}

}void drawHour()

// draws the hour hand

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

if (hour》12) //Remove this if command for 24 hour time

{

hour=hour-12; // This is a 12 hour Clock

}

switch(hour)

{

case 1:

dmd.drawString( 0,0, “01”, 2, GRAPHICS_NORMAL );

break;

case 2:

dmd.drawString( 0,0, “02”, 2, GRAPHICS_NORMAL );

break;

case 3:

dmd.drawString( 0,0, “03”, 2, GRAPHICS_NORMAL );

break;

case 4:

dmd.drawString( 0,0, “04”, 2, GRAPHICS_NORMAL );

break;

case 5:

dmd.drawString( 0,0, “05”, 2, GRAPHICS_NORMAL );

break;

case 6:

dmd.drawString( 0,0, “06”, 2, GRAPHICS_NORMAL );

break;

case 7:

dmd.drawString( 0,0, “07”, 2, GRAPHICS_NORMAL );

break;

case 8:

dmd.drawString( 0,0, “08”, 2, GRAPHICS_NORMAL );

break;

case 9:

dmd.drawString( 0,0, “09”, 2, GRAPHICS_NORMAL );

break;

case 10:

dmd.drawString( 0,0, “10”, 2, GRAPHICS_NORMAL );

break;

case 11:

dmd.drawString( 0,0, “11”, 2, GRAPHICS_NORMAL );

break;

case 12:

dmd.drawString( 0,0, “12”, 2, GRAPHICS_NORMAL );

break;

case 13:

dmd.drawString( 0,0, “13”, 2, GRAPHICS_NORMAL );

break;

case 14:

dmd.drawString( 0,0, “14”, 2, GRAPHICS_NORMAL );

break;

case 15:

dmd.drawString( 0,0, “15”, 2, GRAPHICS_NORMAL );

break;

case 16:

dmd.drawString( 0,0, “16”, 2, GRAPHICS_NORMAL );

break;

case 17:

dmd.drawString( 0,0, “17”, 2, GRAPHICS_NORMAL );

break;

case 18:

dmd.drawString( 0,0, “18”, 2, GRAPHICS_NORMAL );

break;

case 19:

dmd.drawString( 0,0, “19”, 2, GRAPHICS_NORMAL );

break;

case 20:

dmd.drawString( 0,0, “20”, 2, GRAPHICS_NORMAL );

break;

case 21:

dmd.drawString( 0,0, “21”, 2, GRAPHICS_NORMAL );

break;

case 22:

dmd.drawString( 0,0, “22”, 2, GRAPHICS_NORMAL );

break;

case 23:

dmd.drawString( 0,0, “23”, 2, GRAPHICS_NORMAL );

break;

case 24:

dmd.drawString( 0,0, “24”, 2, GRAPHICS_NORMAL );

break;

}

}void drawMinute()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

switch(minute)

{

case 0:

dmd.drawString( 12,0, “00”, 2, GRAPHICS_NORMAL );

break;

case 1:

dmd.drawString( 12,0, “01”, 2, GRAPHICS_NORMAL );

break;

case 2:

dmd.drawString( 12,0, “02”, 2, GRAPHICS_NORMAL );

break;

case 3:

dmd.drawString( 12,0, “03”, 2, GRAPHICS_NORMAL );

break;

case 4:

dmd.drawString( 12,0, “04”, 2, GRAPHICS_NORMAL );

break;

case 5:

dmd.drawString( 12,0, “05”, 2, GRAPHICS_NORMAL );

break;

case 6:

dmd.drawString( 12,0, “06”, 2, GRAPHICS_NORMAL );

break;

case 7:

dmd.drawString( 12,0, “07”, 2, GRAPHICS_NORMAL );

break;

case 8:

dmd.drawString( 12,0, “08”, 2, GRAPHICS_NORMAL );

break;

case 9:

dmd.drawString( 12,0, “09”, 2, GRAPHICS_NORMAL );

break;

case 10:

dmd.drawString( 12,0, “10”, 2, GRAPHICS_NORMAL );

break;

case 11:

dmd.drawString( 12,0, “11”, 2, GRAPHICS_NORMAL );

break;

case 12:

dmd.drawString( 12,0, “12”, 2, GRAPHICS_NORMAL );

break;

case 13:

dmd.drawString( 12,0, “13”, 2, GRAPHICS_NORMAL );

break;

case 14:

dmd.drawString( 12,0, “14”, 2, GRAPHICS_NORMAL );

break;

case 15:

dmd.drawString( 12,0, “15”, 2, GRAPHICS_NORMAL );

break;

case 16:

dmd.drawString( 12,0, “16”, 2, GRAPHICS_NORMAL );

break;

case 17:

dmd.drawString( 12,0, “17”, 2, GRAPHICS_NORMAL );

break;

case 18:

dmd.drawString( 12,0, “18”, 2, GRAPHICS_NORMAL );

break;

case 19:

dmd.drawString( 12,0, “19”, 2, GRAPHICS_NORMAL );

break;

case 20:

dmd.drawString( 12,0, “20”, 2, GRAPHICS_NORMAL );

break;

case 21:

dmd.drawString( 12,0, “21”, 2, GRAPHICS_NORMAL );

break;

case 22:

dmd.drawString( 12,0, “22”, 2, GRAPHICS_NORMAL );

break;

case 23:

dmd.drawString( 12,0, “23”, 2, GRAPHICS_NORMAL );

break;

case 24:

dmd.drawString( 12,0, “24”, 2, GRAPHICS_NORMAL );

break;

case 25:

dmd.drawString( 12,0, “25”, 2, GRAPHICS_NORMAL );

break;

case 26:

dmd.drawString( 12,0, “26”, 2, GRAPHICS_NORMAL );

break;

case 27:

dmd.drawString( 12,0, “27”, 2, GRAPHICS_NORMAL );

break;

case 28:

dmd.drawString( 12,0, “28”, 2, GRAPHICS_NORMAL );

break;

case 29:

dmd.drawString( 12,0, “29”, 2, GRAPHICS_NORMAL );

break;

case 30:

dmd.drawString( 12,0, “30”, 2, GRAPHICS_NORMAL );

break;

case 31:

dmd.drawString( 12,0, “31”, 2, GRAPHICS_NORMAL );

break;

case 32:

dmd.drawString( 12,0, “32”, 2, GRAPHICS_NORMAL );

break;

case 33:

dmd.drawString( 12,0, “33”, 2, GRAPHICS_NORMAL );

break;

case 34:

dmd.drawString( 12,0, “34”, 2, GRAPHICS_NORMAL );

break;

case 35:

dmd.drawString( 12,0, “35”, 2, GRAPHICS_NORMAL );

break;

case 36:

dmd.drawString( 12,0, “36”, 2, GRAPHICS_NORMAL );

break;

case 37:

dmd.drawString( 12,0, “37”, 2, GRAPHICS_NORMAL );

break;

case 38:

dmd.drawString( 12,0, “38”, 2, GRAPHICS_NORMAL );

break;

case 39:

dmd.drawString( 12,0, “39”, 2, GRAPHICS_NORMAL );

break;

case 40:

dmd.drawString( 12,0, “40”, 2, GRAPHICS_NORMAL );

break;

case 41:

dmd.drawString( 12,0, “41”, 2, GRAPHICS_NORMAL );

break;

case 42:

dmd.drawString( 12,0, “42”, 2, GRAPHICS_NORMAL );

break;

case 43:

dmd.drawString( 12,0, “43”, 2, GRAPHICS_NORMAL );

break;

case 44:

dmd.drawString( 12,0, “44”, 2, GRAPHICS_NORMAL );

break;

case 45:

dmd.drawString( 12,0, “45”, 2, GRAPHICS_NORMAL );

break;

case 46:

dmd.drawString( 12,0, “46”, 2, GRAPHICS_NORMAL );

break;

case 47:

dmd.drawString( 12,0, “47”, 2, GRAPHICS_NORMAL );

break;

case 48:

dmd.drawString( 12,0, “48”, 2, GRAPHICS_NORMAL );

break;

case 49:

dmd.drawString( 12,0, “49”, 2, GRAPHICS_NORMAL );

break;

case 50:

dmd.drawString( 12,0, “50”, 2, GRAPHICS_NORMAL );

break;

case 51:

dmd.drawString( 12,0, “51”, 2, GRAPHICS_NORMAL );

break;

case 52:

dmd.drawString( 12,0, “52”, 2, GRAPHICS_NORMAL );

break;

case 53:

dmd.drawString( 12,0, “53”, 2, GRAPHICS_NORMAL );

break;

case 54:

dmd.drawString( 12,0, “54”, 2, GRAPHICS_NORMAL );

break;

case 55:

dmd.drawString( 12,0, “55”, 2, GRAPHICS_NORMAL );

break;

case 56:

dmd.drawString( 12,0, “56”, 2, GRAPHICS_NORMAL );

break;

case 57:

dmd.drawString( 12,0, “57”, 2, GRAPHICS_NORMAL );

break;

case 58:

dmd.drawString( 12,0, “58”, 2, GRAPHICS_NORMAL );

break;

case 59:

dmd.drawString( 12,0, “59”, 2, GRAPHICS_NORMAL );

break;

}

}void drawSec()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

switch(second)

{

case 0:

dmd.drawString( 24,0, “00”, 2, GRAPHICS_NORMAL );

break;

case 1:

dmd.drawString( 24,0, “01”, 2, GRAPHICS_NORMAL );

break;

case 2:

dmd.drawString( 24,0, “02”, 2, GRAPHICS_NORMAL );

break;

case 3:

dmd.drawString( 24,0, “03”, 2, GRAPHICS_NORMAL );

break;

case 4:

dmd.drawString( 24,0, “04”, 2, GRAPHICS_NORMAL );

break;

case 5:

dmd.drawString( 24,0, “05”, 2, GRAPHICS_NORMAL );

break;

case 6:

dmd.drawString( 24,0, “06”, 2, GRAPHICS_NORMAL );

break;

case 7:

dmd.drawString( 24,0, “07”, 2, GRAPHICS_NORMAL );

break;

case 8:

dmd.drawString( 24,0, “08”, 2, GRAPHICS_NORMAL );

break;

case 9:

dmd.drawString( 24,0, “09”, 2, GRAPHICS_NORMAL );

break;

case 10:

dmd.drawString( 24,0, “10”, 2, GRAPHICS_NORMAL );

break;

case 11:

dmd.drawString( 24,0, “11”, 2, GRAPHICS_NORMAL );

break;

case 12:

dmd.drawString( 24,0, “12”, 2, GRAPHICS_NORMAL );

break;

case 13:

dmd.drawString( 24,0, “13”, 2, GRAPHICS_NORMAL );

break;

case 14:

dmd.drawString( 24,0, “14”, 2, GRAPHICS_NORMAL );

break;

case 15:

dmd.drawString( 24,0, “15”, 2, GRAPHICS_NORMAL );

break;

case 16:

dmd.drawString( 24,0, “16”, 2, GRAPHICS_NORMAL );

break;

case 17:

dmd.drawString( 24,0, “17”, 2, GRAPHICS_NORMAL );

break;

case 18:

dmd.drawString( 24,0, “18”, 2, GRAPHICS_NORMAL );

break;

case 19:

dmd.drawString( 24,0, “19”, 2, GRAPHICS_NORMAL );

break;

case 20:

dmd.drawString( 24,0, “20”, 2, GRAPHICS_NORMAL );

break;

case 21:

dmd.drawString( 24,0, “21”, 2, GRAPHICS_NORMAL );

break;

case 22:

dmd.drawString( 24,0, “22”, 2, GRAPHICS_NORMAL );

break;

case 23:

dmd.drawString( 24,0, “23”, 2, GRAPHICS_NORMAL );

break;

case 24:

dmd.drawString( 24,0, “24”, 2, GRAPHICS_NORMAL );

break;

case 25:

dmd.drawString( 24,0, “25”, 2, GRAPHICS_NORMAL );

break;

case 26:

dmd.drawString( 24,0, “26”, 2, GRAPHICS_NORMAL );

break;

case 27:

dmd.drawString( 24,0, “27”, 2, GRAPHICS_NORMAL );

break;

case 28:

dmd.drawString( 24,0, “28”, 2, GRAPHICS_NORMAL );

break;

case 29:

dmd.drawString( 24,0, “29”, 2, GRAPHICS_NORMAL );

break;

case 30:

dmd.drawString( 24,0, “30”, 2, GRAPHICS_NORMAL );

break;

case 31:

dmd.drawString( 24,0, “31”, 2, GRAPHICS_NORMAL );

break;

case 32:

dmd.drawString( 24,0, “32”, 2, GRAPHICS_NORMAL );

break;

case 33:

dmd.drawString( 24,0, “33”, 2, GRAPHICS_NORMAL );

break;

case 34:

dmd.drawString( 24,0, “34”, 2, GRAPHICS_NORMAL );

break;

case 35:

dmd.drawString( 24,0, “35”, 2, GRAPHICS_NORMAL );

break;

case 36:

dmd.drawString( 24,0, “36”, 2, GRAPHICS_NORMAL );

break;

case 37:

dmd.drawString( 24,0, “37”, 2, GRAPHICS_NORMAL );

break;

case 38:

dmd.drawString( 24,0, “38”, 2, GRAPHICS_NORMAL );

break;

case 39:

dmd.drawString( 24,0, “39”, 2, GRAPHICS_NORMAL );

break;

case 40:

dmd.drawString( 24,0, “40”, 2, GRAPHICS_NORMAL );

break;

case 41:

dmd.drawString( 24,0, “41”, 2, GRAPHICS_NORMAL );

break;

case 42:

dmd.drawString( 24,0, “42”, 2, GRAPHICS_NORMAL );

break;

case 43:

dmd.drawString( 24,0, “43”, 2, GRAPHICS_NORMAL );

break;

case 44:

dmd.drawString( 24,0, “44”, 2, GRAPHICS_NORMAL );

break;

case 45:

dmd.drawString( 24,0, “45”, 2, GRAPHICS_NORMAL );

break;

case 46:

dmd.drawString( 24,0, “46”, 2, GRAPHICS_NORMAL );

break;

case 47:

dmd.drawString( 24,0, “47”, 2, GRAPHICS_NORMAL );

break;

case 48:

dmd.drawString( 24,0, “48”, 2, GRAPHICS_NORMAL );

break;

case 49:

dmd.drawString( 24,0, “49”, 2, GRAPHICS_NORMAL );

break;

case 50:

dmd.drawString( 24,0, “50”, 2, GRAPHICS_NORMAL );

break;

case 51:

dmd.drawString( 24,0, “51”, 2, GRAPHICS_NORMAL );

break;

case 52:

dmd.drawString( 24,0, “52”, 2, GRAPHICS_NORMAL );

break;

case 53:

dmd.drawString( 24,0, “53”, 2, GRAPHICS_NORMAL );

break;

case 54:

dmd.drawString( 24,0, “54”, 2, GRAPHICS_NORMAL );

break;

case 55:

dmd.drawString( 24,0, “55”, 2, GRAPHICS_NORMAL );

break;

case 56:

dmd.drawString( 24,0, “56”, 2, GRAPHICS_NORMAL );

break;

case 57:

dmd.drawString( 24,0, “57”, 2, GRAPHICS_NORMAL );

break;

case 58:

dmd.drawString( 24,0, “58”, 2, GRAPHICS_NORMAL );

break;

case 59:

dmd.drawString( 24,0, “59”, 2, GRAPHICS_NORMAL );

break;

}

}void drawCol1()

{

dmd.drawString( 8,0, “:”, 1, GRAPHICS_NORMAL );

}void drawCol2()

{

dmd.drawString( 20,0, “:”, 1, GRAPHICS_NORMAL );

}void runClock()

{

// drawDay();

// drawDate();

drawHour();

drawCol1();

drawMinute();

drawCol2();

drawSec();

// CheckAlarm();}/*void AlarmSequence() {

drawDay();

drawDate();

drawHour();

drawCol();

drawMinute();

digitalWrite(Alarm, HIGH);

delay(1000);

dmd.clearScreen( true );

digitalWrite(Alarm, LOW);

delay(1000);

}

*/

/*void CheckAlarm() {

AlarmSet = digitalRead(AlarmSetPin);

Snooze = digitalRead(SnoozePin);

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);*/

/* Only Trigger Alarm If it is a day listed below. This can be changed by changing the numbers to any of the following:

1 = Sunday

2 = Monday

3 = Tuesday

4 = Wednesday

5 = Thursday

6 = Friday

7 = Saturday

*/

/* if(dayOfWeek == 2 || dayOfWeek == 3 || dayOfWeek == 4 || dayOfWeek == 5 ||dayOfWeek == 6) { //This is days ALLOWED to ring alarm

if(hour == 18 && minute == 05 ) { //Set Time Here (In 24 hour Time)

if(AlarmSet == LOW) { //If alarm pin is on

Snooze = digitalRead(SnoozePin);

while(Snooze == HIGH)

{

Snooze = digitalRead(SnoozePin);

AlarmSequence();

}

}

}

}

}

*/

void loop()

{

runClock();

}

第4步:功能

DMD

32 x 16个高亮度红色LED(总共512个LED),间距为10mm

支持5V操作

可以在12米远的地方看到

坚固的塑料框架

板载控制器IC

Arduino兼容库,图形功能

RTC

计算秒,分钟,小时和年份

Accura cy:0ºC至+40ºC时为+ 2ppm至-2ppm,-40ºC至+85ºC时为+ 3.5ppm至-3.5ppm

数字温度传感器,精度为±3ºC

两次日警报

编程方波输出

寄存器老化调整400Khz I2C接口

低功耗

自动断电电池开关电路

CR2032备用电池,使用寿命为两到三年

步骤5:该项目的工作:简单时钟

第6步:该项目的工作:按设置进行计时

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟
    +关注

    关注

    11

    文章

    1953

    浏览量

    134543
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195966
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    芯伯乐PCF8563:0.25µA低功耗实时时钟解决方案

    在各类需要精准计时、日历功能的嵌入式系统中,实时时钟芯片(RTC)是不可或缺的核心元件。芯伯乐PCF8563作为一款基于IIC接口的超低功耗实时时钟/日历芯片,以其高精度、小封装、强抗干扰能力
    的头像 发表于 11-28 18:34 118次阅读
    芯伯乐PCF8563:0.25µA低功耗<b class='flag-5'>实时时钟</b>解决方案

    ‌bq3285实时时钟(RTC)芯片技术文档总结

    bq3285 在断电期间对时钟、日历和存储寄存器进行写保护。然后,备用电池维护数据并作时钟和日历。 bq3285 是一款完全兼容的实时时钟,适用于 IBM AT 兼容计算机和其他应用。唯一的外部组件是一个 32.768kH
    的头像 发表于 09-23 10:49 557次阅读
    ‌bq3285<b class='flag-5'>实时时钟</b>(RTC)芯片技术文档总结

    实时时钟芯片与晶振的不同之处

    实时时钟芯片和晶振在电子设备中都扮演着提供时钟信号的重要角色,但它们的本质、功能和复杂程度却大相径庭。简单来说,晶振是产生稳定频率的“心脏”,而实时时钟芯片则是管理和分配这些“心跳”的“大脑”。
    的头像 发表于 07-24 17:04 1326次阅读
    <b class='flag-5'>实时时钟</b>芯片与晶振的不同之处

    爱普生RA8804CE实时时钟模块在安防监控中的应用

    在安防监控领域,时间精度如同基石,支撑着整个系统的高效运行与可靠管理。精准的时间记录对于视频监控、事件追溯、设备协同等环节至关重要。爱普生RA8804CE实时时钟模块,以其卓越的性能优势,成为安防
    的头像 发表于 07-02 17:46 592次阅读
    爱普生RA8804CE<b class='flag-5'>实时时钟</b>模块在安防监控中的应用

    爱普生RX8111CE实时时钟模块在汽车防盗系统中的应用

    在汽车智能化与电子化的发展浪潮中,汽车防盗系统是现代汽车安全的重要组成部分,其核心功能是通过监测车辆状态并及时发出警报来防止车辆被盗或被非法操作。爱普生RX8111CE实时时钟模块凭借其高精度
    的头像 发表于 06-13 17:35 524次阅读
    爱普生RX8111CE<b class='flag-5'>实时时钟</b>模块在汽车防盗系统中的应用

    内置晶振、小封装的实时时钟IC-SD

    鸿合智远|兴威帆电子:内置晶振、小封装的实时时钟IC-SD
    的头像 发表于 05-28 10:01 592次阅读
    内置晶振、小封装的<b class='flag-5'>实时时钟</b>IC-SD

    爱普生RX8130CE实时时钟成为智能家居系统的理想解决方案

    智能家居的本质是让生活更便捷、舒适与智能,而精准的时间管理是实现这一目标的重要基础。爱普生RX8130CE实时时钟(RTC)以其卓越的性能和丰富的功能,成为智能家居系统的理想时间解决方案,为用户打造
    的头像 发表于 04-21 17:57 568次阅读
    爱普生RX8130CE<b class='flag-5'>实时时钟</b>成为智能家居系统的理想解决方案

    爱普生RA4000CE实时时钟模块车载BMS系统的理想选择

    在新能源汽车蓬勃发展的当下,电池管理系统(BMS)作为保障电池安全、延长电池寿命以及提升车辆性能的核心技术,其重要性不言而喻。而一个精准、可靠的实时时钟模块,对于BMS系统的高效运行起着关键作用
    的头像 发表于 04-03 15:18 560次阅读
    爱普生RA4000CE<b class='flag-5'>实时时钟</b>模块车载BMS系统的理想选择

    实时时钟模块选择指南和比较表

    爱普生提供内置 32.768 kHz 晶体单元的多种实时时钟模块。除了单纯的计时功能外,还有即使在高温环境下也能保持准确计时的产品,以及配备其他各种功能的产品。您可以使用下面的流程图和产品比较表来
    发表于 03-14 10:28 0次下载

    RA4000CE爱普生RTC实时时钟模块:车载BMS系统的理想选择

    爱普生RTC模块集成32.768kHz石英晶体振荡器与实时时钟芯片,为BMS提供精确的时间和日期信息,助力系统执行时间相关操作。该模块采用QMEMS技术和半导体技术,具备高精度和低电流损耗特性,配备
    的头像 发表于 03-12 17:16 1045次阅读

    爱普生实时时钟与晶振技术赋能NIC网络接口卡

    在网络技术飞速发展的当下,NIC网络接口卡(网卡)作为设备与网络连接的关键桥梁,其时间同步精度直接决定了网络性能的稳定性和效率。爱普生(EPSON)凭借其领先的实时时钟(RTC)与晶振技术,为NIC
    的头像 发表于 03-12 13:38 697次阅读
    爱普生<b class='flag-5'>实时时钟</b>与晶振技术赋能NIC网络接口卡

    Abracon推出内置XO实时时钟

    Abracon近期推出内置XO实时时钟(RTC)是现代电子系统中的核心组件,专为追求极低功耗与高精度时间记录的应用而设计。 与传统基于外部晶体的RTC不同,Abracon的内置XO RTC创新性地将
    的头像 发表于 02-06 11:20 1272次阅读

    基于FPGA的实时时钟设计

    本次设计采用了美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路 DS1302,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线
    的头像 发表于 01-06 16:06 1778次阅读
    基于FPGA的<b class='flag-5'>实时时钟</b>设计

    LinkedSemi凌思微:DD3225TR实时时钟模块

    深圳鸿合智远|LinkedSemi凌思微:DD3225TR实时时钟模块
    的头像 发表于 12-17 10:57 810次阅读
    LinkedSemi凌思微:DD3225TR<b class='flag-5'>实时时钟</b>模块

    LinkedSemi凌思微:DD3225TS实时时钟模块

    深圳鸿合智远|LinkedSemi凌思微:DD3225TS实时时钟模块
    的头像 发表于 12-16 11:20 876次阅读
    LinkedSemi凌思微:DD3225TS<b class='flag-5'>实时时钟</b>模块