多功能電腦時鐘設(shè)計報告C語言編寫優(yōu)秀文檔95分_第1頁
多功能電腦時鐘設(shè)計報告C語言編寫優(yōu)秀文檔95分_第2頁
多功能電腦時鐘設(shè)計報告C語言編寫優(yōu)秀文檔95分_第3頁
多功能電腦時鐘設(shè)計報告C語言編寫優(yōu)秀文檔95分_第4頁
多功能電腦時鐘設(shè)計報告C語言編寫優(yōu)秀文檔95分_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、XXXX大學單片機系統(tǒng)綜合訓練課程設(shè)計報告目 錄一、實訓目的意義及任務(wù)要求11.1目的意義12.2任務(wù)要求1二.實習任務(wù)的方案22.1 任務(wù)進度22.2 系統(tǒng)分析22.3 器件選擇2三、系統(tǒng)硬件設(shè)計43.1 單片機的最小系統(tǒng)43.2 數(shù)碼管、獨立按鍵及DS1302時鐘芯片電路的設(shè)計43.3 其他附屬電路設(shè)計5四、軟件設(shè)計74.1 主程序設(shè)計74.2 系統(tǒng)操作功能設(shè)計74.3主程序void main ()94.4主程序設(shè)計94.5 DS1302子程序設(shè)計104.6時間調(diào)整子程序124.7 按鍵切換子程序14五、調(diào)試及性能分析155.1軟件測試155.2測試結(jié)果分析與結(jié)論155.3 測試結(jié)論16六

2、、心得體會17參考文獻18附錄一19附錄二20I多功能電腦時鐘設(shè)計報告一、實訓目的意義及任務(wù)要求1.1目的意義在如今,單片機的使用領(lǐng)域已十分廣泛,它在智能儀器儀表、實時工控、通訊設(shè)備、導航系統(tǒng)、家用電器等均有很廣泛的應(yīng)用。單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。單片機作為一門專業(yè)學科,對學生的要求也較高,要求對C語言有較好的掌握,還要與單片機的硬件工作原理相結(jié)合,也是理論與實踐相結(jié)合的一大體現(xiàn)。多功能電腦時鐘有效地檢驗了單片機中對數(shù)碼管,蜂鳴器,LED燈的控制,同時提高了學生的工程系統(tǒng)設(shè)計能力。通過此次單片機系統(tǒng)綜合訓練,不僅要讓學生認識了

3、解它,而且增強學生學科積極性。2.2任務(wù)要求通過對硬件和軟件的設(shè)計要求設(shè)計的電腦時鐘完成以下功能:1.基本功能實時顯示當前時間(4位數(shù)碼管顯示,2位顯示小時,2位顯示分鐘,第2位小數(shù)點0.5秒亮,0.5秒滅)。能用一按鍵依次切換顯示年及月日。能修改當前時鐘。具有秒表功能,顯示秒和百分秒。2. 擴展功能單片機與PC機的通訊(可選);可設(shè)定初值的倒計時功能(可選)鬧鐘及報時功能(可選); 顯示星期(可選)。3. 設(shè)計參數(shù)顯示時間時,4位數(shù)碼管顯示,2位顯示小時,2位顯示分鐘,第2位小數(shù)點0.5秒亮,0.5秒滅;蜂鳴器報時時間以每生學號最末位確定。二.實習任務(wù)的方案2.1 任務(wù)進度布置任務(wù)、分析任務(wù)

4、、學習單片機的C51功能程序設(shè)計(3天)方案設(shè)計、使用Protel設(shè)計和繪制硬件原理圖(1.5天)程序設(shè)計和調(diào)試(4.5天)設(shè)計驗收、撰寫報告(1天)2.2 系統(tǒng)分析根據(jù)系統(tǒng)功能要求,可將系統(tǒng)組成結(jié)構(gòu)分成四大部分:DS1302時鐘芯片讀數(shù)據(jù)寫數(shù)據(jù)模塊;數(shù)碼管顯示模塊;按鍵設(shè)置調(diào)節(jié)時間模塊;秒表功能模塊。硬件電路接線圖如附錄一,本系統(tǒng)采用DS1302時鐘芯片,四位數(shù)碼管用來顯示年月日,星期,時分,以及秒和百分秒。其中年月日,時分秒和星期采用DS1302的數(shù)據(jù)顯示,秒表采用單片機定時中斷實現(xiàn)。本系統(tǒng)共用到四個按鍵,且均為獨立對地按鍵,分別用于顯示切換,修改切換,修改加一,修改減一,秒表啟動暫停和數(shù)

