單片機課程設(shè)計報告日歷_第1頁
單片機課程設(shè)計報告日歷_第2頁
單片機課程設(shè)計報告日歷_第3頁
單片機課程設(shè)計報告日歷_第4頁
單片機課程設(shè)計報告日歷_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 單片機原理與應(yīng)用課程設(shè)計題 目: 系 部: 專 業(yè): 班 級: 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 2013年 12 月 22 日目 錄1 設(shè)計任務(wù)與要求11. 1 設(shè)計任務(wù)112 設(shè)計要求12 設(shè)計方案121 設(shè)計思路122 芯片選擇12.2.1 單片機STC89C5212.2.2 DS1302芯片22.2.3 LED數(shù)碼管2 2.2.4 MAX232功能簡介. . . . . . . . . . . . . . . . . . . . . .4 2.2.5 74LS174功能簡介. . . . . . . . . . . . . . . . . . . . . 43 硬件電路設(shè)計531 電

2、路設(shè)計框圖532 主要單元電路的設(shè)計53.2.1 單片機主控制模塊的設(shè)計53.2.2 時鐘電路模塊的設(shè)計63.2.3 顯示模塊電路. 64 主要參數(shù)計算與分析741 計算與分析75 調(diào)試過程751 硬件調(diào)試75.1.1 硬件電路故障75.1.2 硬件調(diào)試方法752 軟件調(diào)試85.2.1 軟件電路故障85.2.2 軟件調(diào)試方法86 結(jié)論97 附錄107.1 電子日歷PCB圖107.2 電子日歷實物圖10 7.3 元件清單. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 7.4 源程序. . . . . . . . . .

3、. . . . . . . . . . . . . . . . . . . . .12 參考文獻2426 / 28文檔可自由編輯打印1 設(shè)計任務(wù)與要求1. 1 設(shè)計任務(wù) 本課題實驗主要采用STC89C52芯片和DS1302芯片與LCD1602液晶顯示屏等芯片來完成一個簡易的電子萬年歷。改萬年歷可以顯示年月日、時分秒,并且年月日與時分秒可以通過手動翻頁顯示。12 設(shè)計要求設(shè)計一個以單片機為核心的電子萬年歷,可實現(xiàn)功能:(1) 顯示年、月、日、時、分和秒功能;(2) 具備年、月、日、時、分和秒校準(zhǔn)功能;2 設(shè)計方案21 設(shè)計思路系統(tǒng)分為主控模塊、時鐘電路模塊、溫度檢測模塊、按鍵掃描模塊、LCD顯示

4、模塊、電源電路、復(fù)位電路、晶振電路等模塊。主控模塊采用AT89C51單片機,按鍵模塊用四個按鍵,用于調(diào)整時間,顯示模塊采用LCD1602,時鐘電路模塊采用DS1302時鐘芯片實現(xiàn)對時間、日期的操作。22 芯片選擇2.2.1單片機(AT89C52)(一)AT89C52的介紹AT89C52單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多種功能的I/O接口電路等一臺計算機所需要的基本功能部件,AT89C52單片機內(nèi)包含下列幾個部件:(1) 一個8位CPU;(2)一個片內(nèi)振蕩器及時鐘電路;(3)4K字節(jié)ROM程序存儲器;(4)128字節(jié)RAM數(shù)據(jù)存儲器;(5)兩個16位定時器/計數(shù)

5、器;(6)可尋址64K外部數(shù)據(jù)存儲器和64K外部程序存儲器空間的控制電路;(7)32條可編程的I/O線(四個8位并行I/O端口);(8)一個可編程全雙工串行口;(9)具有五個中斷源、兩個優(yōu)先級嵌套中斷結(jié)構(gòu)。(二) AT89C52單片機的部分管腳說明:AT89C52單片機采用40條引腳雙列直插式器件,引腳除5V( 40腳)和電源地( 20腳)外,其功能分為時鐘電路、控制信號、輸入/輸出三大部分: STC89C52引腳圖 STC89C52實物圖(三)另外介紹一下輸入輸出引腳(本系統(tǒng)只用到P0、P1、P2口):(1) P0端口P0.0-P0.7 是一個8位漏極開路型雙向I/O端口,端口置1(對端口寫

6、1)時作高阻抗輸入端。作為輸出口時能驅(qū)動8個TTL。對內(nèi)部Flash程序存儲器編程時,接收指令字節(jié);校驗程序時輸出指令字節(jié),要求外接上拉電阻。在訪問外部程序和外部數(shù)據(jù)存儲器時,P0口是分時轉(zhuǎn)換的地址(低8位)/數(shù)據(jù)總線,訪問期間內(nèi)部的上拉電阻起作用。(2) P1端口P1.0P1.7是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對內(nèi)部Flash程序存儲器編程時,接收低8位地址信息。(3) P2端口P2.0P2.7是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到高電平,作

