單片機課程設計總結報告電子萬年歷的設計與制作_第1頁
單片機課程設計總結報告電子萬年歷的設計與制作_第2頁
單片機課程設計總結報告電子萬年歷的設計與制作_第3頁
單片機課程設計總結報告電子萬年歷的設計與制作_第4頁
單片機課程設計總結報告電子萬年歷的設計與制作_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機課程設計總結報告題 目:電子萬年歷的設計與制作專 業(yè):班 級:姓 名:指導教師:二 00 七 年 三 月 十日一、設計目的及意義(1)在學習了數(shù)字電子技術和單片機原理及接口技術課程后,為了加深對理論知識的理解,學習理論知識在實際中的運用,培養(yǎng)動手能力和解決實際問題的經(jīng)驗讓學生接觸專用時鐘芯片ds1302,并會用ds1302芯片開發(fā)時鐘模塊,應用到其他系統(tǒng)中去。熟悉wave軟件調試程序和仿真.(2)、通過實驗提高對單片機的認識;(3)通過實驗提高焊接、布局、電路檢查能力;(4)、通過實驗提高軟件調試能力;(5) 進一步熟悉和掌握單片機的結構及工作原理。(6) 通過課程設計,掌握以單片機核心

2、的電路設計的基本方法和技術,了解表關電路參數(shù)的計算方法。(7)通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。(8) 通過完成一個包括電路設計和程序開發(fā)的完整過程,使學生了解開發(fā)一單片機應用系統(tǒng)的全過程,為今后從事相應打下基礎。二、設計內容要求電子萬年歷能顯示陽歷年、月、日、星期、小時、分、秒和陰歷月、日,在顯示陰歷時間時能標明是否為閏年。三、方案選擇與實驗基本原理。按照系統(tǒng)設計功能的要求,初步確定設計系統(tǒng)由主控模塊、時鐘模塊、顯示模塊、鍵盤接口模塊共4個模塊組成,電路系統(tǒng)構成框圖如圖l1所示。主控芯片使用51系列at89c52單片機,時鐘芯片使用美國dallas公司推出的一種高

3、性能、低功耗、帶ram的實時時鐘dsl302。采用dsl 302作為主要計時芯片,可以做到計時準確。更重要的是,dsl302可以在很小電流的后備電源(2555v電源,在25v時耗電小于300 na)下繼續(xù)計時,并可編程選擇多種充電電流來對后備電源進行慢速充電,可以保證后備電源基本不耗電。 顯示模塊采用普通的共陽led數(shù)碼管,鍵輸入采用查詢法實現(xiàn)調整功能。 圖1 電子萬年歷電路系統(tǒng)構成框圖系統(tǒng)硬件電路的設計圖2為電子萬年歷電路設計原理圖,系統(tǒng)由主控制器at89c52、時鐘芯片dsl302、串口顯示電路及鍵掃描電路組成。 圖2電子萬年歷電路設計原理圖3.3.1 主控制器at89c52 atmel公

4、司生產(chǎn)的at89c52單片機采用高性能的靜態(tài)80c51設計,由先進工藝制造,并帶有非易失性f1ash程序存儲器。它是一種高性能、低功耗的8位cmos微處理芯片,市場應用最多。主要性能特點有: 8kh f1ash rom,可以擦除1000次以上,數(shù)據(jù)保存10年256字節(jié)內部ram。電源控制模式 時鐘可停止和恢復 空閑模式; 掉電模式。6個中斷源。4個中斷優(yōu)先級。4個8位io口。全雙工增強型uart。3個16位定時計數(shù)器,to、t1(標準80c51)和增加的t2(捕獲和比較)。全靜態(tài)工作方式:0-24mh z。3.32 時鐘電路dsl302 1ds1302的性能特性 實時時鐘,可對秒、分、時、日、

5、周、月以及帶閏年補償?shù)哪赀M行計數(shù); 用于高速數(shù)據(jù)暫存的318位ram; 最少引腳的串行io; 2555v電壓工作范圍; 25v時耗電小于300 na; 用于時鐘或ram數(shù)據(jù)讀寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式; 簡單的3線接口; 可選的慢速充電(至vcc1)的能力。 d51302時鐘芯片包括實時時鐘日歷和3l字節(jié)的靜態(tài)ram。它經(jīng)過一個簡單的串行接口與微處理器通信。實時時鐘 日歷提供秒、分、時、日、周、月和年等信息。對于小于31天的月利月末的日期自動進行調整,還包括閏年校正的功能。時鐘的運行可以采用24h或帶am(上午)pm(下午)的12h格式。采用三線接口與cpu進行同步通信,并可采