5、據(jù)清零。2.3 器件選擇選用STC89C51芯片,頻率為11.0592MHz,由于系統(tǒng)要求顯示年月日小時和分鐘,采用四位LED數(shù)碼管顯示即可。按鍵是用來設(shè)置時間或鬧鐘時間或啟動秒表等功能的,設(shè)置三個按鍵:顯示切換模式鍵(key3)、修改數(shù)據(jù)鍵(key0)、加一鍵(key1)、減一鍵(key2)。常見的LED顯示具有清晰明亮的特點。是顯示接口也是絕大多數(shù)單片機應(yīng)用系統(tǒng)必備的部件之一。發(fā)光二極管組成的顯示器是單片機應(yīng)用產(chǎn)品中最常用的廉價輸出設(shè)備。它由若干個發(fā)光二極管按一定的規(guī)律排列而成。當某一個發(fā)光二極管導通時,相應(yīng)的一個點或一筆畫被點亮,控制不同組合的二極管導通,就能顯出各種字符。常用的7段顯示

6、器的結(jié)構(gòu)如圖所示,發(fā)光二極管的陽極連在一起的稱為共陽極顯示器,陰極連在一起的成為共陰顯示器。1位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管ag控制7個筆畫的亮或暗,另一個控制一個小數(shù)點的亮和暗,這種筆畫的七段顯示器能顯示的字符較少,字符的形狀有些失真,但失控簡單,使用方便。三、系統(tǒng)硬件設(shè)計3.1 單片機的最小系統(tǒng)單片機功能系統(tǒng)圖見附錄 1,。單片機最小系統(tǒng)由STC89C51單片機、復位電路、晶振電路組成。如圖3.1所示圖3.1 單片機最小系統(tǒng)圖 3.2 數(shù)碼管、獨立按鍵及DS1302時鐘芯片電路的設(shè)計在電子鐘的輸入部分,設(shè)置相應(yīng)的置數(shù)功能,通過外部設(shè)備的輸入,如按鍵,實現(xiàn)時間的切換。除此之

7、外,調(diào)整日期等時間也需要按鍵進行輸入。在選用輸入端口時,將P0引腳與按鍵相連進行輸入。K1、K2、K3、K4分別表示設(shè)置切換鍵、數(shù)值加一鍵、數(shù)值減一、顯示月和日鍵。系統(tǒng)仿真電路圖系統(tǒng)仿真電路圖DS1302與單片機連線圖3.3 其他附屬電路設(shè)計按鍵設(shè)計,電頻轉(zhuǎn)換芯片的硬件電路如下圖所示:RS232串口通信及電源電路等設(shè)計,如圖3.3所示圖3.3 附屬電路設(shè)計圖四、軟件設(shè)計4.1 主程序設(shè)計使用定時器0來定時,定時5ms,運用定時器的中斷來實現(xiàn)這些功能,顯示是用的數(shù)碼管的動態(tài)掃描,每5ms掃描一位數(shù)碼管,20ms循環(huán)一次。設(shè)置一些標志位,實時時間顯示的標志位,星期顯示的標志位,鬧鈴時間顯示的標志位

8、,秒表顯示的標志位,在不同的模式下,我們要使該模式下的標志位有效,從而進行此模式的顯示,通過按鍵進行不同的操作。每個標志位有效時,數(shù)碼管顯示的內(nèi)容就不一樣。鬧鐘的實現(xiàn)是用一個子函數(shù),每5ms調(diào)用一次函數(shù),并把北京時間與設(shè)定的鬧鈴時間比較,如果相等就使蜂鳴器有效。鬧鈴時間的長短可以用一個變量對秒計數(shù),當計數(shù)值小于我們設(shè)定的值時,就是蜂鳴器有效,當大于等于設(shè)定的值時就關(guān)閉蜂鳴器。整點報時或半點報時很好實現(xiàn),在中斷函數(shù)里,當分鐘等于60時,蜂鳴器對應(yīng)鳴叫相應(yīng)點數(shù),并且小時要自增1,當分鐘等于30時,蜂鳴器鳴一次,分鐘自增1,要使蜂鳴器有效,可用一個變量對秒計數(shù),當秒等于我們設(shè)定的值時,就關(guān)閉蜂鳴器。

