堅(jiān)定航行篇a6000開發(fā)板ds1302實(shí)現(xiàn)萬年歷_第1頁
堅(jiān)定航行篇a6000開發(fā)板ds1302實(shí)現(xiàn)萬年歷_第2頁
堅(jiān)定航行篇a6000開發(fā)板ds1302實(shí)現(xiàn)萬年歷_第3頁
堅(jiān)定航行篇a6000開發(fā)板ds1302實(shí)現(xiàn)萬年歷_第4頁
堅(jiān)定航行篇a6000開發(fā)板ds1302實(shí)現(xiàn)萬年歷_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、愛普A600051 開發(fā)板堅(jiān)定航行篇修訂歷史:本手冊(cè)屬于愛普電子科技,任何人過我公司同意、或者修改本手冊(cè)都將承擔(dān)。1日期版本號(hào)修訂人修訂內(nèi)容2013.03.081.00(愛普?qǐng)F(tuán)隊(duì))創(chuàng)建DS1302 實(shí)現(xiàn)萬年歷項(xiàng)目說明:用 DS1302 計(jì)時(shí),包括年月日,時(shí)分秒。且時(shí)間是一直運(yùn)行的。將該時(shí)間顯示到數(shù)碼管上。開發(fā)板斷電以后,要保證時(shí)間依然在運(yùn)行。此項(xiàng)目練習(xí)的目的:(應(yīng)掌握如下知識(shí)點(diǎn))學(xué)習(xí) DS1302 時(shí)鐘學(xué)習(xí)看時(shí)序圖。的操作。(3)學(xué)習(xí) C 語言結(jié)構(gòu)體的用法。完整代碼:#include #include DS1302_drv.h #include digitron_drv.h/*初始時(shí)間數(shù)組 1

2、3 年 01 月 02 日 11 點(diǎn) 14 分 00 秒*/u8 gSetTime=0 x13,0 x01,0 x02,0 x11,0 x14,0 x00;Struct/定義一個(gè)結(jié)構(gòu)體,該結(jié)構(gòu)體的成員都是和時(shí)間有關(guān)8 Seconds;8 Minutes;8 Hour;8 Date;8 Month; 8 Year;/ 秒/ 分/ 時(shí)/ 日/ 月/ 年u u u u ugsTimeCalendar;/*顯示時(shí)間*/void DisplayTime(void)DigShowNumber(7,gsTimeCalendar.Hour4,0); DigShowNumber(6,gsTimeCalendar

3、.Hour&0 x0f,1); DigShowNumber(5,gsTimeCalendar.Minutes4,0); DigShowNumber(4,gsTimeCalendar.Minutes&0 x0f,1); DigShowNumber(3,gsTimeCalendar.Seconds4,0); DigShowNumber(2,gsTimeCalendar.Seconds&0 x0f,0);/*顯示日期*/2void DisplayCalendar(void)/*最高 2 位固定顯示 20,因?yàn)樵撃甑臄?shù)據(jù)是 00-99*/DigShowNumber(8,2,0); DigShowNum

4、ber(7,0,0);只支持 2000-2099 年,所以讀到的DigShowNumber(6,gsTimeCalendar.Year4,0); DigShowNumber(5,gsTimeCalendar.Year&0 x0f,1); DigShowNumber(4,gsTimeCalendar.Month4,0); DigShowNumber(3,gsTimeCalendar.Month&0 x0f,1); DigShowNumber(2,gsTimeCalendar.Date4,0); DigShowNumber(1,gsTimeCalendar.Date&0 x0f,0);/*設(shè)置時(shí)間

5、和日期*/void SetTimeCalendar(void)WriteDS1302(ADR_W_WP,WP_OFF);器進(jìn)行寫操作/關(guān)閉寫保護(hù)功能,允許對(duì)各寄存WriteDS1302(ADR_W_YEAR,gSetTime0); WriteDS1302(ADR_W_MONTH,gSetTime1); WriteDS1302(ADR_W_DATE,gSetTime2); WriteDS1302(ADR_W_HOUR,gSetTime4);/年/月/日/時(shí)WriteDS1302(ADR_W_MINUTES,gSetTime5); /分 WriteDS1302(ADR_W_SECONDS,gSet

6、Time6); /秒 WriteDS1302(ADR_W_WP,WP_ON); / /啟動(dòng)寫保護(hù)功能,進(jìn)行寫操作對(duì)各寄存器/*時(shí)間*/void ReadTime(void)gsTimeCalendar.Seconds = ReadDS1302(ADR_R_SECONDS); gsTimeCalendar.Minutes = ReadDS1302(ADR_R_MINUTES); gsTimeCalendar.Hour = ReadDS1302(ADR_R_HOUR);/秒分時(shí)/*日期*/void ReadCalendar(void)gsTimeCalendar.Date= ReadDS1302(

7、ADR_R_DATE); gsTimeCalendar.Month= ReadDS1302(ADR_R_MONTH);/日月年gsTimeCalendar.Year= ReadDS1302(ADR_R_YEAR);3/*主函數(shù)*/void main(void)u16 i;SetTimeCalendar();/初始化時(shí)間,設(shè)置 DS1302 中的時(shí)間和日期為初始值while(1)i = 3000;while(i-)/ i 用于切換年月日和時(shí)分秒的顯示ReadTime(); DisplayTime();/時(shí)間/顯示時(shí)間i = 1500;while(i-)ReadCalendar(); Displa