7、輸入用。對內(nèi)部Flash程序存儲器編程時,接收高8位地址和控制信息。在訪問外部程序和16位外部數(shù)據(jù)存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數(shù)據(jù)存儲器時其引腳上的內(nèi)容在此期間不會改變2.2.2 DS1302芯片DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。圖2.2.2 DS1302引腳功能圖DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源

8、關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)傳送的方法。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變

9、為高阻態(tài)。上電運行時,在Vcc2.0V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。SCLK為時鐘輸入端。2.2.3 LED數(shù)碼管本課程設(shè)計采用共陽極數(shù)碼管2.2.4 MAX232第一部分是電荷泵電路:由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2I

10、N)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從11引腳(T1IN)、10引腳(T2IN)輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從14腳(T1OUT)、7腳(T2OUT)送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從13引腳(R1IN)、8引腳(R2IN)輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從12引腳(R1OUT)、9引腳(R2OUT)輸出。第三部分是供電:15腳GND、16腳VCC(+5v)。2.2.5 74LS174 74LS164為8位移位寄存器,其主要電特性的典型值如下:54/74164185mW54/74LS16480mW當(dāng)清除端(CLEAR

11、)為低電平時,輸出端(QAQH)均為低電平。串行數(shù)據(jù)輸入端(A,B)可控制數(shù)據(jù)。當(dāng)A、B任意一個為低電平,則禁止新數(shù)據(jù)輸入,在時鐘端(CLOCK)脈沖上升沿作用下Q0為低電平。當(dāng)A、B有一個為高電平,則另一個就允許輸入數(shù)據(jù),并在CLOCK上升沿作用下決定Q0的狀態(tài)。引腳:CLOCK:時鐘輸入端CLEAR:同步清除輸入端(低電平有效)A,B:串行數(shù)據(jù)輸入端QAQH:輸出端3 硬件電路設(shè)計31 電路設(shè)計框圖LED數(shù)碼管顯示電路電源驅(qū)動電路DS1302時鐘控制電路STC89C52RC單片機主控電路手動鍵盤控制電路圖3.1 電路設(shè)計框圖32 主要單元電路設(shè)計單元電路的設(shè)計包括主控制系統(tǒng)、時鐘電路模塊、

12、顯示模塊、復(fù)位電路和穩(wěn)壓電路的設(shè)計。3.2.1 單片機主控制模塊的設(shè)計單片機的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和30PF電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和30PF電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端。圖3.2.1 主控制系統(tǒng)3.2.2 時鐘電路模塊的設(shè)計如圖所示DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供

13、電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。圖3.2.2 DS1302的引腳圖3.2.3 顯示模塊電路顯示電路采用3位共陽極LED數(shù)碼管。內(nèi)部的三個數(shù)碼管共用adp這8根數(shù)據(jù)線,共有12個引腳,引腳排列依然是從左下角的那個腳(1腳)開始,以逆時針方向依次為112腳。數(shù)碼顯示管需要74LS164來驅(qū)動。 圖3.2.3 數(shù)碼管與74LS164驅(qū)動電路

14、 4 主要參數(shù)計算與分析41 計算與分析本設(shè)計完成了設(shè)計任務(wù)的所有要求。單片機采用STC89C52,編譯環(huán)境為keil,程序使用C語音進行編寫。電路設(shè)計使用proteus仿真軟件進行仿真調(diào)試,在Altium Designer上設(shè)計原理圖并繪制PCB圖。設(shè)計硬件制作比較順利。接著,主要是程序的調(diào)試。程序調(diào)試的難點在于設(shè)計的功能模塊過多,程序結(jié)構(gòu)比較復(fù)雜,使得調(diào)試起來比較費時間。完成設(shè)計任務(wù)的要求1:顯示年月日、時分秒。2:具有可調(diào)整日期和時間功能。5 調(diào)試過程51 硬件調(diào)試單片機應(yīng)用系統(tǒng)的硬件和軟件調(diào)試是交叉相互進行的,但通常是先排除樣機中明顯的硬件故障,尤其是電源故障,才能安全地和仿真器相連,