9、4.2 系統(tǒng)操作功能設(shè)計根據(jù)系統(tǒng)功能描述,可以分為:北京時間功能、整點報時、鬧鈴功能、日期顯示及秒表功能功能。我們通過對K_Mode鍵按下的次數(shù)計數(shù),用Mode計數(shù),Mode的次數(shù)就代表了不同的模式,每個模式都有與之相對應(yīng)的指示燈,每個模式的功能如下:Mode 0:按鍵每按下時顯示北京時間模式,此時,四個指示燈全滅,顯示格式為:小時.分鐘(如:07.35,為7點35分),按K_UP或者K_DN鍵對系統(tǒng)沒影響,每到整點或半點時時,要進行相應(yīng)點數(shù)的間隔蜂鳴報時(半點短鳴一次)。Mode 1:按鍵按下一次時,進入修改北京時間的小時模式,四個指示燈依次為“亮滅滅滅”,按K_UP或者K_DN鍵對小時進行

10、修改。Mode 2:按鍵按下兩次時,進入修改北京時間的分鐘模式,四個指示燈依次為“滅亮滅滅”,按K_UP或者K_DN鍵對分鐘進行修改。Mode 3:按鍵按下三次時,進入修改鬧鈴時間的小時模式,四個指示燈依次為“滅滅亮滅”,按K_UP或者K_DN鍵對鬧鈴小時進行修改。Mode 4:按鍵按下四次時,進入修改鬧鈴時間的分鐘模式,四個指示燈依次為滅滅滅亮,按K_UP或者K_DN鍵對鬧鈴分鐘進行修改。Mode 5:按鍵按下五次時,進入年顯示模式,四個指示燈依次為“亮亮滅滅”,顯示格式為:四位年(如20.12為當前年份為公元2012年),在此種模式下,按K_UP或者K_DN鍵對系統(tǒng)沒影響。Mode 6:按

11、鍵按下六次時,進入月日顯示模式,四個指示燈依次為“亮滅亮滅”,顯示格式為:月日(如07.05為當前日期為7月5日),在此種模式下,按K_UP或者K_DN鍵對系統(tǒng)沒影響。Mode 7:按鍵按下七次時,進入秒表模式,四個指示燈依次為“亮滅滅亮”,顯示格式為:秒百分秒(如05.90為當前秒表計時到5秒900毫秒),在此種模式下,K_UP鍵設(shè)為用來啟動/暫停秒表、K_DN鍵設(shè)為用來對秒表進行清零。Mode 8:按鍵按下八次時,進入鬧鐘選擇模式,四個指示燈依次為“亮亮亮滅”,顯示格式為:CL01/00,"CL.00"表示貪睡鬧鈴功能關(guān)閉,"CL.01"表示貪睡鬧鈴

12、功能開啟,按UP或DN鍵可在00或01間循環(huán)選擇;在貪睡鬧鈴功能關(guān)閉時,可按任意鍵停止當前鬧鐘,或不按鍵,則鬧鐘1分鐘,以后再不響。在貪睡鬧鈴功能開啟時,如按下除UP鍵外的任意鍵,停止當前鬧鐘,如不按鍵,則鬧鐘1分鐘;當過5分鐘后,鬧鐘又會重新響起,如此循環(huán),只有按下UP鍵時,才能停止鬧鐘以后再不響。在此種模式下,K_UP鍵設(shè)為用來啟動/暫停秒表、K_DN鍵設(shè)為用來對秒表進行清零。Mode 9:按鍵按下九次時,進入整點報時選擇模式,四個指示燈依次為“亮亮亮亮”,顯示格式為:BS01/00,"BS.00"表示整點報時功能關(guān)閉,01表示報時功能開啟,按UP或DN鍵可在00或01

