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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Arduino UNO驱动DS1307数字实时时钟RTC

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arduino UNO驱动DS1307数字实时时钟RTC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DS1307時鐘模塊簡介

DS1307是一款低功耗,具有56字節非失性RAM的全BCD碼時鐘日歷實時時鐘芯片,地址和數據通過兩線雙向的串行總線的傳輸,芯片可以提供秒,分,小時等信息,每一個月的天數能自動調整。并且有閏年補償功能,記年上限2100。AM/PM 標志位決定時鐘工作于24小時或12小時模式,芯片有一個內置的電源感應電路,具有掉電檢測和電池切換功能。
模塊配備了一個后備2032可充電鋰電池,并帶充電電路,充滿電后可提供最長一年的計時。保留了4KB的EEPROM的內存,用以記錄更多鬧鐘和一些事件信息。預留一個DS18B20數字溫度傳感器接口,根據需要焊接。
EEPROM和DS1307共用一個IIC通信接口,用器件地址加以區分。

模塊引腳定義


SQ引腳已經接了上拉電阻,當DS1307芯片內SQWE位置1,則可輸出四種頻率的脈沖信號1Hz、4…096KHz、8.192KHz、32.768KHz

Arduino UNO與模塊接線

Arduino UNODS1307
A4SDA
A5SCL
5VVCC
GNDGND

測試代碼

在Arduino IDE庫管理器搜索DS1307,并安裝如圖示所例程庫

打開setTimeAndSqw.ino例程

/*!* @file setTimeAndSqw.ino* @brief Set time and start timing, set pin sqw output* @details Read the time and pin sqw mode* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)* @license The MIT License (MIT)* @author [qsjhyy](yihuan.huang@dfrobot.com)* @version V1.0* @date 2021-11-18* @url https://github.com/DFRobot/DFRobot_DS1307*/ #include <DFRobot_DS1307.h>/* Constructor */ DFRobot_DS1307 DS1307;void setup() {Serial.begin(115200);// Initialize sensorwhile( !(DS1307.begin()) ){Serial.println("Communication with device failed, please check connection");delay(3000);}Serial.println("Begin ok!");/*** According to the set time type, input the value of the corresponding range, set time* type Time type to be obtained, eTimeType_t:* eSEC, eMIN, eHR, eDOW, eDATE, eMTH, eYR* typeTime According to the selected time type, write the value of the corresponding range* When setting eSEC type, range: 00-59* When setting eMIN type, range: 00-59* When setting eHR type, range: 00-23* When setting eDOW type, range: 01-07* When setting eDATE type, range: 01-31* When setting eMTH type, range: 01-12* When setting eYR type, range: 2000-2099* Note: Values out of range will result in a setting error*/DS1307.setTypeTime(DS1307.eYR, 2000);/*** Get the time of one type from rtc module and convert it to uint16_t* type Time type to be obtained, eTimeType_t:* eSEC, eMIN, eHR, eDOW, eDATE, eMTH, eYR* According to the selected time type, return the value uint16_t of the corresponding range* When reading eSEC type, range: 00-59* When reading eMIN type, range: 00-59* When reading eHR type, range: 00-23* When reading eDOW type, range: 01-07* When reading eDATE type, range: 01-31* When reading eMTH type, range: 01-12* When reading eYR type, range: 2000-2099*/Serial.print("get type time: ");Serial.println(DS1307.getTypeTime(DS1307.eYR));/*** Stop RTC timer function* this bit is part of the seconds byte*/DS1307.stop();/*** According to the available array, set all the time* setTimeBuff Array in the following format (type is uint16_t)* setTimeBuff[0] for eSEC type, range: 00-59* setTimeBuff[1] for eMIN type, range: 00-59* setTimeBuff[2] for eHR type, range: 00-23* setTimeBuff[3] for eDOW type, range: 01-07* setTimeBuff[4] for eDATE type, range: 01-31* setTimeBuff[5] for eMTH type, range: 01-12* setTimeBuff[6] for eYR type, range: 2000-2099* Note: Values out of range will result in a setting error*/uint16_t setTimeBuff[7] = {5, 1, 17, 3, 9, 11, 2022};//設置當前時間DS1307.setTime(setTimeBuff);/*** Start RTC timing function* this bit is part of the seconds byte*/DS1307.start();/*** control the operation of the SQW/OUT pin* mode SQW Pin output mode:* eSquareWave_LOW, eSquareWave_HIGH, eSquareWave_1Hz, * eSquareWave_4kHz, eSquareWave_8kHz, eSquareWave_32kHz*/DS1307.setSqwPinMode(DS1307.eSquareWave_1Hz);}void loop() {/*** Get the current output mode of SQW/OUT pin* eSqwPinMode_t:* eSquareWave_LOW, eSquareWave_HIGH, eSquareWave_1Hz, * eSquareWave_4kHz, eSquareWave_8kHz, eSquareWave_32kHz*/if(DS1307.eSquareWave_1Hz == DS1307.getSqwPinMode()){Serial.print("SQW/OUT pin: 1Hz | ");}/*** Get the time from rtc module and convert it to uint16_t* getTimeBuff Array for buffering the obtained time, uint16_t ** getTimeBuff[0] for eSEC type, range: 00-59* getTimeBuff[1] for eMIN type, range: 00-59* getTimeBuff[2] for eHR type, range: 00-23* getTimeBuff[3] for eDOW type, range: 01-07* getTimeBuff[4] for eDATE type, range: 01-31* getTimeBuff[5] for eMTH type, range: 01-12* getTimeBuff[6] for eYR type, range: 2000-2099*/uint16_t getTimeBuff[7] = {0};DS1307.getTime(getTimeBuff);char outputarr[128];sprintf(outputarr, "time: %d/%d/%d-%d %d:%d:%d\r\n",getTimeBuff[6],getTimeBuff[5],getTimeBuff[4],getTimeBuff[3],getTimeBuff[2],getTimeBuff[1],getTimeBuff[0]);Serial.print(outputarr);delay(1000); }

實驗結果

通過串口助手顯示出進行初始時間設置后開始計時,并在模塊的SQ引腳用示波器測得輸出1Hz的秒脈沖

總結

以上是生活随笔為你收集整理的Arduino UNO驱动DS1307数字实时时钟RTC的全部內容,希望文章能夠幫你解決所遇到的問題。

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