2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩90頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)論文</b></p><p>  題 目 多功能數(shù)字時(shí)鐘 </p><p>  系 別: </p><p>  專(zhuān) 業(yè): </p><p>  年

2、 級(jí): </p><p>  學(xué)生姓名: </p><p>  同組成員: </p><p>  指導(dǎo)教師: </p

3、><p>  完成日期: </p><p><b>  摘要 </b></p><p>  本設(shè)計(jì)是設(shè)計(jì)一個(gè)單片機(jī)控制的多功能時(shí)鐘系統(tǒng)。</p><p>  本設(shè)計(jì)的多功能時(shí)鐘系統(tǒng)采用AT89S52單片機(jī)為中心器件,利用其定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合液晶顯

4、示電路、時(shí)鐘芯片DS1302電路、電源電路以及按鍵電路來(lái)設(shè)計(jì)計(jì)時(shí)器。將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠?qū)崿F(xiàn)液晶顯示,顯示時(shí)間有年、月、日、時(shí)、分、秒以及星期,還可以設(shè)置鬧鐘和整點(diǎn)報(bào)時(shí)以及斷電保護(hù)功能可謂功能強(qiáng)大。其中軟件系統(tǒng)采用單片機(jī)匯編語(yǔ)言編寫(xiě)程序,包括顯示程序,鬧鐘數(shù)程序,中斷,延時(shí)程序,按鍵消抖程序等,并在keil中調(diào)試運(yùn)行,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來(lái)實(shí)現(xiàn),簡(jiǎn)單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。<

5、;/p><p>  關(guān)鍵詞 :   時(shí)鐘芯片DS1302、單片機(jī)匯編語(yǔ)言、液晶顯示電路、AT89S52芯片</p><p><b>  目錄</b></p><p>  1 前言.......................................................................

6、.........................................4</p><p>  2系統(tǒng)總體方案設(shè)計(jì)及硬件設(shè)計(jì)..............................................................4</p><p>  2.1 系統(tǒng)總體方案設(shè)計(jì)...........................................

7、........................... ...... ....5</p><p>  2.2 硬件電路設(shè)計(jì)與分析................................................................... ...... ...5</p><p>  2.2.1振蕩器和時(shí)鐘電路工作原理.........................

8、...................................6</p><p>  2.2.2時(shí)鐘芯片數(shù)據(jù)采集設(shè)計(jì)與分析........................................................6</p><p>  2.2.3液晶顯示電路....................................................

9、......... ......................6</p><p>  2.2.4輸出控制電路............................................................. ......................7</p><p>  2.2.5復(fù)位電路....................................

10、........................................................7</p><p>  2.2.6電源電路和總電路布局.....................................................................7</p><p>  3 軟件設(shè)置及調(diào)試.......................

11、...................................... ............ .......... ....8</p><p>  3.1軟件總體方案設(shè)計(jì)............................................................. ......................8</p><p>  3.2按鍵模塊設(shè)計(jì).

12、............................................................ ...................... .......11</p><p>  3.2.1按鍵1的說(shuō)明............................................................. ......................12</p&

13、gt;<p>  3.2.2按鍵2的說(shuō)明............................................................. ......................13</p><p>  3.2.3其他按鍵的說(shuō)明............................................................. ..........

14、........13</p><p>  3.2.4報(bào)時(shí)功能的說(shuō)明............................................................. ..................13</p><p>  3.2.5鬧鐘功能的說(shuō)明..........................................................

15、... ..................14</p><p>  3.2.6加1、移位功能的說(shuō)明............................................................. .......14</p><p>  3.3 時(shí)鐘模塊設(shè)計(jì)......................................................

16、....... ...................... ......14</p><p>  3.4 液晶顯示模塊設(shè)計(jì)............................................................. .....................14</p><p>  4 設(shè)計(jì)總結(jié)................................

17、............................. ...................... ...................14</p><p>  5程序清單............................................................. ...................... .....................14</p>

18、<p>  6 參考文獻(xiàn)............................................................. ...........................................18</p><p><b>  1 前言</b></p><p>  在當(dāng)代繁忙的工作與生活中,時(shí)間與我們每一個(gè)人都有著

19、非常密切的關(guān)系,都受到時(shí)間的影響。為了更好的利用自己的時(shí)間,我們必須對(duì)時(shí)間有一定度量,因此產(chǎn)生了萬(wàn)年歷和鐘表。電子時(shí)鐘的發(fā)展是非常迅速的,從剛開(kāi)始純粹的日歷發(fā)展到現(xiàn)在的年月日及分秒,即使現(xiàn)在的電子時(shí)鐘千奇百怪,但是它們都只是完成一種功能-----計(jì)時(shí)功能。雖然現(xiàn)在市場(chǎng)上已有現(xiàn)成的電子鐘集成電路芯片出售,價(jià)格便宜、使用也方便,但是人們對(duì)電子產(chǎn)品的應(yīng)用要求越來(lái)越高,數(shù)字鐘不但可以顯示當(dāng)前的時(shí)間,而且可以顯示日期、農(nóng)歷 、以及星期等,給人們的