13、間循環(huán)選擇。4.3主程序void main()圖4.1 主程序功能流程圖4.4主程序設(shè)計主程序采用定時器0對程序進行掃描執(zhí)行。分別執(zhí)行DS1302芯片初始化子程序,寫數(shù)據(jù)子程序,將最初的值寫入芯片中,采用while循環(huán)循環(huán)執(zhí)行鍵盤掃描子程序。main() TMOD=0x01; /使用模式1,16位定時器 TH0=(65536-10000)/256; /給定初值 TL0=(65536-10000)%256; EA=1; /總中斷打開 ET0=1; /定時器中斷打開 TR0=1; /定時器開關(guān)打開Ds1302_Init(); Ds1302_Write_Time();while(1) keyscan

14、(); if(Btread=0) Btread=1; Ds1302_Read_Time(); display(); 4.5 DS1302子程序設(shè)計此子程序分為初始化程序,讀數(shù)據(jù)程序,寫數(shù)據(jù)程序,一些數(shù)據(jù)程序為例;void Ds1302_Write_Byte(unsigned char addr, unsigned char d) CE=0;_nop_(); SCLK=0; _nop_(); CE=1; _nop_(); Write1302(addr); Write1302(d); CE=0; _nop_(); IO=1; SCLK=1; 4.6時間調(diào)整子程序時間調(diào)整子程序采用的是對key1按的

15、次數(shù)不同來進行對年月日時分及星期的設(shè)置。void zongshi(void)if(!key) if(btx=0) if(!key) btx=1;k+; elsebtx=0; k=1時,調(diào)整年份,key1為加,key2為減void keyscan() k=2時,調(diào)整月份,key1為加,key2為減 k=3時,調(diào)整日份,key1為加,key2為減 display(); k=4時,調(diào)整星期,key1為加,key2為減 if(!key) if(btx=0) if(!key) btx=1; k+; 4.7 按鍵切換子程序void tiaoshidisplay() if(z=15) z=0; switch

16、(k) case 1:bt1=bt1;break; /年 case 2:bt2=bt2;bt1=0;break; /月 case 3:bt3=bt3;bt1=0;break; /日 case 4:bt1=bt1;bt3=0;break; /周 case 5:bt2=bt2;bt1=0;break; /時 case 6:bt3=bt3;bt2=0;break; /分 default:bt3=0;break; 18/35五、調(diào)試及性能分析5.1軟件測試電子成年歷是多功能的數(shù)字型,可以看當前日期(陰、陽歷),時間,還有溫度的儀器。電子成年歷功能很多,所以對于它的程序也較為復雜,所以在編寫程序和調(diào)試時

17、出現(xiàn)了相對較多的問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過程中主要遇到的問題如下:1. 時鐘不準,走一段時間后誤差較大 原因:該問題主要是晶振芯片的頻率不真確引起的。晶振的頻率理論值為12MHZ,由于存在誤差,導致了單片機時間走一段時間后便出現(xiàn)了誤差。2燒入程序后,LED數(shù)碼管顯示閃動,而且亮度不均勻。解決:首先對調(diào)用的延時進行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態(tài)掃描方式顯示的數(shù)字,動態(tài)掃描很快,人的肉眼是無法看出,但是調(diào)用的顯示程序時,如果不在反回時屏蔽掉最后的附值,則會出現(xiàn)很亮的現(xiàn)象,所以在顯示的后面加了屏蔽子令,最后解決了此問

18、題。3修改時間、日期時沒有農(nóng)歷沒有自動對應(yīng)上。解決:把不相關(guān)的程序暫時屏蔽,地農(nóng)歷的子程序獨立調(diào)試,發(fā)現(xiàn)在調(diào)用農(nóng)歷自動更新時,對十進制和十六進制處理不好,所以會造成錯亂。最后把相應(yīng)的十進制進行修改,使得可以與十六進制對應(yīng),最后解決了此問題.5.2測試結(jié)果分析與結(jié)論(1)在測試中遇到發(fā)光二極管、LED數(shù)碼管為不顯示時,首先使用試測儀對電路進行測試,觀察是否存在漏焊,虛焊,或者元件損壞.(2)LED 數(shù)碼管顯示不正常,還有亮度不夠,首先使用試測儀對電路進行測試,觀察電路是否存在短路現(xiàn)象。查看燒寫的程序是否正確無誤,對程序進行認真修改。 (3).DS1302 與微處理器進行數(shù)據(jù)交換時,首先由微處理器

