版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第十五章第十五章 實時時鐘實時時鐘DS13022vBCD碼碼(Binary-Coded Decimal) :即二:即二 十進(jìn)制代碼,是一種用二進(jìn)制十進(jìn)制代碼,是一種用二進(jìn)制編碼十進(jìn)制的代碼。編碼十進(jìn)制的代碼。BCD 碼用四個位元來儲存一個十進(jìn)制的數(shù)碼,使得二碼用四個位元來儲存一個十進(jìn)制的數(shù)碼,使得二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷進(jìn)行。進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷進(jìn)行。v主要應(yīng)用主要應(yīng)用:時間、日期、年月(:時間、日期、年月(現(xiàn)實中用現(xiàn)實中用10進(jìn)制表示進(jìn)制表示)在單片機系統(tǒng)中的)在單片機系統(tǒng)中的存儲、顯示等。存儲、顯示等。3SPI :是一種高速的、全雙工、同步通信:是一種高速的、全雙工、同
2、步通信總線,是總線,是Motorola定義的,定義的,常用于單片常用于單片機和機和EEPROM、FLASH、實時時鐘、數(shù)字信號處理器等器件的通信、實時時鐘、數(shù)字信號處理器等器件的通信。標(biāo)準(zhǔn)標(biāo)準(zhǔn)SPI使用使用4個個引腳:引腳: NSS: 片選,從設(shè)備片選使能信號片選,從設(shè)備片選使能信號 SCK: 時鐘,由主機產(chǎn)生,和時鐘,由主機產(chǎn)生,和SCL類似類似 MOSI:主機輸出從機輸入,:主機輸出從機輸入,Master Output/Slave Input,主機給從機發(fā)送指令或數(shù)據(jù)的通道,主機給從機發(fā)送指令或數(shù)據(jù)的通道 MISO:主機輸入從機輸出,:主機輸入從機輸出,Master Input/Slave
3、 Output,主機讀取從機的狀態(tài)或數(shù)據(jù)的通道,主機讀取從機的狀態(tài)或數(shù)據(jù)的通道4vCPOL:Clock Polarity,即時鐘極性??臻e狀態(tài)為,即時鐘極性??臻e狀態(tài)為高電平高電平,則,則CPOL=1; 空閑狀態(tài)為空閑狀態(tài)為低電平低電平,則,則CPOL=0。vCPHA:Clock Phase,即時鐘相位。,即時鐘相位。 CPHA=1表示數(shù)據(jù)的表示數(shù)據(jù)的輸出輸出在一個時鐘周期的在一個時鐘周期的第一個沿,第一個沿,采樣采樣在在第二個沿第二個沿; CPHA=0表示數(shù)據(jù)的表示數(shù)據(jù)的采樣采樣在一個時鐘周期的在一個時鐘周期的第一個沿,第一個沿,輸出輸出在在第二個沿第二個沿。數(shù)據(jù)未發(fā)送時以及發(fā)送完畢后, S
4、CK 都是高電平,因此 CPOL=1。在 SCK 第一個沿時MOSI 和 MISO發(fā)生變化, SCK 第二個沿的時候,數(shù)據(jù)是穩(wěn)定的,此刻采樣數(shù)據(jù)是合適的。561、實時時鐘芯片、實時時鐘芯片DS1302可以提供秒、分、小時、日期、月、年等信息,并可以提供秒、分、小時、日期、月、年等信息,并且還有軟件自動調(diào)整的能力,可以通過配置且還有軟件自動調(diào)整的能力,可以通過配置AM/PM來決定采用來決定采用24小時格式還小時格式還是是12小時格式。小時格式。2、擁有、擁有31字節(jié)的數(shù)據(jù)存儲字節(jié)的數(shù)據(jù)存儲RAM。7引腳編引腳編號號引腳名引腳名稱稱引腳功能引腳功能1 1Vcc2Vcc2主電源引腳主電源引腳2 2X
5、1X1這兩個引腳需要接一個這兩個引腳需要接一個32.768K32.768K的晶振,給的晶振,給DS1302DS1302提供一個基準(zhǔn)提供一個基準(zhǔn)3 3X2X24 4GNDGND接地接地5 5CECE使能輸入引腳。讀寫使能輸入引腳。讀寫DS1302DS1302的時候必須是高的時候必須是高電平電平6 6I/OI/O雙向通信引腳雙向通信引腳,讀寫數(shù)據(jù)都是通過這個引腳,讀寫數(shù)據(jù)都是通過這個引腳完成完成7 7SCLKSCLK輸入引腳輸入引腳,作為通信的時鐘信號作為通信的時鐘信號8 8Vcc1Vcc1備用電源引腳備用電源引腳8 第第 7 位(即最高位)固定為位(即最高位)固定為 1,這一位如果是,這一位如果
6、是 0 的話,那寫進(jìn)去也是無效的。的話,那寫進(jìn)去也是無效的。 第第 6 位是選擇位是選擇 RAM 還是還是 CLOCK ,第,第 6位是位是 0 選擇選擇 CLOCK 功能;第功能;第 6 位是位是 1表示要用表示要用 RAM; 從第從第 5 到第到第 1 位決定位決定寄存器的寄存器的 5 位地址位地址; 第第 0 位是讀寫位,這一位是位是讀寫位,這一位是 0 表示寫;為表示寫;為 1 表示要讀。表示要讀。當(dāng)?shù)刂芳拇嫫鳟?dāng)?shù)刂芳拇嫫鞯牡?位地址為位地址為0時時,選擇,選擇CLOCK功能,則:功能,則: 讀讀地址為地址為81h(0b10000001),), 寫寫地址為地址為80h(0b100000
7、00)。)。9寄存器寄存器0:CH為時鐘停止標(biāo)志位,剩下為時鐘停止標(biāo)志位,剩下7位中高位中高3位是秒的十位,低位是秒的十位,低4位是秒的個位。位是秒的個位。寄存器寄存器2:bit7 是是1的話代表是的話代表是12小時制,小時制,0代表是代表是24小時制;小時制;bit6固定是固定是0,bit5 在在12小時制下小時制下0代表上午,代表上午,1代表下午,在代表下午,在24小時制下和小時制下和 bit4一起代表了小時的十位,一起代表了小時的十位,低低4位代表的是小時的個位。位代表的是小時的個位。 寄存器寄存器7:最高位為寫保護(hù)位:最高位為寫保護(hù)位WP,如是,如是1則禁止給其它寄存器或那則禁止給其它
8、寄存器或那31個字節(jié)的個字節(jié)的RAM寫寫數(shù)據(jù)。數(shù)據(jù)。10 CE和和SSEL的使能控制是反的;的使能控制是反的; 寫數(shù)據(jù)時都是在寫數(shù)據(jù)時都是在 SCK 的的上升沿從機進(jìn)行采樣上升沿從機進(jìn)行采樣,下降沿時主機發(fā)送數(shù)據(jù)下降沿時主機發(fā)送數(shù)據(jù)。 DS1302 時序中單片機要先寫一個時序中單片機要先寫一個字節(jié)指令字節(jié)指令,指明要寫入寄存器的地址,指明要寫入寄存器的地址及后續(xù)是寫操作,再寫入一個字節(jié)的數(shù)據(jù)。按及后續(xù)是寫操作,再寫入一個字節(jié)的數(shù)據(jù)。按低位在前低位在前的方式發(fā)送。的方式發(fā)送。DS1302通信是 SPI的變異種類DS1302 單字節(jié)寫操作11 DS1302 時序圖上的箭頭都是針對時序圖上的箭頭都是
9、針對 DS1302的;的; 讀操作時先寫第一個字節(jié)指令,讀操作時先寫第一個字節(jié)指令,上升沿上升沿的時候的時候 DS1302 鎖存數(shù)據(jù),鎖存數(shù)據(jù),下降沿下降沿單片機單片機發(fā)送數(shù)據(jù)。發(fā)送數(shù)據(jù)。 第二個字節(jié)是第二個字節(jié)是 DS1302 下降沿下降沿輸出數(shù)據(jù),單片機輸出數(shù)據(jù),單片機上升沿上升沿進(jìn)行讀取,因此箭頭從進(jìn)行讀取,因此箭頭從 DS1302 角度來說,出現(xiàn)在下降沿。角度來說,出現(xiàn)在下降沿。 12將將2013年年10月月8號星期二號星期二12點點30分分00秒秒寫到寫到DS1302內(nèi)部,并且隨后以內(nèi)部,并且隨后以1秒的精度將時間顯示到秒的精度將時間顯示到1602液晶上。液晶上。voidvoid D
10、S1302ByteWriteDS1302ByteWrite( (unsignedunsigned charchar datdat) ) unsignedunsigned charchar mask; mask; forfor (mask=0 x01; mask!=0; mask=1) (mask=0 x01; mask!=0; mask=1) /低位在低位在前前 ifif (mask & (mask & datdat) != 0) ) != 0) /首先輸出該位數(shù)首先輸出該位數(shù)據(jù)據(jù) DS1302_IO = 1; DS1302_IO = 1; elseelse DS1302_IO
11、 = 0; DS1302_IO = 0; DS1302_CK = 1; DS1302_CK = 1; /然后拉高時鐘然后拉高時鐘 DS1302_CK = 0; DS1302_CK = 0; /完成一個位的操作完成一個位的操作 DS1302_IO = 1; DS1302_IO = 1; /最后確保釋放最后確保釋放IOIO引引腳腳 voidvoid DS1302SingleWrite( DS1302SingleWrite(unsignedunsigned charchar regreg, , unsignedunsigned charchar datdat) ) / reg-/ reg-寄存器地址
12、寄存器地址 DS1302_CE = 1; DS1302_CE = 1; /使能片選信號使能片選信號 DS1302ByteWriteDS1302ByteWrite(regreg1)|0 x80); 1)|0 x80); /發(fā)送寫寄存器指令發(fā)送寫寄存器指令 DS1302ByteWriteDS1302ByteWrite( (datdat); ); /寫入字節(jié)數(shù)據(jù)寫入字節(jié)數(shù)據(jù) DS1302_CE = 0; DS1302_CE = 0; /除能片選信號除能片選信號 sbit DS1302_CE = P17;sbit DS1302_CE = P17;sbit DS1302_CK = P35;sbit DS
13、1302_CK = P35;sbit DS1302_IO = P34;sbit DS1302_IO = P34;13unsignedunsigned charchar DS1302ByteReadDS1302ByteRead()() unsignedunsigned charchar mask; mask; unsignedunsigned charchar dat = 0; dat = 0; forfor (mask=0 x01; mask!=0; mask=1) (mask=0 x01; mask!=0; mask=1)/逐位讀逐位讀取取 ifif (DS1302_IO != 0)(DS1
14、302_IO != 0) dat |= mask; dat |= mask; DS1302_CK = 1; DS1302_CK = 1; /拉高時鐘拉高時鐘 DS1302_CK = 0; DS1302_CK = 0; returnreturn dat; dat; /最后返回讀到的字節(jié)數(shù)據(jù)最后返回讀到的字節(jié)數(shù)據(jù) unsignedunsigned charchar DS1302SingleRead( DS1302SingleRead(unsignedunsigned charchar regreg) ) unsignedunsigned charchar dat; dat; DS1302_CE =
15、 1; DS1302_CE = 1; /使能片選信號使能片選信號 DS1302ByteWrite( DS1302ByteWrite(regreg1)|0 x81); 1)|0 x81); /發(fā)送讀寄存器指令發(fā)送讀寄存器指令 dat = dat = DS1302ByteReadDS1302ByteRead(); (); /讀取字節(jié)數(shù)據(jù)讀取字節(jié)數(shù)據(jù) DS1302_CE = 0; DS1302_CE = 0; /除能片選信號除能片選信號 returnreturn dat; dat; 14voidvoid InitDS1302() InitDS1302() unsignedunsigned charc
16、har i; i; unsignedunsigned charchar code InitTime = code InitTime = /BCDBCD碼表示的碼表示的20132013年年1010月月8 8日星期二日星期二12:30:0012:30:00 0 x00,0 x30,0 x12, 0 x08, 0 x10, 0 x02, 0 x13 0 x00,0 x30,0 x12, 0 x08, 0 x10, 0 x02, 0 x13 ; DS1302_CE = 0; DS1302_CE = 0; /初始化初始化DS1302DS1302通信引腳通信引腳 DS1302_CK = 0; DS1302
17、_CK = 0; i = DS1302SingleRead(0); i = DS1302SingleRead(0); /讀取秒寄存器讀取秒寄存器 ifif (i & 0 x80) != 0) (i & 0 x80) != 0) /由秒寄存器最高位由秒寄存器最高位CHCH的值判斷的值判斷DS1302DS1302是否已停是否已停止止 DS1302SingleWrite(7, 0 x00); DS1302SingleWrite(7, 0 x00); /撤銷寫保護(hù)以允許寫入數(shù)據(jù)撤銷寫保護(hù)以允許寫入數(shù)據(jù) forfor (i=0; i7; i+) (i=0; i= 200) (tmr200
18、ms = 200) /定時定時200ms200ms tmr200ms = 0; tmr200ms = 0; flag200msflag200ms = 1; = 1; 15voidvoid main() main() unsignedunsigned charchar i; i; unsignedunsigned charchar psec=0 xAA; psec=0 xAA; /秒備份,初值秒備份,初值A(chǔ)AAA確保確保首次讀取時間后會刷新顯示首次讀取時間后會刷新顯示 unsignedunsigned charchar time8; time8; /當(dāng)前時間數(shù)組當(dāng)前時間數(shù)組 unsignedun
19、signed charchar str12; str12; /字符串轉(zhuǎn)換緩沖區(qū)字符串轉(zhuǎn)換緩沖區(qū) EA = 1; EA = 1; /開總中斷開總中斷 ConfigTimer0(1); ConfigTimer0(1); /T0/T0定時定時1ms1ms InitDS1302(); InitDS1302(); /初始化實時時鐘初始化實時時鐘 InitLcd1602(); InitLcd1602(); /初始化液晶初始化液晶 whilewhile (1) (1) ifif ( (flag200msflag200ms) ) /每每200ms200ms讀取依次時間讀取依次時間 flag200ms = 0;
20、 flag200ms = 0; forfor (i=0; i7; i+) (i=0; i 4) + str2 = (time6 4) + 00; ; /“/“年年”高位數(shù)字轉(zhuǎn)換為高位數(shù)字轉(zhuǎn)換為ASCIIASCII碼,碼,BCDBCD碼碼 str3 = (time6&0 x0F) + str3 = (time6&0 x0F) + 00; ; /“/“年年”低位數(shù)字轉(zhuǎn)換為低位數(shù)字轉(zhuǎn)換為ASCIIASCII碼碼 str4 = str4 = -; ; /添加日期分隔符添加日期分隔符 str5 = (time4 4) + str5 = (time4 4) + 00; ; /“/“月月”
21、str6 = (time4&0 x0F) + str6 = (time4&0 x0F) + 00; ; str7 = str7 = -; ; str8 = (time3 4) + str8 = (time3 4) + 00; ; /“/“日日” str9 = (time3&0 x0F) + str9 = (time3&0 x0F) + 00; ; str10 = str10 = 00; ; LcdShowStr(0, 0, str); LcdShowStr(0, 0, str); /顯示第一行顯示第一行 str0 = (time5&0 x0F) + st
22、r0 = (time5&0 x0F) + 00; ; /“/“星期星期” str1 = str1 = 00; ; LcdShowStr(11, 0, LcdShowStr(11, 0, weekweek);); LcdShowStr(15, 0, str); LcdShowStr(15, 0, str); /顯示第一行顯示第一行 str0 = (time2 4) + str0 = (time2 4) + 00; ; /“/“時時” str1 = (time2&0 x0F) + str1 = (time2&0 x0F) + 00; ; str2 = str2 = :; ;
23、 /添加時間分隔符添加時間分隔符 str3 = (time1 4) + str3 = (time1 4) + 00; ; /“/“分分” str4 = (time1&0 x0F) + str4 = (time1&0 x0F) + 00; ; str5 = str5 = :; ; str6 = (time0 4) + str6 = (time0 4) + 00; ; /“/“秒秒” str7 = (time0&0 x0F) + str7 = (time0&0 x0F) + 00; ; str8 = str8 = 00; ; LcdShowStr(4, 1, str
24、); LcdShowStr(4, 1, str); /顯示第二行顯示第二行 psec = time0; psec = time0; /用當(dāng)前值更新上次秒數(shù)用當(dāng)前值更新上次秒數(shù) 16 struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型類型1 變量名變量名1; 類型類型2 變量名變量名2; 類型類型n 變量名變量名n; 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名1, 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名2, . 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名n; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型類型1 變量名變量名1; 類型類型2 變量名變量名2; 類型類型n 變量名變量名n; ; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名1, 結(jié)構(gòu)體變量名結(jié)
25、構(gòu)體變量名2, . 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名n;17struct sTime /日期時間結(jié)構(gòu)體定義日期時間結(jié)構(gòu)體定義 unsigned int year; /年年 unsigned char mon; /月月 unsigned char day; /日日 unsigned char hour; /時時 unsigned char min; /分分 unsigned char sec; /秒秒 unsigned char week; /星期星期;結(jié)構(gòu)體成員賦值:結(jié)構(gòu)體成員賦值: struct sTime bufTime; bufTime.year = 0 x2013; bufTime.mon = 0 x10;結(jié)構(gòu)體數(shù)組元素成員賦值:結(jié)構(gòu)體數(shù)組元素成員賦值: struct sTime bufTime3; bufTime0.year = 0 x2013; bufTime0.mon = 0 x10;結(jié)構(gòu)體指針變量成員訪問:結(jié)構(gòu)體指針變量成員訪問:struct sTime *pbufTime; pbufTime-year = 0 x2013; 或者是或者是 (*pbuf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版體檢合同協(xié)議3篇
- 就讀保證書范文的語言3篇
- 施工勞務(wù)分包合同范本2篇
- 文印服務(wù)合同模板樣本3篇
- 新學(xué)期學(xué)業(yè)提升承諾保證書3篇
- 撤銷委托書的相關(guān)法律規(guī)定3篇
- 房屋買賣委托書模板3篇
- 方式正確使用承諾書3篇
- 我國高層建筑混凝土施工論文(3篇)
- 電力工程委托減排合同模板
- 2024高校大學(xué)《輔導(dǎo)員》招聘考試題庫(含答案)
- 河南中考英語詞匯表
- 學(xué)校幼兒園食堂從業(yè)人員考試試題
- 人教版六年級上冊期末數(shù)學(xué)試卷
- 縣城市供水突發(fā)事件應(yīng)急預(yù)案
- 氣管插管術(shù)評分標(biāo)準(zhǔn)
- 文學(xué)概論智慧樹知到期末考試答案章節(jié)答案2024年甘肅政法大學(xué)
- 30題會務(wù)專員崗位常見面試問題含HR問題考察點及參考回答
- 遼寧省大連市中山區(qū)2023-2024學(xué)年七年級上學(xué)期期末歷史試題
- 新起點人教版小學(xué)英語二年級上冊教案-(全冊)
- 醫(yī)療器械質(zhì)量管理體系文件管理制度
評論
0/150
提交評論