6、用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。dsl302有主電源后備電源雙電源引腳:vcc1在單電源與電他供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;vcc2在雙電源系統(tǒng)中提供主電源,在這種運用方式中,vcc1連接到備份電,以便在沒有主電源的情況下能保存時間信息以及數(shù)據(jù)。ds1302由vcc1或vcc2中較大者供電。當vcc2大于vcc1十o2v時,vcc2v給dsl302供電;當vcc2小于vcc1時,dsl302由vcc1供電。 2dsl302數(shù)據(jù)操作原理 dsl 302在任何數(shù)據(jù)傳送時必須先初始化,把rst腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在sclk的上升

7、沿被輸入。無論是讀周期還是寫周期,開始8位指定40個寄存器中哪個將被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫人數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達248字節(jié)數(shù)。 如果在傳送過程中置rst腳為低電平,則會終止本次數(shù)據(jù)傳送,并且i()引腳變?yōu)楦咦钁B(tài)。上電運行時,在 vcc2.5 v之前 ,rst腳必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。d引302的引腳及內部結構圖如圖33所示,表31為各引腳的功能圖3 ds1302引腳及內部結構 表1 ds102引腳功能 dsl30

8、2的控制字如圖34所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1;如果它為0,則不能把數(shù)據(jù)寫入到dsl302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1表示存取ram數(shù)據(jù)。位51(a4一a0)指示操作單元的地址。最低有效位(位0)如為0,表示要進行寫操作;為1表示進行讀操作??刂谱止?jié)總是從最低位開始輸入輸出。 為了提高對32個地址的尋址能力(地址命令位15邏輯1),可以把時鐘日歷或ram寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或ram,而位0規(guī)定讀或寫。在時鐘日歷寄存器中的地址931或ram寄存器中的地址31不能存儲數(shù)據(jù)。在多字節(jié)方式中,讀或寫從地址0的位0開始。必須按數(shù)據(jù)傳送的次

9、序寫最先的8個寄存器。但是,當以多字節(jié)方式寫ram時,為了傳送數(shù)據(jù)不必寫所有31字節(jié)。小管是否寫了全部31字節(jié),所寫的每一字節(jié)都將傳送至ram。 圖4 ds1302的控制字 圖5 ds1302數(shù)據(jù)讀/寫時序 dsl302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為bcd碼形式。其h歷、時間寄存器及其控制字見表32,其中奇數(shù)為讀操作,偶數(shù)為寫操作。 時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當它為1時,ds1302停止振蕩,進入低功耗的備份方式.通常在對dsl302進行寫操作時(如進入時鐘調整程序),停止振蕩。當它為0時,時鐘將開始啟動。 ampm1224小時方式:小時寄存

10、器的位7定義為12或24小時方式選擇位。它為高電平時,選擇12小時方式。在此方式下,位5是ampm位,此位是高電平時表示pm,低電平表示am。在24小時方式下,位5為第二個10小時位(20一23h)。 表2 內部寄存器地址和內容 dsl302的品振選用32768kh z,電容推薦值為6pf,因為振蕩頻率較低,也可以不接電容對計時精度影響不大。333 顯示電路的設計 顯示部分采用普通的共陽數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電路??紤]到一次掃描19位數(shù)的管顯示時會出現(xiàn)閃爍情況,設計時19個數(shù)碼管分3排同時掃描。第一排6個數(shù)碼管分別為千年、百年、十午、年、十月、月,第二排6位數(shù)碼管分別為十時、時、

11、十分、分、十秒、秒,第三排7位數(shù)碼管分別為星期、陰歷十月、陰歷月、陰歷十日、陰歷日、十日、日。顯示時采用串行口輸出段碼,用3片74ls164來驅動3排數(shù)碼管,這樣掃描一次只需7ms。 741ls164內部為8個d觸發(fā)器,用以實現(xiàn)數(shù)據(jù)的串行移位,741ls164特性見表3。單片機以串行口方式0移仿寄存器方式)輸山數(shù)據(jù),3片74lsl64作為3排共陽數(shù)碼管的串并轉換顯示接口。 74ls164為ttl單向8位移位寄存器,可實現(xiàn)串行輸入,并行輸出。其中a、b(第1、2腳)為串行數(shù)據(jù)輸入端,2個引腳按邏輯“與”運算規(guī)律輸入信號,共一個輸入信號時可并接,共同作為輸入腳。cp(第8腳)為時鐘輸入端,可連接到