19、向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,則禁止寫DS1302,即寫保護;D6=0,指定時鐘數(shù)據(jù),D6=1,指定RAM 數(shù)據(jù);D5D1 指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入), D0=1,指定讀操作(輸出)。在DS1302 的時鐘日歷或RAM 進行數(shù)據(jù)傳送時,DS1302 必須首先發(fā)送命令字節(jié)。若進行單字節(jié)傳送,8 位命令字節(jié)傳送結(jié)束之后,在下2 個SCLK 周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8 個SCLK 周期的下降沿輸出數(shù)據(jù)字節(jié)。DS1302 與RAM 相關(guān)的寄存器分為兩類:一類是單個RAM 單元,共31 個,每個單元組

20、態(tài)為一個8 位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM 寄存器,在此方式下可一次性讀、寫所有的RAM 的31 個字節(jié)。要特別說明的是備用電源B1,可以用電池或者超級電容器(0.1F 以上)。雖然DS1302 在主電源掉電后的耗電很小,但是,如果要長時間保證時鐘正常,最好選用小型充電電池??梢杂美鲜诫娔X主板上的3.6V 充電電池。如果斷電時間較短(幾小時或幾天)時,就可以用漏電較小的普通電解電容器代替。100 F 就可以保證1 小時的正常走時。DS1302 在第一次加電后,必須進行初始化操作。初始化后就可以按正常方法調(diào)整時間。5.3 測試結(jié)論

21、經(jīng)過多次的反復測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設(shè)計能力與及對電路的分析能力.同時在軟件的編程方面得到更到的提高,對編程能力得到加強.同時對所學的知識得到很大的提高與鞏固六、心得體會在該部分實習中,我有幾點收獲: 1、 整合程序時,并非把各個模塊鏈接起來就行,往往需要把某些模塊拆開,重新嵌入整合程序中,方能實現(xiàn)它的功能,說明程序的調(diào)用和嵌套要靈活,不能生搬硬套。 2、 中斷的應(yīng)用。在程序中,T0和T1兩個定時器我均用到了,而源程序模塊都用T0,沒用T1,中斷優(yōu)先級一樣,所以在整合后,需要修改中斷優(yōu)先級,而我簡單的把兩個中斷優(yōu)先級定為1

22、和2,程序當然無法運行了,后來經(jīng)學長指導才明白,優(yōu)先級是有順序的,單片機共五個中斷源,都有自然的優(yōu)先級,不能隨便設(shè)置,后來將T1的優(yōu)先級改為3,程序可以執(zhí)行。 3、該部分實習,使我對軟件的設(shè)計有了進一步的認識,編寫程序也有跡可循,對單片機有了更深的理解,而且將C語言用到了單片機上,有了一次新的嘗試,以前學到的單片機的知識在實習中均得到了實踐,對我以后的從事相應(yīng)的工作奠定了一個基礎(chǔ)。參考文獻 1 李廣弟等 單片機基礎(chǔ) 北京航空航天出版社, 2007 2 樓然苗等 51 系列單片機設(shè)計實例 北京航空航天出版社, 2008 3 張毅剛.單片機原理及應(yīng)用.北京:高等教育出版社,200附錄一附

23、錄二程序如下:#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int#define Write_Protect 0x8e /寫保護#define OutPut P0 /顯示輸出 /sbit DU=P26; /數(shù)碼管段選/sbit WE=P27; /數(shù)碼管位選 sbit CE=P33; /復位端口定義在P0.2引腳sbit IO=P24; /數(shù)據(jù)輸出端定義在P0.4引腳sbit SCLK=P32; /時鐘輸出端口定義在P0.3引腳sbit key=P

24、34; /時間調(diào)節(jié)控制鍵sbit key1=P35; /每按一次位加一sbit key2=P36; /每按一次位減一sbit key3=P37; /顯示切換uchar code Wei=0xfe,0xfd,0xfb,0xf7,0xfd;/ 位選數(shù)據(jù)0xef,0xdf,0xbf,0x7fuchar code Duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /0-9共陰代碼 code uchar Waddr=0x8c,0x88,0x86,0x84,0x82,0x80,0x8a; /寄存器寫地址code uchar Raddr=0x8d