15、進行綜合調(diào)試。5.1.1 硬件電路故障(1)錯線、開路、短路解決方法:在畫原理圖時仔細檢查、校正即可解決。(2)元器件損壞解決方法:在設(shè)計過程中要明確各元器件的工作條件,嚴格按照元器件正常工況下進行操作,損壞的元器件要及時更換,以免損壞其他元件或影響電路功能的實現(xiàn)。(3)電源故障解決方法:電源必須單獨調(diào)試好以后才能加到系統(tǒng)的各個部件中。當(dāng)所有部分在該電源作用下都能正常工作,就選用該電源。5.1.2 硬件調(diào)試方法本設(shè)計調(diào)試過程中所用的調(diào)試方法是靜態(tài)測試:在樣機加電之前,首先用萬用表等工具,根據(jù)硬件電器原理圖和裝配圖仔細檢查樣機線路的正確性,并核對元器件的型號、規(guī)格和安裝是否符合要求。第二步是加電

16、后檢查各個插件上引腳的電位,仔細測量各點電位是否正常,尤其應(yīng)注意單片機插座上的各點電位,若出現(xiàn)較高電壓值,聯(lián)機時將會損壞仿真器。第三步是在不加電情況下,除單片機以外,插上所有的元器件,最后用仿真適配器將樣機的單片機插座和仿真器的仿真接口相連,為聯(lián)機調(diào)試做準(zhǔn)備。52 軟件調(diào)試5.2.1 軟件電路故障設(shè)計軟件部分可能出現(xiàn)這種錯誤的現(xiàn)象:(1)當(dāng)以斷點或連續(xù)方式運行時,目標(biāo)系統(tǒng)沒有按規(guī)定的功能進行操作或什么結(jié)果也沒有,這是由于程序轉(zhuǎn)移到意外之處或在某處死循環(huán)所造成的。解決方法:在采用實時多任務(wù)操作系統(tǒng)時,錯誤可能在操作系統(tǒng)中,沒有完成正確的任務(wù)調(diào)度操作,也可能在高優(yōu)先級任務(wù)程序中,該任務(wù)不釋放處理器

17、,使CPU在該任務(wù)中死循環(huán)。通過對錯誤程序的修改使其實現(xiàn)預(yù)期的功能。(2)結(jié)果不正確對于本設(shè)計而言,由于采用的是單片機C51語言,在檢查程序時,需要按模塊一步步查詢、修改,直到所有模塊都能正常工作,則顯示結(jié)果會達到預(yù)期值。5.2.2 軟件調(diào)試方法軟件調(diào)試所使用的方法有:計算程序的調(diào)試方法、I/O處理程序的調(diào)試法、綜合調(diào)試法等。(1)計算程序的調(diào)試方法根據(jù)計算程序的功能,事先準(zhǔn)備好一組測試數(shù)據(jù)。調(diào)試時,用仿真器的寫命令,將數(shù)據(jù)寫入計算程序的參數(shù)緩沖單元,然后從計算程序開始運行到結(jié)束,運行的結(jié)果和正確數(shù)據(jù)比較,如果對有的測試數(shù)據(jù)進行測試,都沒有發(fā)生錯誤,則該計算程序調(diào)試成功;如果發(fā)現(xiàn)結(jié)果不正確,改

18、用單步運行方式,即可檢查出錯誤所在。(2)I/O處理程序的調(diào)試對于A/D轉(zhuǎn)換一類的I/O處理程序是實時處理程序,因此一般用全速斷點運行方式或連續(xù)運行方式進行調(diào)試。(3)綜合調(diào)試綜合調(diào)試一般采用全速斷點運行方式,這個階段的主要工作是排除系統(tǒng)中遺留的錯誤以便提高系統(tǒng)的動態(tài)性能和精度。在綜合調(diào)試的最后階段,應(yīng)在目標(biāo)系統(tǒng)的晶振頻率內(nèi)工作,使系統(tǒng)全速運行目標(biāo)程序,實現(xiàn)了預(yù)定功能技術(shù)指標(biāo)后,便可將軟件固化,然后在運行固化的目標(biāo)程序,成功后目標(biāo)系統(tǒng)便可脫機運行。一般情況下,這樣一個應(yīng)用系統(tǒng)就算研制成功。6 結(jié)論本次基于單片機STC89C52等器件制作一個電子萬年歷。用單片機進行數(shù)據(jù)控制、處理,送到顯示器顯示

