資料介紹
描述
使用 1307 RTC、I2C LCD 和 Arduino Uno 的數(shù)字日歷時(shí)鐘
“時(shí)間不是主要的,它是唯一的?!?- 邁爾斯戴維斯。
在大多數(shù)項(xiàng)目中使用與時(shí)間相關(guān)的操作。例如,我們可以隨時(shí)間自動(dòng)化我們的戶外燈。它會(huì)自動(dòng)從指定時(shí)間打開(kāi)到另一個(gè)預(yù)設(shè)時(shí)間。或者我們可以制作一個(gè)自動(dòng)上課鈴。還有很多。MCU不能自己做。我們使用 RTC(實(shí)時(shí)時(shí)鐘)在 MCU 中設(shè)置實(shí)時(shí)時(shí)間。
“數(shù)字日歷時(shí)鐘”是 RTC 的基礎(chǔ)項(xiàng)目。市場(chǎng)上有很多類型的 RTC 模塊。這里我使用 1307 RTC 模塊。
在這里,我使用了我之前記錄的相同 I2C LCD。如果您之前沒(méi)有閱讀過(guò),請(qǐng)先從這里閱讀。
在本文中,
- DS1307 RTC簡(jiǎn)介
- 在 Arduino IDE 中安裝庫(kù)。
- 創(chuàng)建 Arduino Sketch 的關(guān)鍵點(diǎn)
- Arduino代碼解釋。
- 最后制作“數(shù)字時(shí)鐘日歷。
DS1307 實(shí)時(shí)時(shí)鐘
- DS1307 是一款 RTC IC,有助于跟蹤時(shí)間。這是一個(gè)8針I(yè)C
- 在 DS1307 中,數(shù)據(jù)以二進(jìn)制十進(jìn)制編碼的位模式傳輸。DS1307 的數(shù)據(jù)傳輸率為 56 字節(jié)。
- I2C 是用于與 MCU 通信的協(xié)議
- DS1307 RTC Module主要由DS1307 IC、3V紐扣電池、2個(gè)上拉電阻和一個(gè)32.768 kHz晶振組成。
- 我們可以得到當(dāng)前的時(shí)、分、秒、星期、日、月和年。
DS1307的引腳排列
- 引腳 1、2:這些引腳用于標(biāo)準(zhǔn) 32.768 石英晶體。
- 引腳 3:該引腳用于連接 DS1307 的電池。
- 引腳 4:我們必須在此引腳上應(yīng)用接地。
- PIN 5:此引腳標(biāo)記為 SDA,是串行數(shù)據(jù)線的縮寫。
- PIN 6:用于串行時(shí)鐘輸入(SCL)和數(shù)據(jù)同步。
- 引腳 7:該引腳用于輸出方波獲取器(SQW)。
- 引腳 8:在此引腳,我們提供外部電源 (Vcc)。
創(chuàng)建 Arduino Sketch 的關(guān)鍵點(diǎn)
這里我們使用“RTClib”庫(kù)。我們可以得到 24 小時(shí)制。對(duì)于 12 小時(shí)制,我們需要對(duì)其進(jìn)行轉(zhuǎn)換。這種轉(zhuǎn)換的方法很多。這里我使用if
,else
條件和map()
函數(shù)。或者,您可以使用任何其他方法。
開(kāi)始吧?。。。。?/font>
步驟1
在 Arduino IDE 中安裝庫(kù)
如果您已經(jīng)安裝了這些庫(kù),請(qǐng)?zhí)^(guò)步驟。
我們需要安裝兩個(gè)庫(kù)。
1. 第一個(gè)是“RTClib”。這是一個(gè)主圖書館。因此,您可以將相同的庫(kù)用于其他一些 RTC 模塊。要安裝此庫(kù),請(qǐng)打開(kāi) Arduino IDE 并轉(zhuǎn)到Sketch > Include Library > Manage Libraries然后在右上角的搜索欄中鍵入RTClib 。然后點(diǎn)擊安裝