20、生活帶來(lái)了方便。另外數(shù)字鐘還具鬧鐘的功能,且鬧鐘鈴聲可自選,使一款電子鐘具備了多媒體的色彩。</p><p>  本設(shè)計(jì)在設(shè)計(jì)過(guò)程中認(rèn)真分析了各種軟件的使用利弊,擯棄了許多陳雜不合適的方法,在設(shè)計(jì)軟件使用上選擇了以往學(xué)過(guò)的keil、Proteus和單片機(jī)程序燒寫(xiě)軟件。整個(gè)設(shè)計(jì)過(guò)程將理論與實(shí)踐相結(jié)合,突出了實(shí)戰(zhàn)性。</p><p>  2、系統(tǒng)總體方案設(shè)計(jì)及硬件設(shè)計(jì)</p>&

21、lt;p>  2.1 系統(tǒng)總體方案設(shè)計(jì)</p><p>  電路原理設(shè)計(jì)是基于小系統(tǒng)板包括電源電路、復(fù)位電路、按鍵電路、DS1302時(shí)鐘電路、液晶顯示驅(qū)動(dòng)電路、輸出控制電路。電源部分是用電池來(lái)提供的3v-5v,晶體振蕩器采用的是12MHz的石英晶體振蕩器。</p><p>  整個(gè)系統(tǒng)用單片機(jī)為中央控制器,由單片機(jī)執(zhí)行采集時(shí)鐘芯片的時(shí)間信號(hào)并通過(guò)顯示模塊來(lái)輸出信號(hào)及相關(guān)的控制功能。時(shí)

22、鐘芯片產(chǎn)生時(shí)鐘信號(hào),利用單片機(jī)的I/O口傳給單片機(jī);并通過(guò)I/O口實(shí)現(xiàn)LCD的顯示。系統(tǒng)設(shè)有4個(gè)獨(dú)立式按鍵可以對(duì)時(shí)間星期年月日進(jìn)行調(diào)整,還可以設(shè)置鬧鐘。具體如圖1所示:</p><p><b>  圖1系統(tǒng)整體框圖</b></p><p><b>  2.2硬件設(shè)計(jì)</b></p><p>  2.2.1振蕩器和時(shí)鐘電路工

23、作原理</p><p>  AT89S2單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器,但要形成時(shí)鐘,外部還需附加電路。XTAL1引腳為反相放大器和時(shí)鐘發(fā)生電路的輸入端,XTAL2引腳為反相放大器的輸出端。片內(nèi)時(shí)鐘發(fā)生器實(shí)質(zhì)是個(gè)2分頻的觸發(fā)其輸入來(lái)自振蕩器的fosc,輸出為2相時(shí)鐘信號(hào),即節(jié)拍信號(hào)P1、P2,器頻率為fosc\2。2個(gè)節(jié)拍為1個(gè)狀態(tài)時(shí)鐘S。狀態(tài)時(shí)鐘再3分頻后為ALE信號(hào),其頻率為fosc\6,狀

24、態(tài)時(shí)鐘6分頻后為機(jī)器周期信號(hào),器頻率為fosc\12。特殊功能寄存器PCON的PD位可以控制振蕩器的工作,當(dāng)PD=0時(shí),振蕩器停止工作,單片機(jī)進(jìn)入低功耗工作狀態(tài),復(fù)位后,PD=0,振蕩器正常工作。</p><p>  2.2.2時(shí)鐘芯片數(shù)據(jù)采集設(shè)計(jì)與分析</p><p>  (1)DS1302是一種可編程的實(shí)時(shí)時(shí)鐘芯片,具有計(jì)算2100年前的時(shí)間的能力,包括時(shí)鐘/日歷寄存器和31字節(jié)(8位

25、)的數(shù)據(jù)暫存寄存器,數(shù)據(jù)通信權(quán)通過(guò)一條串行輸出口。時(shí)鐘/日歷提供包括秒、分、時(shí)、日期、月份和年份信息。閏年可自行調(diào)整,以串行方式向單片機(jī)傳送單字節(jié)或多字節(jié)的秒、分、時(shí)、日、月、年等實(shí)時(shí)時(shí)間數(shù)據(jù);只通過(guò)三根線進(jìn)行數(shù)據(jù)的控制和傳遞:RST、I/O、SCLK;其在電路的功能是還具有在出現(xiàn)主電源斷電時(shí)備用電源可繼續(xù)保持時(shí)鐘的連續(xù)運(yùn)行。</p><p><b>  圖2 時(shí)鐘引腳圖</b></p

26、><p>  (2)DS1302芯片內(nèi)部寄存器讀寫(xiě)地址及位定義格式如表1:</p><p>  表1 DS1302芯片內(nèi)部寄存器讀寫(xiě)地址及位定義</p><p>  如果單片機(jī)要對(duì)DS1302內(nèi)部寄存器進(jìn)行讀寫(xiě)操作,必須先將與寄存器對(duì)應(yīng)的位操作地址傳送給DS1302,然后再進(jìn)行讀寫(xiě)數(shù)據(jù)的操作。控制寄存器是用來(lái)決定能否對(duì)DS1302進(jìn)行讀寫(xiě)操作,當(dāng)控制字的最高位WP=0

27、時(shí),允許進(jìn)行讀寫(xiě)操作;當(dāng)WP=1時(shí),禁止讀寫(xiě)操作。所以單片機(jī)對(duì)DS1302進(jìn)行讀寫(xiě)操作時(shí),必須先將控制字00H寫(xiě)入到DS1302的控制寄存器中。</p><p>  2.2.3 液晶顯示電路</p><p>  LCD顯示器能顯示數(shù)碼管不能顯示的其他字符、文字和圖形,是十分重要的顯示終端,LCD1602是字符點(diǎn)陣液晶顯示模塊。利用LCD1602,所用的時(shí)間年、月、日、星期可同時(shí)可見(jiàn),一目了