25、,0x89,0x87,0x85,0x83,0x81,0x8b; / 寄存器讀地址uchar timeset=0x01,0x02,0x03,0x04,0x05,0x00,0x01; /*設(shè)置初始時間*/uchar time_buf7; /*存讀到的時間*/uchar time_disp7;uchar dispdat5; /*存儲顯示值的*/uchar Btdis=0,k=0,z; bit btx,btx1,btx2,btx3,bt1,bt2,bt3; bit Btread;uint flag1; /*=函數(shù)功能:延時n 毫秒入口參數(shù):n=*/ void Write1302(uchar dat);

26、void delaynms(uchar n) uchar i,j; for(i=n;i>0;i-) for(j=125;j>0;j-);/*=函數(shù)功能:根據(jù)命令字,向1302寫一個字節(jié)數(shù)據(jù)入口參數(shù):Cmd,存儲命令字;dat,存儲待寫的數(shù)據(jù)=*/ void Ds1302_Write_Byte(unsigned char addr, unsigned char d) CE=0;_nop_(); SCLK=0; _nop_(); CE=1;_nop_(); Write1302(addr); Write1302(d); CE=0; _nop_(); IO=1; SCLK=1;/從DS13

27、02讀出一字節(jié)數(shù)據(jù)uchar Ds1302_Read_Byte(unsigned char addr) unsigned char i; unsigned char temp; CE=1; addr = addr | 0x01; for (i = 0; i < 8; i +) if (addr & 0x01) IO=1; else IO=0; SCLK=1; SCLK=0; addr = addr >> 1; /輸出數(shù)據(jù):temp for (i = 0; i < 8; i +) temp = temp >> 1; if (IO) temp |= 0x

28、80; else temp &= 0x7F; SCLK=1; SCLK=0; CE=0; /停止DS1302總線 return temp;/*=函數(shù)功能:向1302日歷時鐘芯片寫入一個字節(jié)的數(shù)據(jù)入口參數(shù):dat=*/void Write1302(uchar dat) uchar i; /SCLK=0; CE=1; for(i=0;i<8;i+) IO=dat&0x01; SCLK=0; SCLK=1; dat=dat>>1; /*=函數(shù)功能:根據(jù)命令字,從1302讀取一個字節(jié)的數(shù)據(jù)入口參數(shù):Cmd返回參數(shù):dat=*/uchar Readset1302(uch

29、ar Cmd) uchar dat; CE=0; SCLK=0; CE=1; Write1302(Cmd); SCLK=1; CE=0; return dat;void bcdpro(void) unsigned char i,tmp; for(i=0;i<7;i+) /BCD處理 tmp=timeseti/10; /timeset=0x01,0x02,0x03,0x04,0x05,0x06,0x01 time_bufi=timeseti%10; /time_buf7 time_bufi=time_bufi+tmp*16; /*= 向DS1302寫入時鐘數(shù)據(jù)=*/void Ds1302_

30、Write_Time(void) unsigned int i; uchar flag; flag=Readset1302(0x81); if(flag&0x80) /判斷時鐘芯片是否停止,為1時時鐘停止 /掉電保存bcdpro();for(i=0;i<7;i+) Ds1302_Write_Byte(Waddri,time_bufi); Ds1302_Write_Byte(0x8e,0x80); /打開寫保護 /*= 從DS1302讀出時鐘數(shù)據(jù)=*/void Ds1302_Read_Time(void) unsigned char i,tmp; for(i=0;i<7;i+

31、) time_bufi=Ds1302_Read_Byte(Raddri); for(i=0;i<7;i+) /BCD處理 tmp=time_bufi/16; time_bufi=time_bufi%16; time_dispi=time_bufi+tmp*10; /*= DS1302初始化=*/void Ds1302_Init(void) CE=0; /RST腳置低 SCLK=0; /SCK腳置低 Ds1302_Write_Byte(0x80,0x00); /*=函數(shù)名: 時分秒顯示子程序=函數(shù)功能:將從DS1302讀到的數(shù)據(jù)在8位共陰數(shù)碼管上顯示=返回參數(shù):=*/void displa

