日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟

發布時間:2023/12/10 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【Arduino】使用DS1302時鐘模塊搭配TM1637四位數碼管制作簡易電子鐘

    • 材料準備
    • DS1302時鐘模塊
      • DS1302芯片簡介
      • DS1302時鐘模塊簡介
    • TM1637四位數碼管簡介
    • 部分接線圖
    • Arduino IDE代碼
    • 完成效果
    • 注意事項

材料準備

① Arduino UNO R3主板(僅供參考)
② DS1302時鐘模塊
③ TM1637四位數碼管
④ 面包板
⑤ 杜邦線若干

DS1302時鐘模塊

DS1302芯片簡介

DS1302可以對年、月、日、周、時、分、秒進行計時,且具有閏年補償等多種功能。

引腳說明
Vcc2主電源(2.0V ~ 5.5V),當電壓比Vcc1高0.2V時使用主電源
Vcc1備用電源,當主電源切斷或電壓比Vcc2高時使用備用電源供電
GND接地
SCLK輸入引腳,時鐘信號輸入
I/O雙向通信引腳,內置有40kΩ的下拉電阻
CE輸入引腳,芯片進行讀寫時必須保持高電平,內置有40kΩ的下拉電阻
X1、 X2需要用一個標準的32.768kHz石英晶體相連

DS1302時鐘模塊簡介


當然,如果我們使用集成有DS1302 芯片的時鐘模塊,那就變得簡便了不少。本次使用的模塊已經用32.768kHz的石英晶體把X1、X2相連,并使用CR2032紐扣電池作備用電源。
當主電源被切斷使用并備用電源后,若重新接通主電源,時鐘信息會被刷新

引腳說明
Vcc主電源,接+5V電源
GND接地
CLK與DS1302的SCLK相連,時鐘信號輸入
DAT與DS1302的I/0相連,雙向數據引腳
RST與DS1302的CE相連,讀寫需保持高電平

TM1637四位數碼管簡介

引腳說明
CLK時鐘信號輸入
DIO數據輸入/輸出
VCC接+5V電源
GND接地

部分接線圖

Arduino IDE代碼

代碼調用了 Rtc_by_Makuna 和 TM1637_Driver 兩個庫
兩者皆可在Arduino IDE的管理庫中搜索添加

參考庫的示例程序,編寫代碼

#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); //設置亮度為 1 Serial.begin(9600);Serial.print("已獲取系統時間并設定為: ");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("當前時間和編譯時相同");} }void loop() {tm.switchColon(); //TM1637中間的點閃爍RtcDateTime now = Rtc.GetDateTime();String Timestr = printDateTime(now);Serial.println();if (!now.IsValid()) //若now沒有被實例化{Serial.println("獲取時間失敗,檢查RTC是否連接");}int c0 = Timestr[15]-48; //ASCII碼轉數字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); }

完成效果

注意事項

需要注意的是,校準電子鐘會調用電腦的系統時間,因此要確保電腦系統時間已校準;若需重新校準電子鐘只能重新上傳程序,不能通過Arduino上的重新執行程序按鈕校準;當主電源被切斷并使用備用電源后,若重新接通主電源,時鐘信息會被刷新。

總結

以上是生活随笔為你收集整理的【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。