28、然,采用雙行顯示,讓電子鐘能夠更直觀的顯示。其實(shí)圖如圖3、引腳功能如表2:</p><p>  圖3 液晶顯示器實(shí)圖</p><p>  表2 lcd液晶顯示器引腳功能</p><p>  2.2.4 輸出控制電路</p><p>  在P2.0端口接一個(gè)蜂鳴器,用于整點(diǎn)報(bào)時(shí)和響鬧鈴。</p><p><b&

29、gt;  2.2.5復(fù)位電路</b></p><p>  本次設(shè)計(jì)采用按鍵電平復(fù)位,按鍵電平復(fù)位相當(dāng)于按復(fù)位鍵后,復(fù)位端通過(guò)電阻與Vcc電源接通;</p><p>  2.2.6 電源電路和總電路布局</p><p>  因?yàn)樵撾娐匪桦妷簽?-5v,可直接用電池供應(yīng)或也可以用直流電源供應(yīng),但需經(jīng)過(guò)變壓才行。下圖圖4為整個(gè)設(shè)計(jì)的總體布局圖。</p

30、><p>  圖4 硬件電路設(shè)計(jì)總布局圖</p><p><b>  3 軟件設(shè)計(jì)及調(diào)試</b></p><p>  3.1軟件總體設(shè)計(jì)方案</p><p>  A 軟件設(shè)計(jì)目標(biāo): </p><p>  軟件部分總體上是模塊化的設(shè)計(jì)思想,通過(guò)子程序調(diào)用設(shè)計(jì)方式 ,將所有的模塊綜合到一起,使程序可讀

31、性較高。</p><p><b>  B 總體架構(gòu)說(shuō)明</b></p><p>  該時(shí)鐘程序設(shè)計(jì)思路如下:</p><p> ?。?)、在程序頭將設(shè)計(jì)中的一些固定空間進(jìn)行分配并注釋。</p><p> ?。?)、初始化程序,如設(shè)定時(shí)鐘初始顯示“2010年3月20日,星期四,11:59 ”以便一開(kāi)始就能進(jìn)入整點(diǎn)報(bào)時(shí)狀態(tài)

32、,顯示該功能;設(shè)定使用定時(shí)器1;將一些未到時(shí)鐘設(shè)計(jì)功能的功能端口關(guān)閉等。</p><p> ?。?)開(kāi)始主程序進(jìn)行程序掃描,先掃描拆字子程序,將分配好的時(shí)分秒等高地位的數(shù)字調(diào)入到顯示子程序中?!?gt;顯示子程序通過(guò)分配的空間對(duì)應(yīng)口將拆字子程序的內(nèi)容在液晶顯示器上顯示相應(yīng)的時(shí)分秒,再調(diào)用走時(shí)程序使時(shí)鐘進(jìn)行讀秒等工作。——>進(jìn)入按鍵掃描,判斷按鍵是否有變動(dòng),若有就根據(jù)設(shè)計(jì)程序?qū)ο鄳?yīng)的按鍵按入次數(shù)而進(jìn)行實(shí)現(xiàn)相

33、應(yīng)的功能。如進(jìn)入時(shí)間調(diào)整、鬧鐘設(shè)置、鬧鐘開(kāi)啟與否等。——>進(jìn)入鬧鐘的判斷,在時(shí)分上與設(shè)置的鬧鈴時(shí)間吻合的話就做相對(duì)應(yīng)的判斷,再依據(jù)是否有開(kāi)啟鬧鐘而進(jìn)行響鈴與否,如果有響鈴則設(shè)置其一直響鈴知道有人為按取消按鍵取消鬧鈴?!?gt;進(jìn)入整點(diǎn)報(bào)時(shí)掃描,判斷是否在時(shí)分上都進(jìn)入了整點(diǎn),如果是就報(bào)時(shí),然后就退出整點(diǎn)報(bào)時(shí),等到下一個(gè)整點(diǎn)的到來(lái)?!?gt;最后返回主程序頭重新依次掃描。顯示過(guò)程設(shè)有消隱,按鍵設(shè)有去斗。</p>&l

34、t;p> ?。?)子程序部分。在主程序的調(diào)用下依據(jù)不同的子程序工能而編寫(xiě)子程序,有多級(jí)嵌套。這些子程序包括拆字子程序、延時(shí)子程序、走時(shí)間子程序、整點(diǎn)報(bào)時(shí)子程序、按鍵處理子程序、調(diào)時(shí)間子程序、鬧鐘設(shè)置子程序、鬧鐘子程序、鬧鐘開(kāi)啟子程序。主流程圖如圖5所示。</p><p><b>  圖5 主程序流程圖</b></p><p> ?。?)I/O口分配表</p

35、><p>  表3 I/O口分配表</p><p><b> ?。?)子程序詳解表</b></p><p>  表4 子程序詳解表</p><p><b>  3.2按鍵模塊設(shè)計(jì)</b></p><p>  設(shè)計(jì)系統(tǒng)中的按鍵模塊僅占用四個(gè)I/O口,從89s52芯片p1.0、p