19、,硬件結(jié)構(gòu)簡單,所用元件較少,大大降低了制作成本。軟件采用C語言實現(xiàn),程序簡單可讀寫性強,效率高。與傳統(tǒng)的電路相比,具有方便操作、處理速度快、穩(wěn)定性高、性價比高的優(yōu)點,具有一定的使用價值。剛開始接到課程設(shè)計任務(wù),認為挺簡單的,然而真正開始動手制作時才知道并不是那么簡單,我和同組的組員了無頭緒,在不斷查閱資料,相互討論,以及請教指導(dǎo)老師之后,有了突破性進展;緊接著,我們的設(shè)計有了細致的分工,分工的同時大家經(jīng)常一起探討設(shè)計過程中出現(xiàn)的種種問題,并將不懂的請教老師解答,最終在大家不懈努力下,課程設(shè)計成功完成。實習(xí)的結(jié)果是我們不再是約束在理論上,而是鍛煉了我們的動手能力和分析、解決問題的能力,積累經(jīng)驗

20、,培養(yǎng)按部就班,一絲不茍的工作和對所學(xué)知識的綜合應(yīng)用能力,了解了很多課本上學(xué)不到的知識,設(shè)計中有好多問題都是因為理論知識不扎實,概念的模糊,使我們明白要把所學(xué)到的理論轉(zhuǎn)化為實踐需要一段努力學(xué)習(xí)的過程;在做一個設(shè)計的過程中,一定要注意理論和實踐同步進行,光有理論知識還是遠遠不夠的,要用實踐去檢驗理論,用理論指導(dǎo)實踐。這樣的實踐環(huán)節(jié)在我的學(xué)生生涯是很難得的,也為我們以后步入社會開始工作打下了一定的基礎(chǔ),最后我也要感謝組里的同學(xué)們,只有在他們團結(jié)協(xié)作下,本次課程設(shè)計才可以順利進行并實現(xiàn)所有功能,同時我也明白了團結(jié)協(xié)作的重要性。由于本人水平有限,在技術(shù)指標(biāo)和論文寫作中可能存在一些缺陷,懇請各位老師批評

21、指教。7 附錄71 電子日歷PCB圖72 電子日歷實物圖73 元件清單序號器件名稱規(guī)格、封裝數(shù)量備注1單片機STC89C521基本配置240腳IC座1基本配置31302芯片DS1302 、DIP81基本配置48腳IC座1基本配置5晶振32.768K1基本配置6晶體11.0592MHz1基本配置7瓷片電容30PF2基本配置8電解電容1000uF/25v1基本配置9三極管9015(PNP) TO-927基本配置10LEDSP410561N2基本配置11電阻2224基本配置12電阻3318基本配置13排阻9013414電阻2026基本配置15MAX813座116MAX813117獨石電容1045基本

22、配置18自鎖開關(guān)1基本配置19DS1302芯1基本配置201302 IC座1基本配置21接觸開關(guān)Power4基本配置22串行口1基本配置23電源接線口1基本配置24保險絲座1基本配置25保險絲1基本配置圖7.3.3 單片機課程設(shè)計器件清單 7.4 源程序#include#include#define uchar unsigned char #define uint unsigned int#define th0 0xf1#define tl0 0xffsbit simuseri_CLK=P25; /用P25模擬串口時鐘sbit simuseri_DATA=P24; /用P24模擬串口數(shù)據(jù)sbi

23、t SEG5=P00; sbit SEG4=P01; sbit SEG3=P02; sbit SEG2=P26; sbit SEG1=P27; sbit SEG0=P07; sbit a0=ACC0;sbit ss=P10;/開始鍵sbit sec=P11;/秒加&1302暫停sbit min=P12;/分加sbit hr=P13;/時加unsigned char temp;unsigned char a=0,flag=0,flag2=0;/code unsigned char dis_code=0xe7,0xa0,0x97,0xb5,0xf0,0x75,0x77,0xa1,0xf7,0xf5