12、串行口的txd端。每一個時鐘信號的上升沿加到cp端時,移位寄存器移一位。8個時鐘脈沖過后,8位二進制數(shù)全部移入74lsl 64中。mr腳(第9腳)為復位端,當該腳為低電平時,移位寄存器各位復0;只有當它為高電平時,時鐘脈沖才起作用。q1一q8(第36和10一13引腳)并行輸出端分別接數(shù)碼管的ha(因為串行n從低位開始傳送)各段對應的引腳上。在給出了8個脈沖后,最先進入741。s164的第1個字ll數(shù)據(jù)到達廠最高位。再來1個脈沖,第1個脈沖就會從最高位移出,進入下個74l5164的第1位。3片741s164首尾相串,而時鐘端則接在一起。這樣,當輸入8個脈沖時,從9片機rxd端輸出的第1字節(jié)數(shù)據(jù)就

13、進入了第1片74lsl64中,而當?shù)?個8個脈沖到來后,第l字節(jié)數(shù)據(jù)就進入了第2片74lsl64,而隨后的第2字節(jié)的數(shù)據(jù)則進入了第1片74ls164。這樣,當?shù)?個8個脈沖完成后,首次送出的數(shù)據(jù)被送到了最下面的164(第3片)中,其它數(shù)據(jù)依次出現(xiàn)在第二和第一片74ls164中,實現(xiàn)了數(shù)據(jù)在74ls164中的串行輸入、并行輸出。表3 74ls164特性表 在方式0狀態(tài)下,串行口為同步移位寄存器方式,其波特率是固定的,為fosc12。數(shù)據(jù)由rxd(p3.0)端輸入或輸出,同步移位脈沖由txd(p3.1)端輸出。發(fā)送、接收數(shù)據(jù)時低位在先。所以,根據(jù)本小節(jié)下面提供的硬件電路圖,在編寫程序時,查共陽數(shù)碼

14、管的段碼的二進制數(shù)據(jù)應該將正常的共陽數(shù)碼管0一9的二進制值按位反序排序,如原來的二進制為11000000(c0h),要改為00000011(03h),就能使數(shù)碼管正常顯示。3.3.4 鍵盤接口的設計由于按鍵只有3個,用普通按鈕接10kw上拉電阻,用查詢法完成讀鍵功能。3.4系統(tǒng)程序的設計 因為使用了時鐘芯片dsl302,陽歷程序只需從dsl302各寄存器中讀出年、周、月、日、小時、分、秒等數(shù)據(jù),再處理即可。在首次對dsl302進行操作之前,必須對它進行初始化,然后從dsl302中讀出數(shù)據(jù),再經(jīng)過處理后,送給顯示緩沖單元。陽歷程序流程圖見圖36所示。圖6 陽歷程序流程圖342 時間調整程序設計

15、調整時間用2個調整按鈕,1個作為移位、控制用,另外1個作為加和減用,分別定義為控制按鈕、加按鈕。在調整時間過程中,要調整的位與別的位應該有區(qū)別,所以增加了閃爍功能,即調整的位一直在閃爍,直到調整下一位。閃爍原理就是,讓要調整的一位每隔一定時間熄滅一次,比如說50 m s。利用定時器計時,當達到50 ms溢出時,就送給該位熄滅符,在下一次溢出時。再送正常顯示的值,不斷交替,直到調整該位結束。此時送正常顯示值給該位,再進人下一位調整閃爍程序。時間調整程序程序流程圖如圖37所示。343 陰歷程序設計 陰歷程序的實現(xiàn)是要靠陽歷日期來推算的。要根據(jù)陽歷來推算陰歷日期,首先要設計算法。推算方法是,根據(jù)陽歷

16、當前日期在一年中的天數(shù)來計算陰歷日期。陽歷一個月不是30天就是3l天(2月除外,閏年2月為29天,平年2月為28天)。陰歷一年有12個月或13個月(含閏月),一個月為30天或29天。如果把一個只有29天的月稱為小月,用1為標志,把30天的月稱為大月,用0為標志,那么12位二進制就能表示一年12個月的大小。如果有閏月,則把閏月的月份作為“一個字節(jié)的高4位,低4位表示閏月大小,大月為0,小月為1這樣一個字節(jié)就包含了所有閏月的信息。陰歷春節(jié)和陽歷元旦相差的天數(shù)也用一個字節(jié)表示??偣灿?字節(jié)就可以存儲一年中任何一天陽歷和陰歷的對應關系的有關數(shù)據(jù),例如2004年的陰歷和陽歷對應關系如表34所列。 圖7