36、1.1、p1.2、p1.3四個(gè)引腳接入進(jìn)行控制。當(dāng)沒(méi)有按鍵按下時(shí),均為高電平,有按鍵按下時(shí)相應(yīng)I/O口為低電平,但并沒(méi)有立即執(zhí)行相應(yīng)的程序,延時(shí)5ms后若再為低電平,等I/O口恢復(fù)高電平,即按鍵松開(kāi)時(shí),才執(zhí)行相應(yīng)的程序,此時(shí)按鍵才起作用。這樣該按鍵模塊具有去抖動(dòng),且按鍵按下一次僅作用一次,起到精確判斷的作用。其設(shè)計(jì)流程圖和設(shè)計(jì)具體的按鍵操作說(shuō)明如下:</p><p>  圖6 按鍵程序流程圖</p>

37、<p>  3.2.1 按鍵1的說(shuō)明</p><p>  按鍵1有四種功能,分別為下面4個(gè)子程序:</p><p>  子程序0的功能為:進(jìn)入設(shè)置當(dāng)前時(shí)間狀態(tài),且令keycode=2;</p><p>  子程序1的功能為:進(jìn)入設(shè)置鬧鐘時(shí)間狀態(tài),且令keycode=3;</p><p>  子程序2的功能為:把所設(shè)置的時(shí)間作為

38、當(dāng)前時(shí)間,且令keycode=0;</p><p>  子程序3的功能為:把所設(shè)置的時(shí)間作為鬧鐘時(shí)間,且令keycode=0;</p><p>  每次按下按鍵1,按鍵1程序根據(jù)的KeyCode內(nèi)容轉(zhuǎn)入各對(duì)應(yīng)的子程序中(因?yàn)楫?dāng)KeyCode值不同時(shí),經(jīng)過(guò)計(jì)算得到dptr的值不同,然后經(jīng)過(guò)jmp @a+dptr指令就可跳轉(zhuǎn)到不同的子程序中,具體程序說(shuō)明),從而實(shí)現(xiàn)不同的功能。</p&g

39、t;<p>  從各按鍵的功能可知,每次按下按鍵1,都會(huì)改變KeyCode內(nèi)容,使按鍵1的功能發(fā)生改變。</p><p>  3.2.2 按鍵2的說(shuō)明 </p><p>  按鍵2有兩種不同的功能:對(duì)應(yīng)于設(shè)置狀態(tài)為加1;對(duì)應(yīng)于非設(shè)置狀態(tài)為切換屏幕。所以按鍵2程序開(kāi)頭就先判斷鬧鐘是否處于設(shè)置狀態(tài)。</p><p>  由按鍵1的功能流程圖可知:當(dāng)鬧

40、鐘處于非設(shè)置狀態(tài)時(shí),keycode等于0或1;處于設(shè)置狀態(tài)時(shí),keycode等于2或3;所以可用如下語(yǔ)段判斷鬧鐘是否處于設(shè)置狀態(tài):</p><p>  當(dāng)鬧鐘處于設(shè)置狀態(tài),keycode值大于2,c等于0</p><p>  當(dāng)鬧鐘處于非設(shè)置狀態(tài),keycode值小于2,c等于1</p><p>  圖7 按鍵2程序流程圖</p><p>

41、  3.2.3 其他按鍵的說(shuō)明:</p><p>  剩下3、4按鍵都于按鍵2類(lèi)似,先判斷是否處于設(shè)置狀態(tài),然后轉(zhuǎn)入不同的語(yǔ)句,不再說(shuō)明。</p><p>  3.2.4 報(bào)時(shí)功能的說(shuō)明:</p><p>  當(dāng)報(bào)時(shí)功能開(kāi)啟,即bs=0時(shí),LCD上會(huì)出現(xiàn)相應(yīng)的標(biāo)示符號(hào)。</p><p>  此時(shí),主程序?qū)呙鑪hengshi子程序。&

42、lt;/p><p>  zhengshi子程序能判斷當(dāng)前時(shí)間是否為整點(diǎn),若為整點(diǎn)將使cxbs=0,且把hour由BCD碼化為二進(jìn)制存儲(chǔ)在字節(jié)shengshu(為報(bào)時(shí)聲數(shù),將在baoshi子程序中使用)中,之后主程序?qū)呙鑒aoshi子程序,即開(kāi)始報(bào)時(shí)。</p><p>  chuzhi=0, 由baoshi子程序可知,鬧鐘從0秒開(kāi)始報(bào)時(shí),當(dāng)報(bào)時(shí)完畢將自動(dòng)令cxbs=1。</p>

43、<p>  3.2.5 鬧鐘功能的說(shuō)明:</p><p>  當(dāng)鬧鐘功能開(kāi)啟,即bj=0時(shí),LCD上會(huì)出現(xiàn)相應(yīng)的標(biāo)示符號(hào)此時(shí),主程序?qū)呙鑪hengshi子程序。zhengshi子程序?qū)Ξ?dāng)前時(shí)間和鬧鐘時(shí)間進(jìn)行比較,當(dāng)它們的分、時(shí)全相等時(shí)開(kāi)啟中斷sub1,否則關(guān)閉中斷sub1。這樣就可實(shí)現(xiàn)鬧鐘鬧鈴一分鐘后自動(dòng)停止鳴叫的要求。</p><p>  3.2.6 加1、移位功能的說(shuō)