24、; /共陰數(shù)碼管 0-9 - 熄滅表unsigned char dis_code=0x18,0x5F,0x68 ,0x4A,0x0F,0x8A,0x88,0x5E, 0x08,0x0A;unsigned char l_tmpdisplay8;uchar second,minute,hour,day,mon,year; uchar ReadValue; sbit DATA=P04; /時鐘1302數(shù)據(jù)接口sbit RST=P03; /1302復(fù)位線sbit SCLK=P05; /1302的時鐘線void delay(uint z)/短延時uint x,y;for(x=z;x0;x-)for(y=

25、30;y0;y-);void delay1(uint z)/長延時for(;z0;z-);/-/ 函數(shù)名稱:out_simuseri / 輸入?yún)?shù):data_buf/ 輸出參數(shù):無/ 功能說明:8位同步移位寄存器,將data_buf的數(shù)據(jù)逐位輸出到simuseri_DATA/-void out_simuseri(uchar data_buf) / uchar i; i=8; ACC=data_buf; do simuseri_CLK=0; simuseri_DATA=a0; simuseri_CLK=1; ACC=ACC1; while(-i!=0);void SegDisplay()/顯示子

26、程序out_simuseri(dis_codel_tmpdisplay0); SEG0=0;delay(2);SEG0=1;out_simuseri(dis_codel_tmpdisplay1); SEG1=0;delay(2);SEG1=1;out_simuseri(dis_codel_tmpdisplay2&0xf7);SEG2=0;delay(2);SEG2=1;out_simuseri(dis_codel_tmpdisplay3); SEG3=0;delay(2);SEG3= 1;out_simuseri(dis_codel_tmpdisplay4&0xf7); SEG4=0;dela

