【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟
【Arduino】使用DS1302時(shí)鐘模塊搭配TM1637四位數(shù)碼管制作簡(jiǎn)易電子鐘
- 材料準(zhǔn)備
- DS1302時(shí)鐘模塊
- DS1302芯片簡(jiǎn)介
- DS1302時(shí)鐘模塊簡(jiǎn)介
- TM1637四位數(shù)碼管簡(jiǎn)介
- 部分接線圖
- Arduino IDE代碼
- 完成效果
- 注意事項(xiàng)
材料準(zhǔn)備
① Arduino UNO R3主板(僅供參考)
② DS1302時(shí)鐘模塊
③ TM1637四位數(shù)碼管
④ 面包板
⑤ 杜邦線若干
DS1302時(shí)鐘模塊
DS1302芯片簡(jiǎn)介
DS1302可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。
| Vcc2 | 主電源(2.0V ~ 5.5V),當(dāng)電壓比Vcc1高0.2V時(shí)使用主電源 |
| Vcc1 | 備用電源,當(dāng)主電源切斷或電壓比Vcc2高時(shí)使用備用電源供電 |
| GND | 接地 |
| SCLK | 輸入引腳,時(shí)鐘信號(hào)輸入 |
| I/O | 雙向通信引腳,內(nèi)置有40kΩ的下拉電阻 |
| CE | 輸入引腳,芯片進(jìn)行讀寫時(shí)必須保持高電平,內(nèi)置有40kΩ的下拉電阻 |
| X1、 X2 | 需要用一個(gè)標(biāo)準(zhǔn)的32.768kHz石英晶體相連 |
DS1302時(shí)鐘模塊簡(jiǎn)介
當(dāng)然,如果我們使用集成有DS1302 芯片的時(shí)鐘模塊,那就變得簡(jiǎn)便了不少。本次使用的模塊已經(jīng)用32.768kHz的石英晶體把X1、X2相連,并使用CR2032紐扣電池作備用電源。
當(dāng)主電源被切斷使用并備用電源后,若重新接通主電源,時(shí)鐘信息會(huì)被刷新
| Vcc | 主電源,接+5V電源 |
| GND | 接地 |
| CLK | 與DS1302的SCLK相連,時(shí)鐘信號(hào)輸入 |
| DAT | 與DS1302的I/0相連,雙向數(shù)據(jù)引腳 |
| RST | 與DS1302的CE相連,讀寫需保持高電平 |
TM1637四位數(shù)碼管簡(jiǎn)介
| CLK | 時(shí)鐘信號(hào)輸入 |
| DIO | 數(shù)據(jù)輸入/輸出 |
| VCC | 接+5V電源 |
| GND | 接地 |
部分接線圖
Arduino IDE代碼
代碼調(diào)用了 Rtc_by_Makuna 和 TM1637_Driver 兩個(gè)庫(kù)
兩者皆可在Arduino IDE的管理庫(kù)中搜索添加
參考庫(kù)的示例程序,編寫代碼
#include <TM1637.h> #include <ThreeWire.h> #include <RtcDS1302.h>// configurations // TM1637 DIO Pin 3 // TM1637 CLK Pin 2 // DS1302 CLK/SCLK 4 // DS1302 DAT/IO 5 // DS1302 RST/CE 6 // DS1302 VCC 5v // DS1302 GND GNDTM1637 tm(2,3); //定義針腳 ThreeWire myWire(5,4,6); // DAT, CLK, RST RtcDS1302<ThreeWire> Rtc(myWire);void setup() {tm.init(); //初始化tm1637tm.setBrightness(1); //設(shè)置亮度為 1 Serial.begin(9600);Serial.print("已獲取系統(tǒng)時(shí)間并設(shè)定為: ");Serial.print(__DATE__);Serial.print(" ");Serial.println(__TIME__);Rtc.Begin();RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);printDateTime(compiled);Serial.println();RtcDateTime now = Rtc.GetDateTime();if (now < compiled) {Rtc.SetDateTime(compiled);}else if (now > compiled) {Rtc.SetDateTime(compiled);}else if (now == compiled) {Serial.println("當(dāng)前時(shí)間和編譯時(shí)相同");} }void loop() {tm.switchColon(); //TM1637中間的點(diǎn)閃爍RtcDateTime now = Rtc.GetDateTime();String Timestr = printDateTime(now);Serial.println();if (!now.IsValid()) //若now沒有被實(shí)例化{Serial.println("獲取時(shí)間失敗,檢查RTC是否連接");}int c0 = Timestr[15]-48; //ASCII碼轉(zhuǎn)數(shù)字int c1 = Timestr[14]-48;int c2 = Timestr[12]-48;int c3 = Timestr[11]-48;tm.display(c3, false, false, 3);tm.display(c2, false, false, 2);tm.display(c1, false, false, 1);tm.display(c0, false, false, 0);delay(1000); }#define countof(a) (sizeof(a) / sizeof(a[0])) String printDateTime(const RtcDateTime& dt) {char datestring[20];snprintf_P(datestring, countof(datestring),PSTR("%02u/%02u/%04u %02u:%02u:%02u"),dt.Month(),dt.Day(),dt.Year(),dt.Hour(),dt.Minute(),dt.Second() );Serial.print(datestring);return (datestring); }完成效果
注意事項(xiàng)
需要注意的是,校準(zhǔn)電子鐘會(huì)調(diào)用電腦的系統(tǒng)時(shí)間,因此要確保電腦系統(tǒng)時(shí)間已校準(zhǔn);若需重新校準(zhǔn)電子鐘只能重新上傳程序,不能通過Arduino上的重新執(zhí)行程序按鈕校準(zhǔn);當(dāng)主電源被切斷并使用備用電源后,若重新接通主電源,時(shí)鐘信息會(huì)被刷新。
總結(jié)
以上是生活随笔為你收集整理的【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科研入门之在web of science
- 下一篇: vux radio 改造为 tree 代