8、yCalendar();/日期/顯示日期根據(jù)“愛普學(xué)法:整框圖出步驟實(shí)踐中學(xué)理論,理解深刻且透徹?!毕葋碚驁D(產(chǎn)品設(shè)計(jì)的時(shí)候稱為硬件架構(gòu)):需要先看看這個(gè)項(xiàng)目和哪些硬件以及工具有關(guān)。項(xiàng)目中要求用 DS1302 計(jì)一個(gè)時(shí)間,包括年月日時(shí)分秒,然后把這個(gè)時(shí)間顯示出來。但是考慮到顯示全部數(shù)據(jù)只靠 8 位數(shù)碼管是不夠的,所以把年月日和時(shí)分秒來回切換顯示。至于開發(fā)板斷電以后,時(shí)間繼續(xù)運(yùn)行是硬件設(shè)計(jì)所決定的。4123單 片 機(jī) S T C 8 9 C5 21數(shù) 碼 管時(shí) 鐘 模 塊23圖 1理解的思路應(yīng)該是:往 DS1302 里寫一個(gè)時(shí)間,DS1302 會(huì)從這個(gè)時(shí)間點(diǎn)開始自動(dòng)計(jì)時(shí),實(shí)時(shí)把時(shí)間讀出來,放到

9、數(shù)碼管上顯示,就做出一個(gè)萬年歷了。至于怎么顯示不是本項(xiàng)目的重點(diǎn),這和時(shí)鐘無關(guān),的關(guān)鍵就是正確的讀出時(shí)間。的步驟就是:第一步,看懂 DS1302 的工作時(shí)序;第二步,往 DS1302中寫入一個(gè)有效時(shí)間;第三步,從 DS1302 中讀出時(shí)間;第四步,將讀出的時(shí)間用數(shù)碼管顯示出來。很明顯,這個(gè)項(xiàng)目的重點(diǎn)三步。5第一步:看懂 DS1302 的工作時(shí)序首先需要看一下開發(fā)板電路原理圖的硬件連接方式:備 用 電 池晶 振圖 26本項(xiàng)目用到的 DS1302 時(shí)鐘共有 8 個(gè)引腳。簡(jiǎn)單的看一下。1 腳 8 腳都是接電源,必然需要供電,但是為什么這個(gè)要兩個(gè)腳供電呢?這點(diǎn)在揚(yáng)帆起航篇中也介紹過了。因?yàn)闀r(shí)鐘是個(gè) 1

10、秒鐘就會(huì)改變一次的特殊的數(shù)據(jù),如果因?yàn)槟撤N情況斷電了,將不再計(jì)時(shí),下次再上電的時(shí)候必然是一個(gè)錯(cuò)誤的時(shí)間。這里另一個(gè)電源腳就是接備用電源的,開發(fā)板上接的是一個(gè) 3V 的紐扣電池。那么該是如何很好的處理這兩個(gè)電源的呢?在手冊(cè)中已經(jīng)給出了。VCC2 是主電源,VCC1 是備用電源。當(dāng) VCC2VCC1+0.2V,用 VCC2 供電,當(dāng) VCC2VCC1,用 VCC1 供電。還有一個(gè) VCC1VCC2VCC1+0.2V 這個(gè)區(qū)間手冊(cè)沒有介紹,這個(gè)臨界區(qū)就說不清是哪個(gè)電源供電了,所以設(shè)計(jì)電路的時(shí)候一定要避開這個(gè)臨界區(qū)。2,3 腳根據(jù)手冊(cè)的說明,接上 32.768KHZ 晶振。單片機(jī)工作需要晶振,有晶振才