44、明:</p><p>  將年份前兩位與年(year)、月(month)、星期(week)、日(day)、時(shí)(hour)、分(min)、秒(sec)拆字后分別存儲(chǔ)在DspBuf-2、DspBuf-1、DspBuf+0、DspBuf+1、DspBuf+2、DspBuf+3等13個(gè)字節(jié)中。而把它們的每一為在LCD上的顯示位置地址放在如下表中:</p><p>  tab4:db 80h,81h

45、,82h,83h,85h,86h,88h,89h,8eh,0c2h,0c3h,0c5h,0c6h,0c8h,0c9h;!當(dāng)前時(shí)間各編輯位在LCD上的位置表。</p><p>  然后執(zhí)行mov r1,#DspBuf+12; inc @r1就可實(shí)現(xiàn)對(duì)秒個(gè)位加1。</p><p>  執(zhí)行:dec r1和子程序www就可實(shí)現(xiàn)移位功能.</p><p><b&

46、gt;  3.3時(shí)鐘模塊設(shè)計(jì)</b></p><p>  單片機(jī)要先從DS1302芯片中讀取時(shí)鐘數(shù)據(jù),然后通過(guò)LCD顯示出來(lái)。在讀取DS1302的時(shí)間和日期之前,先要對(duì)DS1302進(jìn)行賦初始時(shí)間并開(kāi)啟時(shí)鐘。時(shí)鐘被啟動(dòng)后若未接收到新的賦時(shí)間指令,其內(nèi)部的時(shí)鐘將一直不停的運(yùn)行,以保證時(shí)間的實(shí)時(shí)性和準(zhǔn)確性;期間單片機(jī)可隨時(shí)讀取DS1302內(nèi)部時(shí)間和日期寄存器中的數(shù)值。</p><p>

47、;  3.4液晶顯示模塊設(shè)計(jì)</p><p>  本設(shè)計(jì)液晶時(shí)鐘顯示系統(tǒng)設(shè)計(jì)上由液晶顯示器顯示、時(shí)鐘芯片DS1302提供時(shí)間,可為使用者提供完整的時(shí)間信息。由于LED數(shù)碼管只能顯示數(shù)字而無(wú)法顯示其他中英文字符,并對(duì)成本及功能考慮,因此從設(shè)計(jì)的成本及功能的角度考慮,采用LCD一1602顯示模塊,它可以顯示年、月、日、星期等中文字目。LCD一1602驅(qū)動(dòng)電路簡(jiǎn)單,可以由單片機(jī)直接輸出命令驅(qū)動(dòng)。</p>

48、<p><b>  4 設(shè)計(jì)總結(jié)</b></p><p>  在長(zhǎng)達(dá)一個(gè)多月的設(shè)計(jì)制作中讓我學(xué)到了軟件與硬件的結(jié)合設(shè)計(jì)的許多知識(shí),同時(shí)在出現(xiàn)的多種軟件與硬件的問(wèn)題上使我學(xué)會(huì)了如何去分析問(wèn)題的所在,并結(jié)合所學(xué)知識(shí)去一一解決。</p><p>  在處理液晶顯示的知識(shí)漏洞上,我重新翻閱了以往所學(xué)的課本,在復(fù)習(xí)中學(xué)會(huì)了很多。</p><p>

49、;  在硬件與軟件結(jié)合的故障問(wèn)題加強(qiáng)了我的耐心和細(xì)心的鍛煉。雖然所選擇的設(shè)計(jì)課題只是一個(gè)小系統(tǒng),但是只要有足夠的知識(shí)我們便可以把它變成一個(gè)大的系統(tǒng),讓它運(yùn)用在現(xiàn)實(shí)的社會(huì)生活中。在一個(gè)月的時(shí)間努力下最后完成了我們的課題設(shè)計(jì),使我們有一種成就感。</p><p>  5 附錄:部分模塊程序代碼及設(shè)計(jì)實(shí)物圖和仿真電路圖</p><p><b>  5.1 主程序代碼</b>

50、</p><p><b>  mainloop:</b></p><p>  jb IsSheZhi, SheZhi ;判斷是否處于設(shè)置狀態(tài),處于設(shè)置狀態(tài)則跳轉(zhuǎn)</p><p>  lcall get1302 ;調(diào)讀時(shí)間子程序</p><p>  lcall chaizi</p><

51、p>  lcall display ;調(diào)顯示子程序,顯示當(dāng)前時(shí)間與溫度</p><p>  SheZhi:jb BJ,xq ;判斷鬧鐘功能是否開(kāi)啟,未開(kāi)啟則跳轉(zhuǎn)</p><p>  lcall bijiao ;調(diào)比較子程序,比較當(dāng)前時(shí)間與鬧鐘時(shí)間</p><p>  xq: lcall anjian

52、 ;按鍵掃描</p><p>  jb bs,bs_1</p><p>  lcall zhengshi ;判斷當(dāng)前時(shí)間是否是整時(shí),即能否報(bào)時(shí)</p><p>  bs_1: jb cxbs,cx_1</p><p>  lcall baoshi ;執(zhí)行報(bào)時(shí)功能</p><p>

53、;  cx_1: sjmp mainloop</p><p>  5.2 初始化DS1302程序代碼</p><p>  set1302:mov a,#8eh ;寫(xiě)DS1302控制寄存器地址</p><p>  mov b,#00h ;允許寫(xiě)操作,將WP位設(shè)置為低電平</p><p>

