亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino RTC LED 时钟

组件和用品

Arduino UNO
× 1
实时时钟 (RTC)
× 1
电阻 1k ohm
× 15
通孔电阻,120 ohm
× 15
线性调节器 (7805)
× 1
电容 22 pF
× 1
16 MHz 晶振
× 1
电容 10 µF
× 1
纽扣电池 CR2032
× 1
电池座,锂 CR2032
× 1
5 毫米 LED:绿色
× 190
双极 - 射频晶体管,NPN
× 10
通用晶体管 PNP
× 12
触觉开关,顶部驱动
× 4
Digilent 60W PCIe 12V 5A 电源
× 1

必要的工具和机器

烙铁(通用)
焊锡丝,无铅
Digilent Mastech MS8217 自动量程数字万用表

关于这个项目

首先您必须下载以下库(链接在本页末尾) 1. Wire.h

2. RTClib.h零件清单

观看视频

这是RTC时钟模块

这是 Arduino 电路

RTC 接线连接

RTC 开关

确定阳极和阴极

电路图(COMMON ANODE)

如果您使用普通阴极 LED,请按以下方式进行更改

电源

代码

  • LED 时钟代码
LED 时钟代码Arduino
下载此代码并上传到项目
/* 4 digit 7 segment display:http://www.sparkfun.com/products/9483 Datasheet:http://www.sparkfun.com/datasheets/Components/LED/ 7-Segment/YSD-439AR6B-35.pdf */// niq_ro 修改的连接来自 http://nicuflorica.blogspot.com// 数据集:http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW -563XSA.pdf// BMIAK Basnayaka修改的代码// http://www.setnfix.comint digit1 =11; int digit2 =10; int digit3 =9; int digit4 =6; int digit5 =5; int digit6 =3; //如果需要,从Arduino到ATmega DIP28的引脚映射//http://www.arduino.cc/en/Hacking/PinMappingint segA =0; //显示引脚11int segB =1; //显示引脚7int segC =2; //显示引脚4int segD =4; //显示引脚2int segE =7; //显示引脚1int segF =8; //显示引脚10int segG =12; //显示引脚5int segDP =13; // 显示引脚 3#include #include "RTClib.h"RTC_DS1307 RTC;// 使用通过 I2C 和 Wire lib 连接的 DS1307 RTC 的日期和时间函数// 来自 http://learn.adafruit 的原始 sketck .com/ds1307-real-time-clock-breakout-board-kit/// 从 http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the- 添加 SQW=1Hz 的部分i2c-bus//添加手动调整部分 http://www.bristolwatch.com/arduino/arduino_ds1307.htmbyte SW0 =A0;byte SW1 =A2;byte SW2 =A1;byte SWT =A3;int Adhr=0; int Admnt=0;int D =0;int Z =0;// 用于十六进制转换long zh, uh, ore;long zm, um, miniti;void setup() { //Serial.begin(57600); Wire.begin(); RTC.begin(); // RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));//如果你需要设置时钟...只需从上面的行中删除////用于闪烁LEDWire.beginTransmission(0x68)的部分代码;Wire.write(0x07); // 将指针移动到 SQW 地址 // Wire.write(0x00); // 关闭 SQW 引脚 Wire.write(0x10); // 发送 0x10(十六进制)00010000(二进制)到控制寄存器 - 打开 1Hz 的方波 // Wire.write(0x13); // 发送 0x13(十六进制)00010011(二进制)32kHzWire.endTransmission(); pinMode(segA,输出); pinMode(segB,输出); pinMode(segC,输出); pinMode(segD,输出); pinMode(segE,输出); pinMode(segF,输出); pinMode(segG,输出); pinMode(segDP,输出); pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); pinMode(digit5, OUTPUT); pinMode(digit6, OUTPUT);//Serial.begin(9600);pinMode(SW0, INPUT); // 不。按钮开关pinMode(SW1, INPUT); // 不。按钮开关pinMode(SW2, INPUT); // 不。按钮 switchpinMode(SWT, INPUT); // 不。按钮开关数字写入(SW0,高); // 上拉 ondigitalWrite(SW1, HIGH);digitalWrite(SW2, HIGH);digitalWrite(segDP, LOW);}void loop() { DateTime now =RTC.now(); long HR =now.hour()*1000; long timp =(HR*10)+now.minute()*100+now.second(); Adhr =now.hour(); Admnt=now.minute();int DIM =0;if (timp>
=250000)timp=timp-240000;//---------------------- --------------------------------//12/24 小时拉屎 //--------- ---------------------------------------------if (timp <130000 ){digitalWrite(segDP, LOW);}if (digitalRead(SWT)==0){delay(300); if (D ==0) { D =1;delay(200);} else{D =0;}}if (D ==0){ if (timp>
=130000){timp=timp-120000;digitalWrite( segDP, HIGH);}}if (timp>
=130000){ digitalWrite(segDP, LOW);}if ((D==1)&(timp <130000))digitalWrite(segDP, LOW);//--- -------------------------------------------------- - //int timp =(now.minute(), DEC);// displayNumber(12); // 这是要显示的数字 (int i =100; i>0; i--) { if (timp>
=100000) displayNumber01(timp);否则 displayNumber02(timp); } for(int i =100; i>0; i--) { if (timp>
=100000) displayNumber03(timp);否则 displayNumber04(timp); } for(int i =100; i>0; i--) { if (timp>
=100000) displayNumber05(timp);否则 displayNumber06(timp); } if (digitalRead(SW0)==0){delay(100);Z=1;设置时间(); }//按住开关设置时间}void set_time() { byte minutes1 =0;字节小时1 =0;字节分钟 =0;字节小时 =0;小时 =Adhr;分钟=Admnt;如果 ((小时 &0x0f)> 9) 小时 =小时 + 6;如果(小时> 0x24)小时 =1; // 午夜 12.00 将显示为 12:00(PM LED 亮起)或 24:00 //if (hours> 0x24) hours =1; // 午夜 12.00 将显示为 0:00 if ((minutes &0x0f)> 9) minutes =minutes + 6;如果(分钟> 0x59)分钟 =0; while (!(Z==0)){ // 设置时间开关必须松开才能退出 int TST =digitalRead(SW2); while (TST==0) // 设置小时 { hours++; // 将六进制转换为 zecimal:zh =hours / 16;呃 =小时 - 16 * zh;矿石 =10 * zh + 呃; zm =分钟 / 16; um =分钟 - 16 * zm ; miniti =10 * zm + um;如果 ((小时 &0x0f)> 9) 小时 =小时 + 6;如果(小时> 0x24)小时 =1; // 午夜 12.00 将显示为 12:00(PM LED 亮起)或 24:00 //if (hours> 0x24) hours =1; // 午夜 12.00 将显示为 0:00 if (hours <=9) delay(1); for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); TST =数字读取(SW2); } while (!(digitalRead(SW1))) // 设置分钟 { minutes++; // 将六进制转换为 zecimal:zh =hours / 16;呃 =小时 - 16 * zh;矿石 =10 * zh + 呃; zm =分钟 / 16; um =分钟 - 16 * zm ; miniti =10 * zm + um; for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); } if ((minutes &0x0f)> 9) 分钟 =分钟 + 6;如果(分钟> 0x59)分钟 =0;如果(分钟>=9)延迟(1); Wire.beginTransmission(0x68); // 激活 DS1307 Wire.write(0); // 从哪里开始 Wire.write(0x00); //秒 Wire.write(minutes); //分钟 Wire.write(0x80 | 小时); //小时(24 小时) Wire.write(0x06); // 01-07 天 Wire.write(0x01); // 日期 0-31 Wire.write(0x05); // 0-12 月 Wire.write(0x09); // 00-99 年 Wire.write(0x10); // Control 0x10 在引脚 7 上产生 1 HZ 方波。 Wire.endTransmission(); // 将六进制转换为 zecimal:zh =hours / 16;呃 =小时 - 16 * zh;矿石 =10 * zh + 呃; zm =分钟 / 16; um =分钟 - 16 * zm ; miniti =10 * zm + um; for(int i =400; i>0; i--) { displayNumber01(ore*10000+miniti*100); }延迟(100); //Serial.print(digitalRead(SW0));if (digitalRead(SW0)==0) Z =0;延迟(300); }//Serial.print(SW2);}void displayNumber01(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //开启一个短时间开关的数字(数字){ case 1:digitalWrite(digit1, DIGIT_ON);休息;情况 2:digitalWrite(digit2, DIGIT_ON); //数字写入(segDP,低);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber02(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //打开一个数字短时间 switch(digit) { case 1:lightNumber(10);休息;情况 2:digitalWrite(digit2, DIGIT_ON); //数字写入(segDP,低);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber03(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //打开一个数字短时间 switch(digit) { case 1:digitalWrite(digit1, DIGIT_ON);休息;情况 2:digitalWrite(digit2, DIGIT_ON);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber04(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //打开一个数字短时间 switch(digit) { case 1:lightNumber(10);休息;情况 2:digitalWrite(digit2, DIGIT_ON);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber05(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //打开一个数字短时间 switch(digit) { case 1:digitalWrite(digit1, DIGIT_ON);休息;情况 2:digitalWrite(digit2, DIGIT_ON);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber06(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) { //打开一个数字短时间内 switch(digit) { case 1://digitalWrite(digit1, DIGIT_ON);休息;情况 2:digitalWrite(digit2, DIGIT_ON);休息;情况 3:digitalWrite(digit3, DIGIT_ON);休息;情况 4:digitalWrite(digit4, DIGIT_ON);休息;案例 5:digitalWrite(digit5, DIGIT_ON);休息;情况 6:digitalWrite(digit6, DIGIT_ON);休息; } lightNumber(toDisplay % 10);显示 /=10;延迟微秒(DISPLAY_BRIGHTNESS); //关闭所有段 lightNumber(10); //关闭所有数字digitalWrite(digit1, DIGIT_OFF);数字写入(digit2,DIGIT_OFF);数字写入(digit3,DIGIT_OFF);数字写入(digit4,DIGIT_OFF);数字写入(digit5,DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} //给定一个数字,打开那些段//如果number ==10,则关闭numbervoid lightNumber(int numberToDisplay) {//Common Anode ********* ****************#define SEGMENT_ON HIGH#define SEGMENT_OFF LOW/* 共阴极 ***************** #define SEGMENT_ON LOW #定义 SEGMENT_OFF HIGH*/ switch (numberToDisplay){ case 0:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_ON);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_OFF);休息;情况 1:digitalWrite(segA, SEGMENT_OFF);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_OFF);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_OFF);数字写入(segG,SEGMENT_OFF);休息;情况 2:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_OFF);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_ON);数字写入(segF,SEGMENT_OFF);数字写入(segG,SEGMENT_ON);休息;情况 3:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_OFF);数字写入(segG,SEGMENT_ON);休息;情况 4:digitalWrite(segA, SEGMENT_OFF);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_OFF);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_ON);休息;情况 5:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_OFF);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_ON);休息;情况 6:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_OFF);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_ON);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_ON);休息;情况 7:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_OFF);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_OFF);数字写入(segG,SEGMENT_OFF);休息;情况 8:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_ON);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_ON);休息;案例 9:digitalWrite(segA, SEGMENT_ON);数字写入(segB,SEGMENT_ON);数字写入(segC,SEGMENT_ON);数字写入(segD,SEGMENT_ON);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_ON);数字写入(segG,SEGMENT_ON);休息; // 所有段都打开 case 10:digitalWrite(segA, SEGMENT_OFF);数字写入(segB,SEGMENT_OFF);数字写入(segC,SEGMENT_OFF);数字写入(segD,SEGMENT_OFF);数字写入(segE,SEGMENT_OFF);数字写入(segF,SEGMENT_OFF);数字写入(segG,SEGMENT_OFF);休息; }// 编码结束,BUDHUSARANAI,祝你好运。 }

示意图

这是SSD带LED的接线

制造工艺

  1. Arduino pov 视觉时钟
  2. 简单字时钟(Arduino)
  3. 诺基亚 5110 LCD 上的 DIY 简单 20 kHz Arduino 示波器
  4. 主时钟
  5. 智能百叶窗
  6. 意大利字时钟
  7. Arduino 带蓝牙控制 LED!
  8. Arduino Quadruped
  9. 7 段阵列时钟
  10. Sigfox kWh Meter
  11. 单 LED 矩阵 Arduino 翻转时钟
  12. Arduino 的隔离模拟输入