版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1818XXXXX大學(xué)單片機(jī)系統(tǒng)綜合訓(xùn)練課程設(shè)計(jì)報(bào)告多功能電腦時(shí)鐘設(shè)計(jì)報(bào)告一、實(shí)訓(xùn)目的意義及任務(wù)要求1.1目的意義在如今,單片機(jī)的使用領(lǐng)域已十分廣泛,它在智能儀器儀表、實(shí)時(shí)工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等均有很廣泛的應(yīng)用。單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。單片機(jī)作為一門專業(yè)學(xué)科,對(duì)學(xué)生的要求也較高,要求對(duì)C語言有較好的掌握,還要與單片機(jī)的硬件工作原理相結(jié)合,也是理論與實(shí)踐相結(jié)合的一大體現(xiàn)。多功能電腦時(shí)鐘有效地檢驗(yàn)了單片機(jī)中對(duì)數(shù)碼管,蜂鳴器,LED燈的控制,同時(shí)提高了學(xué)生的工程系統(tǒng)設(shè)計(jì)能力。通過此次單片機(jī)系統(tǒng)綜合訓(xùn)練,不僅要讓學(xué)生認(rèn)
2、識(shí)了解它,而且增強(qiáng)學(xué)生學(xué)科積極性。2.2任務(wù)要求通過對(duì)硬件和軟件的設(shè)計(jì)要求設(shè)計(jì)的電腦時(shí)鐘完成以下功能:1.基本功能實(shí)時(shí)顯示當(dāng)前時(shí)間(4位數(shù)碼管顯示,2位顯示小時(shí),2位顯示分鐘,第2位小數(shù)點(diǎn)0.5秒亮,0.5秒滅)。能用一按鍵依次切換顯示年及月日。能修改當(dāng)前時(shí)鐘。具有秒表功能,顯示秒和百分秒。2. 擴(kuò)展功能單片機(jī)與PC機(jī)的通訊(可選);可設(shè)定初值的倒計(jì)時(shí)功能(可選)鬧鐘及報(bào)時(shí)功能(可選); 顯示星期(可選)。3. 設(shè)計(jì)參數(shù)顯示時(shí)間時(shí),4位數(shù)碼管顯示,2位顯示小時(shí),2位顯示分鐘,第2位小數(shù)點(diǎn)0.5秒亮,0.5秒滅;蜂鳴器報(bào)時(shí)時(shí)間以每生學(xué)號(hào)最末位確定。二.實(shí)習(xí)任務(wù)的方案2.1 任務(wù)進(jìn)度布置任務(wù)、分析
3、任務(wù)、學(xué)習(xí)單片機(jī)的C51功能程序設(shè)計(jì)(3天)方案設(shè)計(jì)、使用Protel設(shè)計(jì)和繪制硬件原理圖(1.5天)程序設(shè)計(jì)和調(diào)試(4.5天)設(shè)計(jì)驗(yàn)收、撰寫報(bào)告(1天)2.2 系統(tǒng)分析根據(jù)系統(tǒng)功能要求,可將系統(tǒng)組成結(jié)構(gòu)分成四大部分:DS1302時(shí)鐘芯片讀數(shù)據(jù)寫數(shù)據(jù)模塊;數(shù)碼管顯示模塊;按鍵設(shè)置調(diào)節(jié)時(shí)間模塊;秒表功能模塊。硬件電路接線圖如附錄一,本系統(tǒng)采用DS1302時(shí)鐘芯片,四位數(shù)碼管用來顯示年月日,星期,時(shí)分,以及秒和百分秒。其中年月日,時(shí)分秒和星期采用DS1302的數(shù)據(jù)顯示,秒表采用單片機(jī)定時(shí)中斷實(shí)現(xiàn)。本系統(tǒng)共用到四個(gè)按鍵,且均為獨(dú)立對(duì)地按鍵,分別用于顯示切換,修改切換,修改加一,修改減一,秒表啟動(dòng)暫停
4、和數(shù)據(jù)清零。2.3 器件選擇選用STC89C51芯片,頻率為11.0592MHz,由于系統(tǒng)要求顯示年月日小時(shí)和分鐘,采用四位LED數(shù)碼管顯示即可。按鍵是用來設(shè)置時(shí)間或鬧鐘時(shí)間或啟動(dòng)秒表等功能的,設(shè)置三個(gè)按鍵:顯示切換模式鍵(key3)、修改數(shù)據(jù)鍵(key0)、加一鍵(key1)、減一鍵(key2)。常見的LED顯示具有清晰明亮的特點(diǎn)。是顯示接口也是絕大多數(shù)單片機(jī)應(yīng)用系統(tǒng)必備的部件之一。發(fā)光二極管組成的顯示器是單片機(jī)應(yīng)用產(chǎn)品中最常用的廉價(jià)輸出設(shè)備。它由若干個(gè)發(fā)光二極管按一定的規(guī)律排列而成。當(dāng)某一個(gè)發(fā)光二極管導(dǎo)通時(shí),相應(yīng)的一個(gè)點(diǎn)或一筆畫被點(diǎn)亮,控制不同組合的二極管導(dǎo)通,就能顯出各種字符。常用的7段
5、顯示器的結(jié)構(gòu)如圖所示,發(fā)光二極管的陽極連在一起的稱為共陽極顯示器,陰極連在一起的成為共陰顯示器。1位顯示器由8個(gè)發(fā)光二極管組成,其中7個(gè)發(fā)光二極管ag控制7個(gè)筆畫的亮或暗,另一個(gè)控制一個(gè)小數(shù)點(diǎn)的亮和暗,這種筆畫的七段顯示器能顯示的字符較少,字符的形狀有些失真,但失控簡(jiǎn)單,使用方便。三、系統(tǒng)硬件設(shè)計(jì)3.1 單片機(jī)的最小系統(tǒng)單片機(jī)功能系統(tǒng)圖見附錄 1,。單片機(jī)最小系統(tǒng)由STC89C51單片機(jī)、復(fù)位電路、晶振電路組成。如圖3.1所示圖3.1 單片機(jī)最小系統(tǒng)圖 3.2 數(shù)碼管、獨(dú)立按鍵及DS1302時(shí)鐘芯片電路的設(shè)計(jì)在電子鐘的輸入部分,設(shè)置相應(yīng)的置數(shù)功能,通過外部設(shè)備的輸入,如按鍵,實(shí)現(xiàn)時(shí)間的切換。除
6、此之外,調(diào)整日期等時(shí)間也需要按鍵進(jìn)行輸入。在選用輸入端口時(shí),將P0引腳與按鍵相連進(jìn)行輸入。K1、K2、K3、K4分別表示設(shè)置切換鍵、數(shù)值加一鍵、數(shù)值減一、顯示月和日鍵。系統(tǒng)仿真電路圖系統(tǒng)仿真電路圖DS1302與單片機(jī)連線圖3.3 其他附屬電路設(shè)計(jì)按鍵設(shè)計(jì),電頻轉(zhuǎn)換芯片的硬件電路如下圖所示:RS232串口通信及電源電路等設(shè)計(jì),如圖3.3所示圖3.3 附屬電路設(shè)計(jì)圖四、軟件設(shè)計(jì)4.1 主程序設(shè)計(jì)使用定時(shí)器0來定時(shí),定時(shí)5ms,運(yùn)用定時(shí)器的中斷來實(shí)現(xiàn)這些功能,顯示是用的數(shù)碼管的動(dòng)態(tài)掃描,每5ms掃描一位數(shù)碼管,20ms循環(huán)一次。設(shè)置一些標(biāo)志位,實(shí)時(shí)時(shí)間顯示的標(biāo)志位,星期顯示的標(biāo)志位,鬧鈴時(shí)間顯示的標(biāo)
7、志位,秒表顯示的標(biāo)志位,在不同的模式下,我們要使該模式下的標(biāo)志位有效,從而進(jìn)行此模式的顯示,通過按鍵進(jìn)行不同的操作。每個(gè)標(biāo)志位有效時(shí),數(shù)碼管顯示的內(nèi)容就不一樣。鬧鐘的實(shí)現(xiàn)是用一個(gè)子函數(shù),每5ms調(diào)用一次函數(shù),并把北京時(shí)間與設(shè)定的鬧鈴時(shí)間比較,如果相等就使蜂鳴器有效。鬧鈴時(shí)間的長(zhǎng)短可以用一個(gè)變量對(duì)秒計(jì)數(shù),當(dāng)計(jì)數(shù)值小于我們?cè)O(shè)定的值時(shí),就是蜂鳴器有效,當(dāng)大于等于設(shè)定的值時(shí)就關(guān)閉蜂鳴器。整點(diǎn)報(bào)時(shí)或半點(diǎn)報(bào)時(shí)很好實(shí)現(xiàn),在中斷函數(shù)里,當(dāng)分鐘等于60時(shí),蜂鳴器對(duì)應(yīng)鳴叫相應(yīng)點(diǎn)數(shù),并且小時(shí)要自增1,當(dāng)分鐘等于30時(shí),蜂鳴器鳴一次,分鐘自增1,要使蜂鳴器有效,可用一個(gè)變量對(duì)秒計(jì)數(shù),當(dāng)秒等于我們?cè)O(shè)定的值時(shí),就關(guān)閉蜂鳴
8、器。4.2 系統(tǒng)操作功能設(shè)計(jì)根據(jù)系統(tǒng)功能描述,可以分為:北京時(shí)間功能、整點(diǎn)報(bào)時(shí)、鬧鈴功能、日期顯示及秒表功能功能。我們通過對(duì)K_Mode鍵按下的次數(shù)計(jì)數(shù),用Mode計(jì)數(shù),Mode的次數(shù)就代表了不同的模式,每個(gè)模式都有與之相對(duì)應(yīng)的指示燈,每個(gè)模式的功能如下:Mode 0:按鍵每按下時(shí)顯示北京時(shí)間模式,此時(shí),四個(gè)指示燈全滅,顯示格式為:小時(shí).分鐘(如:07.35,為7點(diǎn)35分),按K_UP或者K_DN鍵對(duì)系統(tǒng)沒影響,每到整點(diǎn)或半點(diǎn)時(shí)時(shí),要進(jìn)行相應(yīng)點(diǎn)數(shù)的間隔蜂鳴報(bào)時(shí)(半點(diǎn)短鳴一次)。Mode 1:按鍵按下一次時(shí),進(jìn)入修改北京時(shí)間的小時(shí)模式,四個(gè)指示燈依次為“亮滅滅滅”,按K_UP或者K_DN鍵對(duì)小時(shí)
9、進(jìn)行修改。Mode 2:按鍵按下兩次時(shí),進(jìn)入修改北京時(shí)間的分鐘模式,四個(gè)指示燈依次為“滅亮滅滅”,按K_UP或者K_DN鍵對(duì)分鐘進(jìn)行修改。Mode 3:按鍵按下三次時(shí),進(jìn)入修改鬧鈴時(shí)間的小時(shí)模式,四個(gè)指示燈依次為“滅滅亮滅”,按K_UP或者K_DN鍵對(duì)鬧鈴小時(shí)進(jìn)行修改。Mode 4:按鍵按下四次時(shí),進(jìn)入修改鬧鈴時(shí)間的分鐘模式,四個(gè)指示燈依次為滅滅滅亮,按K_UP或者K_DN鍵對(duì)鬧鈴分鐘進(jìn)行修改。Mode 5:按鍵按下五次時(shí),進(jìn)入年顯示模式,四個(gè)指示燈依次為“亮亮滅滅”,顯示格式為:四位年(如20.12為當(dāng)前年份為公元2012年),在此種模式下,按K_UP或者K_DN鍵對(duì)系統(tǒng)沒影響。Mode 6
10、:按鍵按下六次時(shí),進(jìn)入月日顯示模式,四個(gè)指示燈依次為“亮滅亮滅”,顯示格式為:月日(如07.05為當(dāng)前日期為7月5日),在此種模式下,按K_UP或者K_DN鍵對(duì)系統(tǒng)沒影響。Mode 7:按鍵按下七次時(shí),進(jìn)入秒表模式,四個(gè)指示燈依次為“亮滅滅亮”,顯示格式為:秒百分秒(如05.90為當(dāng)前秒表計(jì)時(shí)到5秒900毫秒),在此種模式下,K_UP鍵設(shè)為用來啟動(dòng)/暫停秒表、K_DN鍵設(shè)為用來對(duì)秒表進(jìn)行清零。Mode 8:按鍵按下八次時(shí),進(jìn)入鬧鐘選擇模式,四個(gè)指示燈依次為“亮亮亮滅”,顯示格式為:CL01/00,"CL.00"表示貪睡鬧鈴功能關(guān)閉,"CL.01"表示貪睡
11、鬧鈴功能開啟,按UP或DN鍵可在00或01間循環(huán)選擇;在貪睡鬧鈴功能關(guān)閉時(shí),可按任意鍵停止當(dāng)前鬧鐘,或不按鍵,則鬧鐘1分鐘,以后再不響。在貪睡鬧鈴功能開啟時(shí),如按下除UP鍵外的任意鍵,停止當(dāng)前鬧鐘,如不按鍵,則鬧鐘1分鐘;當(dāng)過5分鐘后,鬧鐘又會(huì)重新響起,如此循環(huán),只有按下UP鍵時(shí),才能停止鬧鐘以后再不響。在此種模式下,K_UP鍵設(shè)為用來啟動(dòng)/暫停秒表、K_DN鍵設(shè)為用來對(duì)秒表進(jìn)行清零。Mode 9:按鍵按下九次時(shí),進(jìn)入整點(diǎn)報(bào)時(shí)選擇模式,四個(gè)指示燈依次為“亮亮亮亮”,顯示格式為:BS01/00,"BS.00"表示整點(diǎn)報(bào)時(shí)功能關(guān)閉,01表示報(bào)時(shí)功能開啟,按UP或DN鍵可在00或
12、01間循環(huán)選擇。4.3主程序void main()圖4.1 主程序功能流程圖4.4主程序設(shè)計(jì)主程序采用定時(shí)器0對(duì)程序進(jìn)行掃描執(zhí)行。分別執(zhí)行DS1302芯片初始化子程序,寫數(shù)據(jù)子程序,將最初的值寫入芯片中,采用while循環(huán)循環(huán)執(zhí)行鍵盤掃描子程序。main() TMOD=0x01; /使用模式1,16位定時(shí)器 TH0=(65536-10000)/256; /給定初值 TL0=(65536-10000)%256; EA=1; /總中斷打開 ET0=1; /定時(shí)器中斷打開 TR0=1; /定時(shí)器開關(guān)打開Ds1302_Init(); Ds1302_Write_Time();while(1) keysc
13、an(); if(Btread=0) Btread=1; Ds1302_Read_Time(); display(); 4.5 DS1302子程序設(shè)計(jì)此子程序分為初始化程序,讀數(shù)據(jù)程序,寫數(shù)據(jù)程序,一些數(shù)據(jù)程序?yàn)槔?;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時(shí)間調(diào)整子程序時(shí)間調(diào)整子程序采用的是對(duì)key1
14、按的次數(shù)不同來進(jìn)行對(duì)年月日時(shí)分及星期的設(shè)置。void zongshi(void)if(!key) if(btx=0) if(!key) btx=1;k+; elsebtx=0; k=1時(shí),調(diào)整年份,key1為加,key2為減void keyscan() k=2時(shí),調(diào)整月份,key1為加,key2為減 k=3時(shí),調(diào)整日份,key1為加,key2為減 display(); k=4時(shí),調(diào)整星期,key1為加,key2為減 if(!key) if(btx=0) if(!key) btx=1; k+; 4.7 按鍵切換子程序void tiaoshidisplay() if(z=15) z=0; swit
15、ch(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; /時(shí) case 6:bt3=bt3;bt2=0;break; /分 default:bt3=0;break; 五、調(diào)試及性能分析5.1軟件測(cè)試電子成年歷是多功能的數(shù)字型,可以看當(dāng)前日期(陰、陽歷),時(shí)間,還有溫度的儀器。電子成年歷功能很多,所以對(duì)于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了
16、相對(duì)較多的問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過程中主要遇到的問題如下:1. 時(shí)鐘不準(zhǔn),走一段時(shí)間后誤差較大 原因:該問題主要是晶振芯片的頻率不真確引起的。晶振的頻率理論值為12MHZ,由于存在誤差,導(dǎo)致了單片機(jī)時(shí)間走一段時(shí)間后便出現(xiàn)了誤差。2燒入程序后,LED數(shù)碼管顯示閃動(dòng),而且亮度不均勻。解決:首先對(duì)調(diào)用的延時(shí)進(jìn)行逐漸修改,可以解決顯示閃動(dòng)問題。其次,由于本作品使作動(dòng)態(tài)掃描方式顯示的數(shù)字,動(dòng)態(tài)掃描很快,人的肉眼是無法看出,但是調(diào)用的顯示程序時(shí),如果不在反回時(shí)屏蔽掉最后的附值,則會(huì)出現(xiàn)很亮的現(xiàn)象,所以在顯示的后面加了屏蔽子令,最后解決了此問題。3
17、修改時(shí)間、日期時(shí)沒有農(nóng)歷沒有自動(dòng)對(duì)應(yīng)上。解決:把不相關(guān)的程序暫時(shí)屏蔽,地農(nóng)歷的子程序獨(dú)立調(diào)試,發(fā)現(xiàn)在調(diào)用農(nóng)歷自動(dòng)更新時(shí),對(duì)十進(jìn)制和十六進(jìn)制處理不好,所以會(huì)造成錯(cuò)亂。最后把相應(yīng)的十進(jìn)制進(jìn)行修改,使得可以與十六進(jìn)制對(duì)應(yīng),最后解決了此問題.5.2測(cè)試結(jié)果分析與結(jié)論(1)在測(cè)試中遇到發(fā)光二極管、LED數(shù)碼管為不顯示時(shí),首先使用試測(cè)儀對(duì)電路進(jìn)行測(cè)試,觀察是否存在漏焊,虛焊,或者元件損壞.(2)LED 數(shù)碼管顯示不正常,還有亮度不夠,首先使用試測(cè)儀對(duì)電路進(jìn)行測(cè)試,觀察電路是否存在短路現(xiàn)象。查看燒寫的程序是否正確無誤,對(duì)程序進(jìn)行認(rèn)真修改。 (3).DS1302 與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路
18、發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6=0,指定時(shí)鐘數(shù)據(jù),D6=1,指定RAM 數(shù)據(jù);D5D1 指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入), D0=1,指定讀操作(輸出)。在DS1302 的時(shí)鐘日歷或RAM 進(jìn)行數(shù)據(jù)傳送時(shí),DS1302 必須首先發(fā)送命令字節(jié)。若進(jìn)行單字節(jié)傳送,8 位命令字節(jié)傳送結(jié)束之后,在下2 個(gè)SCLK 周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8 個(gè)SCLK 周期的下降沿輸出數(shù)據(jù)字節(jié)。DS1302 與RAM 相關(guān)的寄存器分為兩類:一類是單個(gè)RAM 單元,共31 個(gè),每個(gè)單元組態(tài)為一
19、個(gè)8 位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM 寄存器,在此方式下可一次性讀、寫所有的RAM 的31 個(gè)字節(jié)。要特別說明的是備用電源B1,可以用電池或者超級(jí)電容器(0.1F 以上)。雖然DS1302 在主電源掉電后的耗電很小,但是,如果要長(zhǎng)時(shí)間保證時(shí)鐘正常,最好選用小型充電電池??梢杂美鲜诫娔X主板上的3.6V 充電電池。如果斷電時(shí)間較短(幾小時(shí)或幾天)時(shí),就可以用漏電較小的普通電解電容器代替。100 F 就可以保證1 小時(shí)的正常走時(shí)。DS1302 在第一次加電后,必須進(jìn)行初始化操作。初始化后就可以按正常方法調(diào)整時(shí)間。5.3 測(cè)試結(jié)論經(jīng)過多
20、次的反復(fù)測(cè)試與分析,可以對(duì)電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與及對(duì)電路的分析能力.同時(shí)在軟件的編程方面得到更到的提高,對(duì)編程能力得到加強(qiáng).同時(shí)對(duì)所學(xué)的知識(shí)得到很大的提高與鞏固六、心得體會(huì)在該部分實(shí)習(xí)中,我有幾點(diǎn)收獲: 1、 整合程序時(shí),并非把各個(gè)模塊鏈接起來就行,往往需要把某些模塊拆開,重新嵌入整合程序中,方能實(shí)現(xiàn)它的功能,說明程序的調(diào)用和嵌套要靈活,不能生搬硬套。 2、 中斷的應(yīng)用。在程序中,T0和T1兩個(gè)定時(shí)器我均用到了,而源程序模塊都用T0,沒用T1,中斷優(yōu)先級(jí)一樣,所以在整合后,需要修改中斷優(yōu)先級(jí),而我簡(jiǎn)單的把兩個(gè)中斷優(yōu)先級(jí)定為1和2,
21、程序當(dāng)然無法運(yùn)行了,后來經(jīng)學(xué)長(zhǎng)指導(dǎo)才明白,優(yōu)先級(jí)是有順序的,單片機(jī)共五個(gè)中斷源,都有自然的優(yōu)先級(jí),不能隨便設(shè)置,后來將T1的優(yōu)先級(jí)改為3,程序可以執(zhí)行。 3、該部分實(shí)習(xí),使我對(duì)軟件的設(shè)計(jì)有了進(jìn)一步的認(rèn)識(shí),編寫程序也有跡可循,對(duì)單片機(jī)有了更深的理解,而且將C語言用到了單片機(jī)上,有了一次新的嘗試,以前學(xué)到的單片機(jī)的知識(shí)在實(shí)習(xí)中均得到了實(shí)踐,對(duì)我以后的從事相應(yīng)的工作奠定了一個(gè)基礎(chǔ)。參考文獻(xiàn) 1 李廣弟等 單片機(jī)基礎(chǔ) 北京航空航天出版社, 2007 2 樓然苗等 51 系列單片機(jī)設(shè)計(jì)實(shí)例 北京航空航天出版社, 2008 3 張毅剛.單片機(jī)原理及應(yīng)用.北京:高等教育出版社,200附錄一附錄二程
22、序如下:#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int#define Write_Protect 0x8e /寫保護(hù)#define OutPut P0 /顯示輸出 /sbit DU=P26; /數(shù)碼管段選/sbit WE=P27; /數(shù)碼管位選 sbit CE=P33; /復(fù)位端口定義在P0.2引腳sbit IO=P24; /數(shù)據(jù)輸出端定義在P0.4引腳sbit SCLK=P32; /時(shí)鐘輸出端口定義在P0.3引腳sbit key=P34;
23、 /時(shí)間調(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,0x
24、89,0x87,0x85,0x83,0x81,0x8b; / 寄存器讀地址uchar timeset=0x01,0x02,0x03,0x04,0x05,0x00,0x01; /*設(shè)置初始時(shí)間*/uchar time_buf7; /*存讀到的時(shí)間*/uchar time_disp7;uchar dispdat5; /*存儲(chǔ)顯示值的*/uchar Btdis=0,k=0,z; bit btx,btx1,btx2,btx3,bt1,bt2,bt3; bit Btread;uint flag1; /*=函數(shù)功能:延時(shí)n 毫秒入口參數(shù):n=*/ void Write1302(uchar dat);voi
25、d delaynms(uchar n) uchar i,j; for(i=n;i>0;i-) for(j=125;j>0;j-);/*=函數(shù)功能:根據(jù)命令字,向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd,存儲(chǔ)命令字;dat,存儲(chǔ)待寫的數(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;/從DS1302讀
26、出一字節(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 |= 0x80;
27、 else temp &= 0x7F; SCLK=1; SCLK=0; CE=0; /停止DS1302總線 return temp;/*=函數(shù)功能:向1302日歷時(shí)鐘芯片寫入一個(gè)字節(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讀取一個(gè)字節(jié)的數(shù)據(jù)入口參數(shù):Cmd返回參數(shù):dat=*/uchar Readset1302(uchar
28、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í)鐘數(shù)據(jù)=*/void Ds1302_Wri
29、te_Time(void) unsigned int i; uchar flag; flag=Readset1302(0x81); if(flag&0x80) /判斷時(shí)鐘芯片是否停止,為1時(shí)時(shí)鐘停止 /掉電保存bcdpro();for(i=0;i<7;i+) Ds1302_Write_Byte(Waddri,time_bufi); Ds1302_Write_Byte(0x8e,0x80); /打開寫保護(hù) /*= 從DS1302讀出時(shí)鐘數(shù)據(jù)=*/void Ds1302_Read_Time(void) unsigned char i,tmp; for(i=0;i<7;i+) t
30、ime_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í)分秒顯示子程序=函數(shù)功能:將從DS1302讀到的數(shù)據(jù)在8位共陰數(shù)碼管上顯示=返回參數(shù):=*/void display()
31、 uchar i; if(Btdis=0) if(bt2=0) dispdat0=Duantime_disp3/10; /時(shí) 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) dispdat
32、4=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=Duanti
33、me_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=0x00;
34、 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í)模式=返回參數(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時(shí),調(diào)整年份,key1為
35、加,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時(shí),調(diào)整月份,key1為加,key2為減=*/ while
36、(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(tim
37、e_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時(shí),調(diào)整天,key1為加,key2為減=*/ while(k=3) Btdis=2; display(); zongshi(); if(!key1) if(btx1=0) if(!key1) btx1=1; if(time_disp1=2)
38、 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(tim
39、e_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_di
40、sp0%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<8) if(time_disp1%2=0) if(time_disp2>1) time_disp2-; else time_disp2=30; else if(time_disp1%2=1) if(time_disp2>1) time_disp2-;else time_disp2=31; else if(time_disp1>7) if(time_disp1%
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版租賃合同(含使用權(quán)轉(zhuǎn)讓)3篇
- 2024擔(dān)保合同格式模板范文
- 二零二五年度加油站監(jiān)控系統(tǒng)升級(jí)裝修裝飾合同3篇
- 二零二五年度制造業(yè)實(shí)習(xí)生實(shí)習(xí)協(xié)議書3篇
- 影視劇臨時(shí)演員聘用合同(2025年)
- 2025版新能源電站勘察設(shè)計(jì)勞務(wù)分包合同3篇
- 2025年中國中藥材電子商務(wù)行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 2024-2026年中國摩擦材料行業(yè)市場(chǎng)供需格局及投資規(guī)劃建議報(bào)告
- 2024版頂崗實(shí)習(xí)協(xié)議書
- 2025年中國視力保健用品行業(yè)市場(chǎng)深度分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 湖南省長(zhǎng)沙市中學(xué)雅培粹學(xué)校2025屆七年級(jí)數(shù)學(xué)第一學(xué)期期末調(diào)研模擬試題含解析
- 江蘇省淮安市2023-2024學(xué)年七年級(jí)上學(xué)期期末生物試題【含答案解析】
- 股權(quán)質(zhì)押登記授權(quán)委托書
- 混凝土采購運(yùn)輸組織供應(yīng)、運(yùn)輸、售后服務(wù)方案
- DZ∕T 0399-2022 礦山資源儲(chǔ)量管理規(guī)范(正式版)
- 光刻技術(shù)員工作總結(jié)
- 2024糖尿病酮癥酸中毒診斷和治療課件
- MOOC 組織學(xué)與胚胎學(xué)-華中科技大學(xué) 中國大學(xué)慕課答案
- 審計(jì)職業(yè)生涯規(guī)劃書
- 新媒體部門崗位配置人員架構(gòu)圖
評(píng)論
0/150
提交評(píng)論