2.第二個(gè)庫(kù)是“LiquidCrystal-I2C”。轉(zhuǎn)到鏈接并下載庫(kù) Arduino-LiquidCrystal-I2C-library。然后打開(kāi) Arduino IDE 并轉(zhuǎn)到Sketch>Include Library> Add.ZIP Library 。接下來(lái)選擇下載的 ZIP 文件并單擊打開(kāi)。
庫(kù)安裝完成。
第2步
接下來(lái)我將創(chuàng)建一個(gè)草圖。首先添加三個(gè)頭文件1.RTClib.h、LiquidCrystal_I2C.h和Wire.h。使用 Wire 庫(kù)是因?yàn)檫@里我們使用 I2C 協(xié)議進(jìn)行通信。RTClib 庫(kù)將有助于與 RTC 模塊進(jìn)行通信。LiquidCrystal_I2C 庫(kù)有助于與 I2C LCD 進(jìn)行通信。
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
步驟 - 3
接下來(lái)我聲明,我將要使用的 RTC。這里是 DS1307,并為此設(shè)備創(chuàng)建一個(gè)名為“rtc”的對(duì)象。
RTC_DS1307 rtc
第4步
然后我創(chuàng)建另一個(gè)對(duì)象來(lái)調(diào)用 I2C LCD。對(duì)象名稱是 lcd。并設(shè)置LCD的地址、列數(shù)和行數(shù)。這里我的 I2C LCD 的地址是 0x27,列數(shù)是 16,行數(shù)是 2。這是我的情況。如果您使用不同的 LCD,請(qǐng)使用它的列數(shù)和行數(shù)。如果您不知道 LCD 的地址,請(qǐng)單擊此處,然后轉(zhuǎn)到該文章中的第 1 步。
LiquidCrystal_I2C lcd(0x27, 16, 2);
步驟 - 5
該函數(shù)now.dayOfTheWeek()
返回整數(shù)。例如。0 代表星期日,1 代表星期一,以此類推。所以我們需要將其轉(zhuǎn)換為星期日、星期一、...以便于理解。為此,我聲明了一個(gè) 2D 字符數(shù)組。請(qǐng)多注意數(shù)組的大小。我使用數(shù)組名稱作為“daysOfTheWeek”。名稱與功能相似。您可以使用任何其他名稱。然后填充數(shù)組。這里我使用“Sun”而不是“Sunday”來(lái)節(jié)省 LCD 上的空間(這里我使用 16x2 I2C LCD)。接下來(lái)我聲明一個(gè)整數(shù)類型變量,名為“temp”。這是用于存儲(chǔ)有關(guān) AM/PM 的信息。
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
int temp;
步驟 - 6
在設(shè)置部分,初始化 LCD 并打開(kāi) LCD 的背光。
lcd.begin();
lcd.backlight();
步驟 - 7
當(dāng) RTC 未運(yùn)行時(shí),在 LCD 上打印一條消息。這是出于調(diào)試目的。清除 LCD 并將光標(biāo)設(shè)置為 (0, 0)。
if (! rtc.begin()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RTC Not Working");
}
步驟 - 8
下一行代碼用于首次更新到 MCU(此處為 Arduino)。當(dāng)我們編譯代碼時(shí),這些行有助于從計(jì)算機(jī)獲取日期和時(shí)間。請(qǐng)多注意這些線路。因?yàn)樵诘谝淮螌⑼暾拇a上傳到 Arduino 之后,您需要注釋這些行并再次將代碼上傳到 Arduino。
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
步驟 - 9
現(xiàn)在我們需要打印歡迎信息。在這里我要打印“數(shù)字日歷時(shí)鐘”。首先將光標(biāo)設(shè)置在 (0, 0) 并打印“數(shù)字日歷”。然后將光標(biāo)設(shè)置為 (5, 1)。并打印“時(shí)鐘”。
lcd.setCursor(0, 0);
lcd.print("Digital Calendar");
lcd.setCursor(5, 1);
lcd.print("Clock");
設(shè)置部分完成
步驟-10
接下來(lái)對(duì)循環(huán)部分進(jìn)行編碼。使用 RTClib 獲取時(shí)間的方法幾乎只有一種,即調(diào)用now()
DateTime
now().
DateTime now = rtc.now();
步驟 - 11
然后使用 clear() 函數(shù)清除 LCD。Next 將光標(biāo)設(shè)置在 (1, 0)。我將以“DD/MM/YYYY”格式打印日期。在這里,我使用now.day()
函數(shù)來(lái)獲取當(dāng)前日期。now.month()
用于獲取當(dāng)前月份和當(dāng)前年份的函數(shù)。now.year()
首先打印“日”,然后打印“/”,然后打印“月”,然后打印另一個(gè)“/”,然后打印“年”。
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
步驟 - 12
接下來(lái)將光標(biāo)設(shè)置在 (12, 0) 并打印星期幾。函數(shù)“ now.dayOfTheWeek()
”返回對(duì)應(yīng)于星期幾的整數(shù)值。我們將把該返回值插入到我們的數(shù)組“daysOfTheWeek[]”中并打印當(dāng)前星期幾。
lcd.setCursor(12, 0);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
步驟 - 13
將光標(biāo)設(shè)置為 (2, 1)。現(xiàn)在我要打印小時(shí)。在此之前,我們需要將 24 小時(shí)制轉(zhuǎn)換為 12 小時(shí)制。" now.hour()
" 函數(shù)返回當(dāng)前時(shí)間。0 代表上午 12 點(diǎn),23 代表晚上 11 點(diǎn)
在這里,我將把小時(shí)分為四個(gè)部分。
- 0
- 1 到 11
- 12
- 13 至 23
使用“ if
”語(yǔ)句做出決定。如果 now.hour() 為 0,則打印“12”并為 AM 設(shè)置 temp=0。
if (now.hour() == 0) {
lcd.print("12");
temp = 0;
}
步驟 - 14
接下來(lái)使用“ else if()
”語(yǔ)句。僅當(dāng) now.hour() 大于或等于 11 時(shí)才打印。0 將從該語(yǔ)句中排除。now.hour()
因?yàn)椴襟E - 13 已經(jīng)在該條件下工作。然后為 AM 設(shè)置 temp==1。
else if (now.hour() <= 11) {
lcd.print(now.hour());
temp = 0;
}
步驟 - 15
然后使用另一個(gè)else if()
語(yǔ)句。這部分主要負(fù)責(zé)24小時(shí)制到12小時(shí)制的轉(zhuǎn)換。這里我們使用map()
函數(shù)。這個(gè)函數(shù)有5個(gè)屬性。首先是“ value
”。這里,“ value
”是函數(shù)“ now.hour()
”的返回值。第二個(gè)屬性是“ FromLow
”。這意味著“”的最小值value
是13。下一個(gè)屬性是“ FromHigh
”。表示“”的最大值value
。第三個(gè)屬性是“ToLow"
這里是 1。最后一個(gè)屬性是ToHigh
”。它是 11。函數(shù)map()
返回映射的值,我們打印該值。然后為 PM 設(shè)置 temp==1。
else if (now.hour() >= 13) {
lcd.print(map(now.hour(), 13, 23, 1, 11));
temp = 1;
}
步驟 - 16
如果 now.hour()==12 則打印 now.hour() 并為 PM 設(shè)置 temp==1。
if(now.hour()==12){
lcd.print(now.hour());
temp=1;
}
步驟 - 17
小時(shí)將由上述聲明之一打印。接下來(lái)打印一個(gè)冒號(hào),然后通過(guò)函數(shù) now.minute() 打印分鐘,再次打印一個(gè)冒號(hào),然后通過(guò)函數(shù) now.second() 打印當(dāng)前秒。
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
步驟 - 18
然后將光標(biāo)設(shè)置在 (12, 1)。如果 temp==0 則打印 AM,如果 temp==1 則打印 PM。然后添加 1000 毫秒的延遲。
else if (temp == 1) {
lcd.print("PM");
}
delay(1000);
編程完成。完整的代碼在代碼部分給出。
步驟 - 19
請(qǐng)?jiān)谏蟼鞔a前完成接線。
聯(lián)系