11、能產(chǎn)生時(shí)鐘周期,才可以執(zhí)行代碼,單片機(jī)正常工作。同樣的,時(shí)鐘的本質(zhì)是計(jì)時(shí),它產(chǎn)生的時(shí)間也需要基準(zhǔn),這個(gè)基準(zhǔn)就是來源于晶振。所以想要時(shí)鐘計(jì)時(shí)準(zhǔn)的話,一定要選誤差小的晶振。單片機(jī)和 DS1302 時(shí)鐘通訊需要 3 跟數(shù)據(jù)線,分別是 CLK,RST,IO。用 3 根線就能完成年月日時(shí)分秒這么多數(shù)據(jù)的傳輸,還是很神奇的吧。單片機(jī)和DS1302 之間的數(shù)據(jù)傳輸要遵守 DS1302 制定的規(guī)則,專業(yè)的講就是時(shí)序。下面就來看看時(shí)序。7圖 3要按照這個(gè)來寫程序通信才會(huì)成功,這是一個(gè)寫數(shù)據(jù)的時(shí)序,看它千萬不要暈,慢慢來分析。每根數(shù)據(jù)線就只有兩種情況或者低電平,它們都是隨著時(shí)間而改變的。寫數(shù)據(jù)是通過 I/O 這條

12、線,看到的 I/O 線上有兩種圖形,一個(gè)是白色的,一個(gè)是帶陰影的。白色的時(shí)間段表示可以寫數(shù)據(jù),而帶陰影的表明不可寫。仔細(xì)觀察時(shí)序圖,在 SCLK 上升沿的時(shí)刻(從低電平),I/O 進(jìn)入數(shù)據(jù)可寫狀態(tài),而 SCLK 下降沿的時(shí)刻(從到到低電平),I/O 進(jìn)入數(shù)據(jù)不可寫狀態(tài)。所有的寫數(shù)據(jù)操作都是在 CE(CE 就是 RST)為的時(shí)刻進(jìn)行的。前面的紅色字體說明了寫數(shù)據(jù)的一個(gè)過程。這個(gè)過程對(duì)時(shí)間也是有要求的,可以看到時(shí)序圖中有很多的 t 表示時(shí)間。這個(gè)時(shí)間的具體值手冊(cè)中也有介紹。圖 48這些時(shí)間有的做了最小的限定,有的做了最大的限定。本采用 5V 供電,所以看時(shí)間只要看 VCC=5V 的即可。在之前課程