27、y(2);SEG4=1;out_simuseri(dis_codel_tmpdisplay5); SEG5=0;delay(2);SEG5=1;void Write1302(uchar dat) /寫1302子程序,一次寫入一個字節(jié) uchar i; SCLK=0; /拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備 delay1(2); /稍微等待,使硬件做好準(zhǔn)備 for(i=0;i=1; /將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個數(shù)據(jù)位 void WriteSet1302(uchar Cmd,uchar dat) /1302命令字和數(shù)據(jù)寫入程序。 RST=0; /禁止數(shù)據(jù)傳遞 SCLK=0;

28、/確保寫數(shù)居前SCLK被拉低 RST=1; /啟動數(shù)據(jù)傳輸 delay1(2); /稍微等待,使硬件做好準(zhǔn)備 Write1302(Cmd); /寫入命令字 Write1302(dat); /寫數(shù)據(jù) SCLK=1; /將時鐘電平置于已知狀態(tài) RST=0; /禁止數(shù)據(jù)傳遞 uchar Read1302(void) / 從1302的DATA線讀取數(shù)據(jù),并返回讀取的數(shù)據(jù)值 uchar i,dat; delay(2); /稍微等待,使硬件做好準(zhǔn)備 for(i=0;i=1; /將dat的各數(shù)據(jù)位右移1位,因為先讀出的是字節(jié)的最低位 if(DATA=1) /如果讀出的數(shù)據(jù)是1 dat|=0x80; /將1取

29、出,寫在dat的最高位 SCLK=1; /將SCLK置于高電平,為下降沿讀出 delay1(2); /稍微等待 SCLK=0; /拉低SCLK,形成脈沖下降沿 delay1(2); /稍微等待 return dat; /將讀出的數(shù)據(jù)返回 uchar ReadSet1302(uchar Cmd)/1302讀取數(shù)據(jù)子程序,先寫入讀命令字,然后再讀數(shù)據(jù),并返回讀取的數(shù)據(jù) uchar dat; RST=0; /拉低RST SCLK=0; /確保寫數(shù)居前SCLK被拉低 RST=1; /啟動數(shù)據(jù)傳輸 Write1302(Cmd); /寫入命令字,Cmd是命令字,用于設(shè)置讀取的數(shù)據(jù)地址,和數(shù)據(jù)類型 dat=

30、Read1302(); /讀出數(shù)據(jù) SCLK=1; /將時鐘電平置于已知狀態(tài) RST=0; /禁止數(shù)據(jù)傳遞 return dat; /將讀出的數(shù)據(jù)返回/*void Init_DS1302(void) /寫入1302的初始值子程序,如果使用備用電池,該子程序可以不用。 WriteSet1302(0x8E,0x00); /根據(jù)寫狀態(tài)寄存器命令字,寫入不保護指令 WriteSet1302(0x80,(0/10)4|(0%10); /根據(jù)寫秒寄存器命令字,寫入秒的初始值WriteSet1302(0x82,(35/10)4|(35%10); /根據(jù)寫分寄存器命令字,寫入分的初始值WriteSet1302

31、(0x84,(0/10)4|(0%10); /根據(jù)寫小時寄存器命令字,寫入小時的初始值 /根據(jù)寫狀態(tài)寄存器命令字,寫入不保護指令 WriteSet1302(0x86,(21/10)4|(21%10); /根據(jù)寫秒寄存器命令字,寫入秒的初始值WriteSet1302(0x88,(12/10)4|(12%10); /根據(jù)寫分寄存器命令字,寫入分的初始值WriteSet1302(0x8c,(13/10)4)*10+(temp&0x0f);unsigned char hex_bcd_sec(unsigned char temp)return (temp/10)4)*10+(temp&0x0f);uns

32、igned char hex_bcd_min(unsigned char temp)return (temp/10)4)*10+(temp&0x0f);unsigned char hex_bcd_hr(unsigned char temp)return (temp/10)4)|(temp%10);void INTT0()TMOD|=0x01;/定時器設(shè)置 16位TH0=th0;TL0=tl0; ET0=1; TR0=1; EA=1;void init1() if(sec=0) delay(2); if(sec=0) while(!sec); TR0=0; temp=bcd_hex_sec(Re

33、adSet1302(0x81)+1; if(temp=60) temp=0; WriteSet1302(0x80,hex_bcd_sec(temp)|0x80); TR0=1; if(min=0) delay(2); if(min=0) while(!min); TR0=0; temp=bcd_hex_min(ReadSet1302(0x83)+1; if(temp=60) temp=0; WriteSet1302(0x82,hex_bcd_min(temp); TR0=1; if(hr=0) delay(2); if(hr=0) while(!hr); TR0=0; temp=bcd_hex

34、_hr(ReadSet1302(0x85)+1; if(temp=24) temp=0; WriteSet1302(0x84,hex_bcd_hr(temp); temp=0; TR0=1; void init2() if(sec=0) delay(2); if(sec=0) while(!sec); TR0=0; temp=bcd_hex_sec(ReadSet1302(0x87)+1; if(temp=32) temp=1; WriteSet1302(0x86,hex_bcd_sec(temp)|0x80); TR0=1; if(min=0) delay(2); if(min=0) whi

35、le(!min); TR0=0; temp=bcd_hex_min(ReadSet1302(0x89)+1; if(temp=13) temp=1; WriteSet1302(0x88,hex_bcd_min(temp); TR0=1; if(hr=0) delay(2); if(hr=0) while(!hr); TR0=0; temp=bcd_hex_hr(ReadSet1302(0x8d)+1; if(temp=23) temp=0; WriteSet1302(0x8c,hex_bcd_hr(temp); temp=0; TR0=1; void main()uchar miao,seco

36、nd;/Init_DS1302(); /將1302初始化,如果1302使用備用電池,這條指令可以不用。/否則每次程序啟動重寫1302,造成備用電池存儲的時間,無法使用。INTT0();miao=ReadSet1302(0x81);second=miao;WriteSet1302(0x80,second&0x7f);while(1) /*if(ss=0) delay(2); if(ss=0) while(!ss);TR0=0; WriteSet1302(0x80,0x7f&ReadSet1302(0x81); TR0=1; */ /*if(sec=0) delay(2); if(sec=0) w

37、hile(!sec); TR0=0; temp=bcd_hex_sec(ReadSet1302(0x81)+1; if(temp=60) temp=0; WriteSet1302(0x80,hex_bcd_sec(temp)|0x80); TR0=1; if(min=0) delay(2); if(min=0) while(!min); TR0=0; temp=bcd_hex_min(ReadSet1302(0x83)+1; if(temp=60) temp=0; WriteSet1302(0x82,hex_bcd_min(temp); TR0=1; if(hr=0) delay(2); if

38、(hr=0) while(!hr); TR0=0; temp=bcd_hex_hr(ReadSet1302(0x85)+1; if(temp=24) temp=0; WriteSet1302(0x84,hex_bcd_hr(temp); temp=0; TR0=1; */ if(ss=0) delay(20); if(ss=0) a+; if(ss=0) delay(2); if(ss=0) while(!ss);TR0=0; WriteSet1302(0x80,0x7f&ReadSet1302(0x81); TR0=1; while(!ss); delay(20); while(!ss); if(flag=1) init1(); flag=0; else

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論