32、y() uchar i; if(Btdis=0) if(bt2=0) dispdat0=Duantime_disp3/10; /時 dispdat1=Duantime_disp3%10; else dispdat0=0x00; dispdat1=0x00; /dispdat2=0x40; /"-" if(bt3=0) dispdat2=Duantime_disp4/10; /分 dispdat3=Duantime_disp4%10; else dispdat2=0x00; dispdat3=0x00; /dispdat5=0x40; if(flag1<25) disp

33、dat4=0x80; else dispdat4=0x00; if(Btdis=3)dispdat0=Duantime_disp5/10; /秒 dispdat1=Duantime_disp5%10; dispdat2=0x40; dispdat3=0x40; if(Btdis=1) if(bt1=0) dispdat0=Duantime_disp0/10; /年 dispdat1=Duantime_disp0%10; else dispdat0=0x00; dispdat1=0x00; /dispdat2=0x40; /"-" if(bt2=0) dispdat2=Dua

34、ntime_disp1/10; /月 dispdat3=Duantime_disp1%10; else dispdat2=0x00; dispdat3=0x00; dispdat4=0x00; if(Btdis=2) /dispdat0=0x40; if(bt1=0) dispdat3=Duantime_disp6%10; /周 else dispdat3=0x00; dispdat2=0x40;if(bt3=0) dispdat0=Duantime_disp2/10; /日 dispdat1=Duantime_disp2%10; else dispdat0=0x00; dispdat1=0x

35、00; if(dispdat3=7) dispdat3=0x7f; if(Btdis=4) for(i=0;i<5;i+) OutPut=dispdati; P1=Weii; delaynms(1); OutPut=0x00; /*=函數(shù)名: 按鍵=函數(shù)功能:顯示模式,調(diào)時模式=返回參數(shù):=*/void zongshi(void)if(!key) if(btx=0) if(!key) btx=1; k+; else btx=0;void keyscan() display(); if(!key) if(btx=0) if(!key) btx=1; k+; /*= k=1時,調(diào)整年份,ke

36、y1為加,key2為減=*/ while(k=1) Btdis=1; display(); zongshi(); if(!key1) if(btx1=0) if(!key1) btx1=1; if(time_disp0<99) time_disp0+; else time_disp0=0; else btx1=0; if(!key2) if(btx2=0) if(!key2) btx2=1; if(time_disp0>0) time_disp0-; else time_disp0=99; else btx2=0; /*= k=2時,調(diào)整月份,key1為加,key2為減=*/ wh

37、ile(k=2) Btdis=1; display(); zongshi(); if(!key1) if(btx1=0) if(!key1) btx1=1; if(time_disp1<12) time_disp1+; if(time_disp1=2) if(time_disp0%4=0) if(time_disp2>29) time_disp2=29; else if(time_disp2>28) time_disp2=28; else time_disp1=1; else btx1=0; if(!key2) if(btx2=0) if(!key2) btx2=1; if(

38、time_disp1>1) time_disp1-; if(time_disp1=2) if(time_disp0%4=0) if(time_disp2>29) time_disp2=29; else if(time_disp2>28) time_disp2=28; else time_disp1=12; else btx2=0; /*= k=3時,調(diào)整天,key1為加,key2為減=*/ while(k=3) Btdis=2; display(); zongshi(); if(!key1) if(btx1=0) if(!key1) btx1=1; if(time_disp1

39、=2) if(time_disp0%4=0) if(time_disp2<29) time_disp2+; else time_disp2=1; else if(time_disp2<28) time_disp2+; else time_disp2=1; else if(time_disp1<8) if(time_disp1%2=0) /小于8月的月份除以2的余數(shù)為0則為小月 if(time_disp2<30) time_disp2+; else time_disp2=1; else if(time_disp1%2=1) /小于8月的月份除以2的余數(shù)為1則為大月 if(

40、time_disp2<31) time_disp2+; else time_disp2=1; else if(time_disp1>7) if(time_disp1%2=0) if(time_disp2<31) time_disp2+; else time_disp2=1; else if(time_disp1%2=1) if(time_disp2<30) time_disp2+; else time_disp2=1; else btx1=0; if(!key2) if(btx2=0) if(!key2) btx2=1; if(time_disp1=2) if(time_disp0%4=0) if(time_disp2>1) time_disp2-; else time_disp2=29; else if(time_disp2>1) time_disp2-; else time_disp2=28; else if(time_disp1

溫馨提示

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

評論

0/150

提交評論