54、  lcall clockwr</p><p>  mov a,#8ch ;寫(xiě)年初值</p><p>  mov b,year </p><p>  lcall clockwr</p><p>  mov a,#88h ;寫(xiě)月初值</p><p>  mov b,

55、month </p><p>  lcall clockwr </p><p>  mov a,#8ah ;寫(xiě)星期初值</p><p>  mov b,week</p><p>  lcall clockwr</p><p>  mov a,#86h

56、 ;寫(xiě)日期初值</p><p>  mov b,day </p><p>  lcall clockwr</p><p>  mov a,#84h ;寫(xiě)時(shí)初值</p><p>  mov b,hour </p><p>  lcall clockwr</p><p>

57、  mov a,#82h ;寫(xiě)分初值</p><p>  mov b,min </p><p>  lcall clockwr</p><p>  mov a,#80h ;寫(xiě)秒初值</p><p>  mov b,sec </p><p>  lcal

58、l clockwr</p><p><b>  ret</b></p><p>  5.3 讀時(shí)間子程序代碼</p><p>  get1302:mov a,#81h ;讀秒</p><p>  lcall clockrd</p><p><b> 

59、 mov sec,a</b></p><p>  mov a,#83h ;讀分</p><p>  lcall clockrd</p><p><b>  mov min,a</b></p><p>  mov a,#85h ;讀時(shí)&

60、lt;/p><p>  lcall clockrd</p><p>  mov hour,a</p><p>  mov a,#87h ;讀日</p><p>  lcall clockrd</p><p><b>  mov day,a</b></p>

61、;<p>  mov a,#8bh ;讀星期</p><p>  lcall clockrd</p><p>  mov week,a</p><p>  mov a,#89h ;讀月</p><p>  lcall clockrd</p>

62、<p>  mov month,a</p><p>  mov a,#8dh ;讀年</p><p>  lcall clockrd</p><p>  mov year,a</p><p><b>  ret</b></p><p>  5.4延

63、時(shí)子程序代碼</p><p>  delay: mov r7,a ;設(shè)置a為自定義變量,可省去其他延時(shí)程序的編寫(xiě)</p><p>  d2: mov r6,#250 ;設(shè)置1ms延時(shí)</p><p><b>  d1: nop</b></p><p><b>  nop</b>&l

64、t;/p><p>  djnz r6,d1</p><p>  djnz r7,d2</p><p><b>  ret</b></p><p><b>  5.5實(shí)物圖</b></p><p><b>  5.6 仿真電路圖</b></p>

65、<p><b>  5.7 程序清單</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;; 初始化 ;;;;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

66、;;;;</p><p>  P_Lcd equ P0 ;液晶lcd數(shù)據(jù)總線</p><p>  pq equ p1 ;按鍵接口</p><p>  pf bit p2.0 ;蜂鳴器接口</p><p>  led bit p2.1 ;led燈指示

67、接口</p><p>  lcdrs bit p2.5 ;lcdrs=1選擇數(shù)據(jù)寄存器,lcdrs=0選擇指令寄存器</p><p>  lcdrw bit p2.6 ;lcdrw=1進(jìn)行讀操作,lcdrw=0進(jìn)行寫(xiě)操作</p><p>  lcde bit p2.7 ;lcdep由1-->0 時(shí),液晶模塊執(zhí)行

68、命令</p><p>  sclk bit p3.5 ;時(shí)鐘芯片時(shí)鐘線引腳</p><p>  io bit p3.6 ;時(shí)鐘芯片數(shù)據(jù)傳輸線引腳</p><p>  rst bit p3.7 ;時(shí)鐘芯片復(fù)位線引腳</p><p>  IsSheZhi bit 30h

69、 ;設(shè)置狀態(tài)標(biāo)示位</p><p>  BJ bit 31h ;比較標(biāo)示位</p><p>  QH bit 32h ;切換標(biāo)示位</p><p>  bs bit 33h ;報(bào)時(shí)功能標(biāo)示位</p><p>  cxbs bit 34h ;執(zhí)

70、行報(bào)時(shí)標(biāo)志位</p><p>  sec equ 50h</p><p>  min equ 51h</p><p>  hour equ 52h</p><p>  day equ 53h</p><p>  week equ 54h</p><p>  month equ 55h</p

71、><p>  year equ 56h</p><p>  KeyCode equ 57h ;按鍵1功能子程序序號(hào)存儲(chǔ)地址</p><p>  jiepai equ 58h ;存放報(bào)時(shí)聲音的節(jié)拍常數(shù)</p><p>  chuzhi equ 59h ;報(bào)時(shí)開(kāi)始秒時(shí)間常數(shù)</p>&

72、lt;p>  shengshu equ 5ah ;存放報(bào)時(shí)聲數(shù)</p><p>  DspBuf equ 60h ;當(dāng)前時(shí)間拆字后存儲(chǔ)首地址</p><p>  dspba equ 70h ;鬧鐘時(shí)間首地址</p><p><b>  org 0h</b></p><

73、p><b>  ljmp main</b></p><p><b>  org 00bh</b></p><p><b>  ljmp sub1</b></p><p><b>  org 01bh</b></p><p><b>  lj

74、mp sub2</b></p><p><b>  org 30h</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;; 主程序 ;;;;;;;;;;;;</p><p>  ;;;;