17、時間調整程序流程圖表4 2004年的陰歷和陽歷關系表 2004年的春節(jié)和元旦差20天,這樣2004年的信息表示為:21,42h,52h,21h。其中表示12個月大小信息的字,第4位和第7位不用。第1個字節(jié)為十進制,其它的都為十六進制。按此方法,50年的陽歷和陰歷對應關系表總共使用200字節(jié)。 有了算法和數(shù)據(jù)以后,就可設計軟件了。先要根據(jù)當前陽歷的日期,算出陽歷為該年中的第幾天。圖 3.8為計算陽歷中任何一天在該年中為第幾天的程序流程圖。 計算出當前陽歷日期為該年中的第幾天后,再減去陽歷該年春節(jié)和元旦的日差,如果夠減則相減的結果就是陰歷在該年的總第幾天了。根據(jù)該數(shù)據(jù)就可以推算出具體的當前陰歷日期

18、;如果不夠減,則表示當?shù)年帤v年為陽歷年的前一年。這種情況下,根據(jù)實際、當前陰歷日期會處十陰歷11月或12月,此時春節(jié)和元旦的日差減去前面計算出的當前陽歷日期在陽歷年為第幾天的數(shù)據(jù)其結果表示當?shù)年帤v日期離春節(jié)的天數(shù)。計算出的陽歷天數(shù)為該年的第幾天,存放在寄存器只2和只3中。計算出天數(shù)后,如果大于ffh,則把#ffh存放在r2中,余值存放在r3中。也就是說在用寄存器r2和r3表示的天數(shù)信息中r2充當主寄存器,數(shù)據(jù)先存滿r2,再存r3。整個轉換程序中,這里面的數(shù)據(jù)不能被覆蓋。 計算出陽歷總天數(shù)后,就可以根據(jù)它來推算陰歷日期。推算方法是,先用總天數(shù)減去春節(jié)相元旦的日差,如果結果為1,則該天正好是春節(jié)(

19、因為春節(jié)在元旦之后,在計算春節(jié)和幾旦的日差0時,假設元旦為0天,春節(jié)為m天,則日差為m。而前面計算的陽歷總天數(shù)是該天在該年中的第幾天,是以元旦為1而得到的,與計算春節(jié)和元旦日差的這種方法相比,其數(shù)值少了1所以要在原來本應該以0作為該天就是春節(jié)的依據(jù)的基礎上加1,所以以1作為該天是春節(jié)的標志);如果結果小于1,則陰歷應該是陽歷的前一年;如果結果大于1,說明陽歷和陰歷為同一年。再根據(jù)查表所得的該年的陰歷的閏月和大小月的信息,就可以推算出該大的陰歷日期了。圖39為由總天數(shù)推算出陰歷日期的程序流程圖。圖9 推算陰歷日期的程序流程圖四、調試總結及改進(1)ds1302與微處理器進行數(shù)據(jù)交換時,首先由微處

20、理器向電路發(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é)傳送結束之后,在下2個sclk周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8個sclk周期的下降沿輸出數(shù)據(jù)字節(jié)。 ds1302與ram相關的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命

21、令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的ram寄存器,在此方式下可一次性讀、寫所有的ram的31個字節(jié)。 (2)在仿真頭調試時候,我發(fā)現(xiàn)在led顯示板上能夠正常顯示數(shù)字,但是秒位不能記數(shù),檢查ds1302的連接(沒有錯,接觸也良好),說明了這片ds1302不能記數(shù),然后換掉ds1302后此時不但可以正常顯示數(shù)字,而且可以正常記數(shù),說明剛才那片是壞的。(3)(2m)晶振的調試,在調試晶振的時候發(fā)現(xiàn),在沒有給電路同電的時候,晶振兩端輸出波形是個不穩(wěn)定的正弦波,而通電后也是個正弦波,但是中間一個引腳接地時候,波形比較穩(wěn)定,接示波器時間長了,發(fā)現(xiàn)ds1302很發(fā)燙(

22、時間很短內溫度達到很高),但是不接示波器,時間長點也不會出現(xiàn)發(fā)燙現(xiàn)象。我認為是示波器引腳上的電和電路板上的電相通的原因。五元器件主控器at89c52一片、時鐘芯片ds1302一片、10p瓷片電容2個、22p瓷片電容3個,32.768k(時鐘晶體)1片、510歐排電阻3個、共陽led 19片,9012三極管1片、8550三極管7個,2m晶體1片、74ls104三片、發(fā)光二極管一個、按鈕開關2個、萬能電路板(大小個1個),5v電源一個、導線若干。六、參考書目1、李振聲實驗電子技術(p182193).國防工業(yè)大學出版社,2001年2 李飛光 單片機課程設計實例指導 北京航空航天大學出版社 2004年