13、中介紹過了,如果單片機(jī)接的是 12M 晶振,單片機(jī)執(zhí)行一條指令的時(shí)間為 1us。而可以看到,DS1302所有的操作時(shí)間 MIN 下最大為 1us。也就是說,這些時(shí)間只要達(dá)到 1us,DS1302就認(rèn)為合格了,是有效的時(shí)間。單片機(jī)接 12M 晶振下,在寫這個(gè)程序就無需延時(shí)了,利用每條語句本身執(zhí)行所要花去的時(shí)間(至少 1us),即可滿足時(shí)序要求的時(shí)間。但是如果單片機(jī)接入比 12M 大的晶振,部分語句后面就需要加上延時(shí)函數(shù)了。否則是不滿足時(shí)序的。寫一下寫數(shù)據(jù)的時(shí)序:void TransmitByte(u8 TByte)/TByte 為需要寫入的數(shù)據(jù)u8 i;for(i=0;i= 1;/CLK 變成

14、1,完成上升沿對(duì)照著時(shí)序圖看這個(gè)程序,應(yīng)該可以看懂的。如果搞定寫的過程,讀的過程就很輕松了。9讀操作時(shí)序圖:圖 5u8 ReceiveByte(void)u8 i,RecByte;for(i=0;i= 1;)/從 I/O 數(shù)據(jù)線上讀數(shù)據(jù)RecByte |= 0 x80;/讀到,寫入 1elseRecByte &= 0 x80;/讀到低電平,寫入 0DS1302_CLK = 1;/CLK 完成一個(gè)上升沿return(RecByte);/返回讀到的數(shù)據(jù)至此,搞清了 DS1302 的時(shí)序,下面的工作就相對(duì)輕松了。第二步:往 DS1302 中寫入一個(gè)有效數(shù)據(jù)圖 610寫數(shù)據(jù)的過程就寫入兩個(gè)字節(jié),第一個(gè)

15、是要寄存器地址,第二個(gè)是寫入的數(shù)據(jù)。需要的年月日時(shí)分秒這些參數(shù),都放在 DS1302 中的各個(gè)“房間”里,要先指定這個(gè)“房間”,再往里面寫數(shù)據(jù)。void WriteDS1302(uDS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;8 Adr, u8 WByte) /往r 地址中寫入數(shù)據(jù) WByte/RST 開始為低電平/CLK 開始也為低電平/RST 在/先寫地址,才可以進(jìn)行通訊。TransmitByte(Adr);TransmitByte(WByte);/往剛剛的地址中寫入數(shù)據(jù)DS1302_RST = 0;/寫完一次數(shù)據(jù),RST 拉低。手冊(cè)上給出了各個(gè)

16、地址對(duì)應(yīng)的數(shù)據(jù):圖 7寫年月日,時(shí)分秒,對(duì)應(yīng)的地址分別是 0 x8c,0 x88,0 x86,0 x84,0 x82,0 x80。那就往里面寫一個(gè)數(shù)據(jù)。WriteDS1302(0 x8c,gSetTime0); WriteDS1302(0 x88,gSetTime1); WriteDS1302(0 x86,gSetTime2); WriteDS1302(0 x84,gSetTime3); WriteDS1302(0 x82,gSetTime4); WriteDS1302(0 x80,gSetTime5);/年/月/日/時(shí)/分/秒這里還有一個(gè)要注意的,WP,就是 0 x8e 對(duì)應(yīng)的數(shù)據(jù),WP 是

17、寫保護(hù)??紤]到時(shí)間不是一個(gè)需要經(jīng)常修改的參數(shù),一般校準(zhǔn)一次,就不需要再校準(zhǔn)了,所以防止程序中意外修改時(shí)間參數(shù),就加上了這個(gè) WP 參數(shù),在需要寫時(shí)間的時(shí)候打開 WP,寫完時(shí)間以后,再關(guān)上 WP,這樣時(shí)間就無法被修改了,這么做是從安全角度考慮的。WriteDS1302(0 x8e,0 x00);/關(guān)閉寫保護(hù)功能,允許對(duì)各寄存器進(jìn)行寫操作11/*然后寫入時(shí)間*/WriteDS1302(0 x8e,0 x80);/啟動(dòng)寫保護(hù)功能,對(duì)各寄存器進(jìn)行寫操作第三步:從 DS1302 中讀出時(shí)間圖 8讀數(shù)據(jù)和寫數(shù)據(jù)一樣,同樣是 2 個(gè)字節(jié),一個(gè)地址,一個(gè)數(shù)據(jù)。u8 ReadDS1302(u8 Adr)unsi

18、gned char RByte; DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;TransmitByte(Adr); RByte = ReceiveByte(); DS1302_RST = 0;return(RByte);/先寫地址/從之前的地址中讀數(shù)據(jù)然后根據(jù)這個(gè)函數(shù)和圖 7 的地址,讀出需要的年月日。void ReadTime(void)gsTimeCalendar.Seconds = ReadDS1302(0 x81); gsTimeCalendar.Minutes = ReadDS1302(0 x83); gsTimeCalendar.Hou

19、r = ReadDS1302(0 x85);void ReadCalendar(void)gsTimeCalendar.Date = ReadDS1302(0 x87); gsTimeCalendar.Month = ReadDS1302(0 x89); gsTimeCalendar.Year = ReadDS1302(0 x8d);/秒分時(shí)/日月年到這里,就讀出了需要的 6 個(gè)參數(shù)了,下面就是把它放到數(shù)碼管上12顯示,這個(gè)不再是本節(jié)探討的內(nèi)容。這里再介紹一個(gè)知識(shí)點(diǎn),結(jié)構(gòu)體。結(jié)構(gòu)體是 C 語言中很常用的一個(gè)方法,簡(jiǎn)單來講,在本節(jié)中,一共需要6 個(gè)參數(shù),年月日,時(shí)分秒??梢杂靡粋€(gè)數(shù)組或者用 6 個(gè) unsigned char 來定義它們,但是這樣會(huì)顯得比較凌亂

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論