75、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b>  main:</b></p><p>  clr IsSheZhi</p><p><b>  clr QH</b></p><p><b>  setb BJ</b><

76、;/p><p><b>  setb bs</b></p><p><b>  setb cxbs</b></p><p>  mov KeyCode,#00h</p><p>  mov sp ,#30h</p><p>  mov year,#10h

77、;為當(dāng)前時(shí)間付初值</p><p>  mov month,#03h</p><p>  mov week,#4h</p><p>  mov day,#20h</p><p>  mov hour,#11h</p><p>  mov min,#59h</p><p>  mov sec,#0

78、0h</p><p>  mov DspBuf-1,#0h</p><p>  mov DspBuf-2,#02h</p><p>  mov jiepai,#80h ;設(shè)置節(jié)拍常數(shù)</p><p>  mov chuzhi,#00h ;設(shè)置1秒時(shí)開(kāi)始報(bào)時(shí)</p><p>  mov

79、 dspba+0,#00h ;為鬧鐘時(shí)間賦初值</p><p>  mov dspba+1,#09h</p><p>  mov dspba+2,#0h</p><p>  mov dspba+3,#0h</p><p>  mov TH0,#0ffh</p><p>  mov TL0,#0ffh&l

80、t;/p><p>  mov TH1,#0ffh</p><p>  mov TL1,#0ffh</p><p>  mov IE,#8aH</p><p>  mov TMOD,#11h</p><p><b>  setb pf</b></p><p>  acall lc

81、d_init ;調(diào)LCM的初始化程序</p><p>  lcall word ;把自創(chuàng)字符寫(xiě)入CGRAM的子程序</p><p>  lcall set1302 ;DS1302初始化</p><p><b>  mainloop:</b></p><p>

82、  jb IsSheZhi, SheZhi ;判斷是否處于設(shè)置狀態(tài),處于設(shè)置狀態(tài)則跳轉(zhuǎn)</p><p>  lcall get1302 ;調(diào)讀時(shí)間子程序</p><p>  lcall chaizi</p><p>  lcall display ;調(diào)顯示子程序,顯示當(dāng)前時(shí)間與溫度</p><p&g

83、t;  SheZhi:jb BJ,xq ;判斷鬧鐘功能是否開(kāi)啟,未開(kāi)啟則跳轉(zhuǎn)</p><p>  lcall bijiao ;調(diào)比較子程序,比較當(dāng)前時(shí)間與鬧鐘時(shí)間</p><p>  xq: lcall anjian ;按鍵掃描</p><p>  jb bs,bs_1</p&

84、gt;<p>  lcall zhengshi ;判斷當(dāng)前時(shí)間是否是整時(shí),即能否報(bào)時(shí)</p><p>  bs_1: jb cxbs,cx_1</p><p>  lcall baoshi ;執(zhí)行報(bào)時(shí)功能</p><p>  cx_1: sjmp mainloop</p><p>

85、  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;; 液晶顯示初始化設(shè)定 ;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b&g

86、t;  lcd_init:</b></p><p>  mov a,#01h ;清除LCD的顯示內(nèi)容(清屏)</p><p>  acall LcdWrCmd</p><p>  mov a,#10 ;10ms延時(shí)</p><p>  acall delay</p><p>

87、  mov a,#38h ;顯示模式設(shè)置(使用8位數(shù)據(jù),顯示兩行,使用5*7的字型)</p><p>  acall LcdWrCmd</p><p><b>  mov a,#10</b></p><p>  acall delay</p><p>  mov a,#0ch ;

88、顯示開(kāi)及光標(biāo)設(shè)置(顯示器開(kāi),光標(biāo)關(guān),字符不閃爍)</p><p>  acall LcdWrCmd</p><p><b>  mov a,#10</b></p><p>  acall delay</p><p>  mov a,#06h ;顯示光標(biāo)移動(dòng)設(shè)置(字符不動(dòng),光標(biāo)自動(dòng)右移)</p>

89、<p>  acall LcdWrCmd</p><p><b>  mov a,#10</b></p><p>  acall delay</p><p><b>  ret</b></p><p>  ;?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

90、;;;</p><p>  ;;;;;;;; LCM命令嵌入 ;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><b>  LcdWrCmd:</b></p><p><b>  clr

91、LCDRW</b></p><p><b>  clrLCDRS</b></p><p>  movP_Lcd, A</p><p><b>  mov a,#6</b></p><p>  acall delay</p><p><b>  set

92、bLcdE</b></p><p><b>  clrLcdE</b></p><p><b>  ret</b></p><p>  ;?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;; LCM數(shù)據(jù)

93、輸入 ;;;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  LcdWrDat:setbLCDRS</p><p><b>  clrLCDRW</b></p><p>  movP_Lcd, A</

94、p><p><b>  mov a,#6</b></p><p>  acall delay</p><p><b>  setbLcdE</b></p><p><b>  clrLcdE</b></p><p><b>  ret</

95、b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;;; 延時(shí)子程序 ;;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

96、;;</p><p>  delay: mov r7,a ;設(shè)置a為自定義變量,可省去其他延時(shí)程序的編寫(xiě)</p><p>  d2:mov r6,#250 ;設(shè)置1ms延時(shí)</p><p><b>  d1:nop</b></p><p><b>  nop</b>&

97、lt;/p><p>  djnz r6,d1</p><p>  djnz r7,d2</p><p><b>  ret</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;; d