23、七程序調試sclk equ p3.2io equ p3.3rst equ p3.4year data 66hmonth data 65hweek data 64hday data 63hhour data 62hmintue data 61hsecond data 60hds1302_addr data 32hds1302_data data 31h org 0000h ajmp start org 0003h reti org 000bh reti org 0013h reti org 001bh ljmp intt1 org 0023h reti org 002bh retistart:

24、setb ea mov scon,#00h mov tmod,#10h mov tl1,#00h mov th1,#00h mov ds1302_addr,#8eh mov ds1302_data,#00h lcall write mov ds1302_addr,#90h mov ds1302_data,#0a6h lcall writemain1: mov ds1302_addr,#8dh lcall read mov year,ds1302_data mov ds1302_addr,#8bh lcall read mov week,ds1302_data mov ds1302_addr,#

25、89h lcall read mov month,ds1302_data mov ds1302_addr,#87h lcall read mov day,ds1302_data mov ds1302_addr,#85h lcall read mov hour,ds1302_data mov ds1302_addr,#83h lcall read mov mintue,ds1302_data mov ds1302_addr,#81h lcall read mov second,ds1302_data mov r0,year lcall divide mov 7bh,r1 mov 4bh,r1 m

26、ov 7ch,r2 mov 4ch,r2 mov 78h,week mov 48h,week mov r0,month lcall divide mov 79h,r1 mov 49h,r1 mov 7ah,r2 mov 4ah,r2 mov r0,day lcall divide mov 76h,r1 mov 46h,r1 mov 77h,r2 mov 47h,r2 mov r0,hour lcall divide mov 74h,r1 mov 44h,r1 mov 75h,r2 mov 45h,r2 mov r0,mintue lcall divide mov 72h,r1 mov 42h,

27、r1 mov 73h,r2 mov 43h,r2 mov r0,second lcall divide mov 70h,r1 mov 40h,r1 mov 71h,r2 mov 41h,r2 lcall display lcall gengxian jnb p1.2,num jnb p1.1,setg jnb f0,sss clr p1.3 ljmp main1sss: setb p1.3 ljmp main1 num:mov month,#0aah mov hour,#0aah mov mintue,#0aah mov second,#04h mov r0,month lcall divid

28、e mov 79h,r1 mov 49h,r1 mov 7ah,r2 mov 4ah,r2 mov r0,hour lcall divide mov 74h,r1 mov 44h,r1 mov 75h,r2 mov 45h,r2 mov r0,mintue lcall divide mov 72h,r1 mov 42h,r1 mov 73h,r2 mov 43h,r2 mov r0,second lcall divide mov 70h,r1 mov 40h,r1 mov 71h,r2 mov 41h,r2 lcall display jnb p1.2,num ljmp main1setg:

29、setb tr1 setb et1 clr 08h clr 09h clr 0ah clr 0bh clr 0ch clr 0dh clr 0eh clr 0fh mov ds1302_addr,#8eh mov ds1302_data,#00h lcall write mov ds1302_addr,#80h mov ds1302_data,#80h lcall writegwait: lcall display jnb p1.1,gwaitsetg1: lcall display jnb p1.1,setg2 jnb p1.2,gaddyear ajmp setg1gaddyear: mo

30、v r7,66h lcall add1 mov 66h,a cjne a,#51h,gaddyear1 mov 66h,#01hgaddyear1: mov ds1302_addr,#8ch mov ds1302_data,66h lcall write mov r0,66h lcall divide mov 4bh,r1 mov 7bh,r1 mov 4ch,r2 mov 7ch,r2waitt1: lcall display jnb p1.2,waitt1 ajmp setg1setg2: setb 0ahgwait2: lcall display jnb p1.1,gwait2setg3