電路圖在圖表部分給出。
步驟 - 20
將代碼上傳到 Arduino Uno。然后評(píng)論或刪除(我推薦第一個(gè)選項(xiàng))聲明
“rtc.adjust(日期時(shí)間(F(__DATE__),F(xiàn)(__TIME__)));”
使用“//”,然后再次上傳代碼。
數(shù)字日歷時(shí)鐘完成。您還可以獲得數(shù)字日歷時(shí)鐘
請(qǐng)不要復(fù)制粘貼我的代碼。理解每一行代碼并創(chuàng)建自己的草圖
?
- 使用Visuino在I2C LCD顯示屏上顯示DS1307的日期
- 使用Arduino和I2C LCD制作帶按鈕的簡(jiǎn)單菜單
- 如何在Arduino中使用20x4 I2C字符LCD顯示器
- 使用Arduino的LCD I2C閃爍文本
- 帶有I2C的LCD的數(shù)字面具
- Arduino DS1307 RTC時(shí)鐘
- 如何在arduino中使用I2c LCD模塊
- 帶Arduino Uno的I2C 16x2 LCD接口(僅4線)
- Arduino和_LCD1602A液晶_I2C實(shí)驗(yàn)(附bug解析)
- 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)——串行日歷時(shí)鐘
- I2C LCD 器件通過(guò)驅(qū)動(dòng)帶有 I2C 接口的 2 線式 16 字符 LCD 13次下載
- PCF8563 I2C 實(shí)時(shí)時(shí)鐘/日歷芯片 30次下載
- Arduino uno驅(qū)動(dòng)I2C接口12864LCD屏幕程序及使用手冊(cè) 99次下載
- DS1339A低電流I2C串行實(shí)時(shí)時(shí)鐘 70次下載
- I2C總線接口時(shí)鐘芯片DS1307在坦克半主動(dòng)懸掛電控單元中
- I2C通信協(xié)議及其工作原理 4991次閱讀
- Linux I2C驅(qū)動(dòng)入門知識(shí)科普 1734次閱讀
- 如何使用MAX7219和DS1307制作7段數(shù)字時(shí)鐘 3564次閱讀
- 如何利用Arduino UNO設(shè)計(jì)無(wú)RTC模塊簡(jiǎn)單時(shí)鐘 4425次閱讀
- 什么是I2C通信協(xié)議? 7829次閱讀
- i2c總線用來(lái)做什么_i2c總線數(shù)據(jù)傳輸過(guò)程 7305次閱讀
- 微雪電子RTC時(shí)鐘模塊PCF8563 PCF8563T介紹 7739次閱讀
- dfrobotI2C DS1307 RTC實(shí)時(shí)時(shí)鐘模塊介紹 5135次閱讀
- digilent實(shí)時(shí)時(shí)鐘日歷模塊簡(jiǎn)介 1556次閱讀
- I2C總線技術(shù)在HDTV數(shù)字地面接收機(jī)中的應(yīng)用解析 1057次閱讀
- I2C總線的工作原理解析 6718次閱讀
- AT89C52單片機(jī)實(shí)現(xiàn)日歷時(shí)鐘芯片DS12C887顯示的設(shè)計(jì) 5371次閱讀
- LPC2124開(kāi)發(fā)板I2C總線接口的應(yīng)用 1943次閱讀
- 日歷時(shí)鐘和存儲(chǔ)電路及鍵盤和顯示電路介紹分析 4722次閱讀
- 基于FPGA的I2C SLAVE模式總線的設(shè)計(jì)方案 1.3w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論