98、s1302初始化程序set1302 ;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  set1302:mov a,#8eh ;寫(xiě)ds1302控制寄存器地址</p><p>  mov b,#00h ;允許寫(xiě)操

99、作,將WP位設(shè)置為低電平</p><p>  lcall clockwr</p><p>  mov a,#8ch ;寫(xiě)年初值</p><p>  mov b,year</p><p>  lcall clockwr</p><p>  mov a,#88h ;寫(xiě)月初值</

100、p><p>  mov b,month</p><p>  lcall clockwr</p><p>  mov a,#8ah ;寫(xiě)星期初值</p><p>  mov b,week</p><p>  lcall clockwr</p><p>  mov a,#86h

101、 ;寫(xiě)日期初值</p><p><b>  mov b,day</b></p><p>  lcall clockwr</p><p>  mov a,#84h ;寫(xiě)時(shí)初值</p><p>  mov b,hour</p><p>  lcall clockwr&

102、lt;/p><p>  mov a,#82h ;寫(xiě)分初值</p><p><b>  mov b,min</b></p><p>  lcall clockwr</p><p>  mov a,#80h ;寫(xiě)秒初值</p><p><b>  mov

103、b,sec</b></p><p>  lcall clockwr</p><p><b>  ret</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;;; 讀時(shí)間子程序get1302

104、 ;;;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  get1302:mov a,#81h ;讀秒</p><p>  lcall clockrd</p><p><b>  mov sec,

105、a</b></p><p>  mov a,#83h ;讀分</p><p>  lcall clockrd</p><p><b>  mov min,a</b></p><p>  mov a,#85h ;讀時(shí)</p><p>  lcall

106、 clockrd</p><p>  mov hour,a</p><p>  mov a,#87h ;讀日</p><p>  lcall clockrd</p><p><b>  mov day,a</b></p><p>  mov a,#8bh ;

107、讀星期</p><p>  lcall clockrd</p><p>  mov week,a</p><p>  mov a,#89h ;讀月</p><p>  lcall clockrd</p><p>  mov month,a</p><p>  mov a,#8

108、dh ;讀年</p><p>  lcall clockrd</p><p>  mov year,a</p><p><b>  ret</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>

109、;  ;;;;;;; ds1302讀子程序 ;;;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  clockrd:clr rst ;rst先設(shè)置低電平,再設(shè)置高電平,起到去亂碼作用。</p><p>  clr s

110、clk ;sclk置為低電平</p><p>  setb rst ;rst置為高電平,選通DS1302</p><p>  mov r7,#8 ;串行移位傳送次數(shù)</p><p>  rds1:rrc a</p><p>  mov io,c ;輸出一位寄存器讀

111、地址</p><p>  setb sclk ;發(fā)串行脈沖</p><p><b>  nop</b></p><p><b>  nop</b></p><p>  clr sclk ;sclk置為低電平</p><p>  djnz

112、r7,rds1</p><p>  nop ;延時(shí),防后面串行讀數(shù)據(jù)丟失</p><p><b>  nop</b></p><p>  setb io ;8位地址輸出完畢,IO設(shè)置為輸入端口</p><p><b>  mov r7,#8</b>

113、</p><p>  rds2: mov c,io ;讀入一位數(shù)據(jù)</p><p><b>  rrc a</b></p><p>  setb sclk ;發(fā)串行脈沖</p><p><b>  nop</b></p><p>&l

114、t;b>  nop</b></p><p><b>  clr sclk</b></p><p>  djnz r7,rds2</p><p><b>  clr rst</b></p><p><b>  setb sclk</b></p>&

115、lt;p><b>  ret</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;; ds1302寫(xiě)數(shù)據(jù)子程序 ;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;

116、;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  clockwr:push acc ;設(shè)置堆棧,入棧</p><p><b>  push b</b></p><p><b>  clr rst</b></p><p><b>  clr s

117、clk</b></p><p>  setb rst ;選通DS1302</p><p><b>  mov r7,#8</b></p><p>  wrs1: rrc a</p><p>  mov io,c ;輸出一位寄存器寫(xiě)地址</p><

118、p>  clr sclk ;發(fā)串行輸出脈沖</p><p><b>  setb sclk</b></p><p>  djnz r7,wrs1</p><p><b>  nop</b></p><p>  mov a,b ;將待寫(xiě)入數(shù)據(jù)送A<

119、/p><p><b>  mov r7,#8</b></p><p>  wrs2: rrc a</p><p>  mov io,c ;經(jīng)IO輸出一位數(shù)據(jù)</p><p><b>  clr sclk</b></p><p><b>  set

120、b sclk</b></p><p>  djnz r7,wrs2</p><p>  pop b ;出棧</p><p><b>  pop acc</b></p><p><b>  ret</b></p><p>  ;;;;;;;

121、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ;;;;;;; 顯示設(shè)置—— 分配時(shí)間顯示空間 ;;;;;;;;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  chaizi: mov a,year

122、 ;拆年</p><p>  mov r0,#60h</p><p>  acall hex2bcd</p><p>  mov a,month ;拆月</p><p>  mov r0,#62h</p><p>  acall hex2bcd</p><p>  mov a,day

123、 ;拆日期</p><p>  mov r0,#64h</p><p>  lcall hex2bcd</p><p>  mov a,week;</p><p><b>  mov 66h,a</b></p><p>  mov a,hour ;拆時(shí)</p>&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論