31、: lcall display jnb p1.1,setg4 jnb p1.2,gaddmonth ajmp setg3gaddmonth: mov r7,65h lcall add1 mov 65h,a cjne a,#13h,gaddmonth1 mov 65h,#01hgaddmonth1: mov ds1302_addr,#88h mov ds1302_data,65h lcall write mov r0,65h lcall divide mov 79h,r1 mov 49h,r1 mov 7ah,r2 mov 4ah,r2waitt2: lcall display jnb p1.2

32、,waitt2 ajmp setg3setg4: setb 0bhgwait4: lcall display jnb p1.1,gwait4setg5: lcall display jnb p1.1,setg6 jnb p1.2,gaddday ajmp setg5gaddday: mov r7,63h lcall add1 mov 63h,a cjne a,#32h,gaddday1 mov 63h,#01hgaddday1: mov ds1302_addr,#86h mov ds1302_data,63h lcall write mov r0,63h lcall divide mov 76

33、h,r1 mov 46h,r1 mov 77h,r2 mov 47h,r2waitt3: lcall display jnb p1.2,waitt3 ajmp setg5setg6: setb 0chgwait6: lcall display jnb p1.1,gwait6setg7: lcall display jnb p1.1,setg8 jnb p1.2,gaddweek ajmp setg7gaddweek: mov r7,64h lcall add1 mov 64h,a cjne a,#08h,gaddweek1 mov 64h,#01hgaddweek1: mov ds1302_a

34、ddr,#8ah mov ds1302_data,64h lcall write mov r0,64h lcall divide mov 48h,r1 mov 78h,r1waitt4: lcall display jnb p1.2,waitt4 ajmp setg7setg8: setb 0dhgwait8: lcall display jnb p1.1,gwait8setg9: lcall display jnb p1.1,setg10 jnb p1.2,gaddhour ajmp setg9gaddhour: mov r7,62h lcall add1 mov 62h,a cjne a,

35、#24h,gaddhour1 mov 62h,#00hgaddhour1: mov ds1302_addr,#84h mov ds1302_data,62h lcall write mov r0,62h lcall divide mov 74h,r1 mov 44h,r1 mov 75h,r2 mov 45h,r2waitt5: lcall display jnb p1.2,waitt5 ajmp setg9setg10: setb 0ehgwaitt10: lcall display jnb p1.1,gwaitt10setg11: lcall display jnb p1.1,setgou

36、t jnb p1.2,gaddmintue ajmp setg11gaddmintue: mov r7,61h lcall add1 mov 61h,a cjne a,#60h,gaddmintue1 mov 61h,#00hgaddmintue1:mov ds1302_addr,#82h mov ds1302_data,61h call write mov r0,61h lcall divide mov 72h,r1 mov 42h,r1 mov 73h,r2 mov 43h,r2waitt6: lcall display jnb p1.2,waitt6 ajmp setg11setgout

37、: lcall display jnb p1.1,setgout lcall gengxian mov ds1302_addr,#80h mov ds1302_data,#00h lcall write mov ds1302_addr,#8eh mov ds1302_data,#80h lcall write clr 08h clr 09h clr 0ah clr 0bh clr 0ch clr 0dh clr 0eh clr 0fh clr et1 clr tr1 ljmp main1intt1: push acc push pswgflash: cpl 0fh jb 0fh,gflash1

38、 mov 7ch,4ch mov 7bh,4bh mov 7ah,4ah mov 79h,49h mov 78h,48h mov 77h,47h mov 76h,46h mov 75h,45h mov 74h,44h mov 73h,43h mov 72h,42h mov 71h,41h mov 70h,40hgflashout: pop psw pop acc retigflash1: jb 0ah,gflash2 mov 7ch,#0ah mov 7bh,#0ah ajmp gflashoutgflash2: jb 0bh,gflash3 mov 7ah,#0ah mov 79h,#0ah

39、 ajmp gflashoutgflash3: jb 0ch,gflash4 mov 77h,#0ah mov 76h,#0ah ajmp gflashoutgflash4: jb 0dh,gflash5 mov 78h,#0ah ajmp gflashoutgflash5: jb 0eh,gflash6 mov 75h,#0ah mov 74h,#0ah ajmp gflashoutgflash6: mov 73h,#0ah mov 72h,#0ah ajmp gflashoutadd1: mov a,r7 add a,#01h da a retdivide: mov a,r0 anl a ,#0fh mov r1,a mov a,r0 swap a anl a,#0fh mov r2,a retwrite: clr sclk nop setb rst nop mov a,ds1302_addr mov r4,#8write1: rrc a nop nop clr sclk

溫馨提示

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

評論

0/150

提交評論