音樂倒數(shù)定時(shí)系統(tǒng)畢業(yè)論文_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p>  一、設(shè)計(jì)要求……………………………………………1</p><p>  二、設(shè)計(jì)目的……………………………………………1</p><p>  三、設(shè)計(jì)的具體實(shí)現(xiàn)……………………………………2</p><p>  1系統(tǒng)概述…………………………………………2&l

2、t;/p><p>  2單元電路設(shè)計(jì)……………………………………3</p><p>  3軟件程設(shè)計(jì)和調(diào)試…………………………………7</p><p>  四、結(jié)論和展望…………………………………………24</p><p>  五、心得體會(huì)及建議……………………………………25</p><p>  六、附錄……………………

3、……………………………26</p><p>  七、參考文獻(xiàn)……………………………………………27</p><p><b>  設(shè)計(jì)要求</b></p><p>  利用單片機(jī)結(jié)合LCD顯示器設(shè)計(jì)一個(gè)倒數(shù)計(jì)時(shí)器,可以放在家中使用,例如煮方便面、煮開水或小睡片刻等,做一小段時(shí)間計(jì)時(shí)。當(dāng)?shù)箶?shù)計(jì)時(shí)為0時(shí),則發(fā)出一段音樂,通知倒數(shù)終了,該做重要的事情了

4、。</p><p><b>  具體要求:</b></p><p> ?、傥淖中蚅CD(16*2)顯示目前倒數(shù)的時(shí)間;顯示格式為“TIME 分分:秒秒”;具有4個(gè)按鍵操作來設(shè)置現(xiàn)在想要倒數(shù)的時(shí)間;一旦按鍵后則開始倒數(shù)計(jì)時(shí),當(dāng)計(jì)時(shí)為零則發(fā)出一陣音樂聲響,②程序執(zhí)行后工作指示燈LED閃動(dòng),表示程序開始執(zhí)行,七段顯示器顯示“0500”,按下操作鍵K1~K4動(dòng)作如下:操作鍵

5、K1,可調(diào)整倒數(shù)時(shí)間1min~60min;操作鍵K2,設(shè)置倒數(shù)計(jì)時(shí)時(shí)間為5min,顯示“0500”;操作鍵K3,設(shè)置倒數(shù)計(jì)時(shí)時(shí)間為10min,顯示“1000”;操作鍵K4,設(shè)置倒數(shù)計(jì)時(shí)時(shí)間為20min,顯示“2000”, ③RESET后按下K1顯示如下:</p><p>  UP DOWN OK</p><p>  TIME 04:59倒數(shù)時(shí)間</p><p>

6、  操作鍵K2:增加倒數(shù)計(jì)時(shí)1min;操作鍵K3,減少倒數(shù)計(jì)時(shí)1min,操作鍵K4:設(shè)置完成。④一旦按鍵后則開始倒數(shù)計(jì)時(shí),當(dāng)計(jì)時(shí)為0時(shí)則發(fā)出一段音樂,同時(shí)繼電器啟動(dòng)</p><p><b>  設(shè)計(jì)目的</b></p><p>  1、通過該設(shè)計(jì)能提高學(xué)生分析解決問題的能力。</p><p>  2、了解模擬電路及數(shù)字電路的相關(guān)知識(shí)。</

7、p><p>  3、學(xué)習(xí)單片機(jī)定時(shí)器時(shí)間計(jì)時(shí)處理、按鍵掃描、LCD顯示及音樂旋律演奏的設(shè)計(jì)方法。</p><p><b>  三、設(shè)計(jì)的具體實(shí)現(xiàn)</b></p><p><b>  1.系統(tǒng)概述</b></p><p>  1.1 總體方案論證</p><p>  要實(shí)現(xiàn)音樂倒數(shù)

8、定時(shí)器可以用兩種方案實(shí)現(xiàn)。</p><p>  方案一:利用PROG-110可編程控制器</p><p>  PROG-110 可編程器,是一種用《數(shù)字簡(jiǎn)碼》控制的產(chǎn)品,它的特點(diǎn)是:自帶一套用于輸入數(shù)碼的按鍵和顯示程序的數(shù)碼管,只要我們現(xiàn)場(chǎng)輸入一列2位數(shù)碼,編制的程序即能完成,即編,即用。每一種《數(shù)字簡(jiǎn)碼》控制器,它都自帶一套系統(tǒng)軟件,每一套系統(tǒng)軟件都有一套相對(duì)應(yīng)的指令表,配套的指令表表明

9、,只要輸入什么樣的數(shù),程序?qū)⑷プ鍪裁词?,輸入一列?shù),它就會(huì)按次序去完成你要求它做的所有的事。</p><p>  但是首先PROG-110模塊總共只有6個(gè)I/O端口,這就必須擴(kuò)展模塊端口,用兩部以上模塊串聯(lián),但花錢要多;其次是程序過長(zhǎng),PROG-110模塊的E2PROM存儲(chǔ)器24C01只可輸入128步程序;第三是受PROG-110模塊跳轉(zhuǎn)指令步數(shù)的限制。</p><p>  方案二:利用單

10、片機(jī)、LCD顯示器和壓電喇叭</p><p>  單片機(jī)具有性能高、速度快、體積小、價(jià)格低、穩(wěn)定可靠、應(yīng)用廣泛、通用性強(qiáng)等突出優(yōu)點(diǎn)。它在硬件結(jié)構(gòu)、指令系統(tǒng)、I/O端口、功率消耗及可靠性等方面均有其獨(dú)特之處,其最顯著的特點(diǎn)之一就是具有非常有效的控制功能。而LCD顯示器具有體積小、重量輕、工作電壓低、功耗極低、顯示內(nèi)容豐富、穩(wěn)定可靠、成本低、控制驅(qū)動(dòng)方便、接口簡(jiǎn)單易用、模塊化結(jié)構(gòu)緊湊等特點(diǎn)。</p>&

11、lt;p>  綜上所述,按照設(shè)計(jì)要求我選擇第二種方案,即利用單片機(jī)和LCD顯示器來實(shí)現(xiàn)定時(shí)倒數(shù),通過壓電喇叭來發(fā)出音樂。</p><p>  1.2 單片機(jī)選擇方案</p><p><b>  采用8051單片機(jī)</b></p><p>  8051單片機(jī)內(nèi)部包含一個(gè)8位CPU、一個(gè)片內(nèi)振蕩器及時(shí)鐘電路、ROM程序存儲(chǔ)器、RAM數(shù)據(jù)存儲(chǔ)器

12、、兩個(gè)16位定時(shí)器/計(jì)數(shù)器、可分別尋址64KB的程序存儲(chǔ)器空間和64KB的數(shù)據(jù)存儲(chǔ)器空間、32條可編程的I/O口線(4個(gè)8位并行I/O端口)、一個(gè)可編程全雙工串行口、具有5個(gè)中斷源和2個(gè)優(yōu)先級(jí)的中斷結(jié)構(gòu)??梢杂行?shí)現(xiàn)本次設(shè)計(jì)中要求的各項(xiàng)功能。</p><p>  具體的設(shè)計(jì)流程可見圖1:</p><p><b>  2.單元電路設(shè)計(jì)</b></p>&l

13、t;p><b>  2.1控制電路</b></p><p>  圖1 設(shè)計(jì)流程圖</p><p><b>  2.單元電路設(shè)計(jì)</b></p><p><b>  2.1控制電路</b></p><p>  倒數(shù)計(jì)數(shù)器的控制電路可以見附圖,其中主要分為以下幾部分<

14、;/p><p><b> ?、艈纹瑱C(jī)8051</b></p><p>  8051 基本資料如下:</p><p>  圖2 8051引腳圖</p><p>  8051主要使用引腳功能說明如下:</p><p>  8051的引腳40接+5V電源,引腳20接電源地線。</p><

15、p>  傳統(tǒng)8051工作時(shí)鐘的最高為12MHz。</p><p>  EA引腳低電平動(dòng)作用來存取外部程序ROM控制。</p><p>  EA接地,由外部程序ROM來執(zhí)行程序。</p><p>  EA接高電平,由內(nèi)部ROM來執(zhí)行程序。</p><p>  開機(jī)時(shí)必須加入芯片重置信號(hào)。(RESET)</p><p&g

16、t;  RESET信號(hào)高電平動(dòng)作,高電平時(shí)產(chǎn)生芯片重置。</p><p>  RESET信號(hào)低電平時(shí),由程序ROM地址0開始執(zhí)行程序。</p><p>  在本次設(shè)計(jì)中采用的8051外接電路如圖3所示:</p><p>  圖3 8051外接電路圖</p><p>  8051系列的單片機(jī)的時(shí)鐘方式分為內(nèi)部方式和外部方式。內(nèi)部方式就是在單

17、片機(jī)的引腳18、19外接晶振,就夠成了自激振蕩器在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號(hào)。外部時(shí)鐘方式是把外部已經(jīng)有的時(shí)鐘信號(hào)引入到單片機(jī)內(nèi)部。時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間。</p><p>  

18、用一個(gè)12MHz晶振和兩個(gè)30Pf瓷片電容組成,為單片機(jī)提供標(biāo)準(zhǔn)時(shí)鐘,其中兩個(gè)瓷片電容可以增加電路的穩(wěn)定性,可以抗噪聲增加穩(wěn)定性,不容易死機(jī)。</p><p>  在8051中之所以采用高性能的振蕩電路,因?yàn)椋?lt;/p><p>  1.單片機(jī)電子鐘的計(jì)時(shí)脈沖基準(zhǔn)是由外部晶振的頻率經(jīng)過12分頻后提供,采用內(nèi)部的定時(shí)/計(jì)數(shù)器來實(shí)現(xiàn)計(jì)時(shí)功能。所以,外接晶振頻率精確度直接影響電子鐘計(jì)時(shí)的準(zhǔn)確性。

19、</p><p>  2.單片機(jī)電子鐘利用內(nèi)部定時(shí)/計(jì)數(shù)器溢出產(chǎn)生中斷(12M晶振一般為50ms)再乘以相應(yīng)的倍率來實(shí)現(xiàn)秒、分、時(shí)的轉(zhuǎn)換。大家都知道從定時(shí)/計(jì)數(shù)器產(chǎn)生中斷請(qǐng)求到響 應(yīng)中斷需要3-8個(gè)機(jī)器周期,定時(shí)中斷子程序中的數(shù)據(jù)入棧和重裝定時(shí)/計(jì)數(shù)器的初值還需要占用數(shù)個(gè)機(jī)器周期,還有從中斷入口轉(zhuǎn)到中斷子程序也要占用一定的機(jī)器周期。</p><p>  工作指示燈LED,送出低電平時(shí),LE

20、D點(diǎn)亮,高電平時(shí)則使LED熄滅。即</p><p>  程序執(zhí)行中有情況產(chǎn)生時(shí),LED閃動(dòng)一下。</p><p>  用于狀態(tài)區(qū)分,如狀態(tài)1閃動(dòng)一下,狀態(tài)2閃動(dòng)兩下。</p><p>  程序執(zhí)行中遇到特殊錯(cuò)誤時(shí),持續(xù)閃動(dòng)。</p><p><b> ?、芁CD顯示器</b></p><p>  

21、圖4 LCD芯片接線圖</p><p>  本次設(shè)計(jì)使用的倒數(shù)計(jì)時(shí)LCD控制,使用的是16字*2行設(shè)計(jì)。圖4中為4位控制電路,以8051 P0的6調(diào)輸出控制線來實(shí)現(xiàn)控制,P0還有提升電阻以增強(qiáng)其驅(qū)動(dòng)能力,控制信號(hào)如下:R/W=0,LCD執(zhí)行寫入的動(dòng)作,RS寄存器選擇控制線。EN啟用控制線。VO亮度調(diào)整控制引腳。D0~D7雙向的數(shù)據(jù)總線。必須在有亮度照明的地方,才能看見時(shí)間,若使用LCD,選擇有背光顯示的模塊,則

22、在夜晚或黑暗的場(chǎng)合也可以使用,有背光顯示的LCD模塊在引腳上,與無背光顯示的模塊兼容,指示價(jià)格較貴,一般顯示的背光顏色為黃光,與手機(jī)的背光顏色相似。</p><p><b> ?、前存I控制</b></p><p>  按鍵控制室控制程序執(zhí)行時(shí)數(shù)據(jù)的輸入或是特殊功能的設(shè)置及操作,使用8051端口2的4條輸入口,由程序來控制,平時(shí)輸入端為高電平,當(dāng)有按鍵按下則相對(duì)位會(huì)呈現(xiàn)

23、低電平,進(jìn)過輪流掃描判斷輸入端是否為低電平,便可知道按下的是哪一個(gè)按鈕。</p><p><b>  ⑷壓電喇叭</b></p><p>  圖5 壓電喇叭接線圖</p><p>  8051端口3的第4位是壓電喇叭的驅(qū)動(dòng)位,持續(xù)送出工作脈沖可以推動(dòng)喇叭發(fā)出嗶的聲響,當(dāng)工作頻率越高時(shí),聲音越清脆,工作頻率低時(shí),聲音則較低沉。</p>

24、;<p><b> ?、衫^電器</b></p><p>  繼電器接點(diǎn)說明如下:</p><p>  NC:常閉點(diǎn)。以COM為共同點(diǎn),NC與COM在平時(shí)是呈導(dǎo)通。</p><p>  COM:共同點(diǎn)。輸出控制接點(diǎn)的共同接點(diǎn)。</p><p>  NO:常開點(diǎn)。NO與COM平時(shí)呈開路的狀態(tài),當(dāng)繼電器動(dòng)作時(shí),N

25、O與COM導(dǎo)通,NC與COM則呈開路狀態(tài)。</p><p><b> ?、孰娫摧斎?lt;/b></p><p>  J1為+5V電源輸入,當(dāng)電源加入時(shí)電源指示燈LED將亮起,用哪個(gè)以指示電源供給正常,定時(shí)器在倒數(shù)時(shí)間到后壓電喇叭會(huì)發(fā)出音樂旋律,并啟動(dòng)繼電器使其狀態(tài)為ON,控制繼電器的ON/OFF狀態(tài),可以直接控制家電開關(guān)。</p><p><

26、b>  2.2控制程序</b></p><p>  本課程設(shè)計(jì)中,可以學(xué)習(xí)利用單片機(jī)定時(shí)器設(shè)計(jì)時(shí)間計(jì)時(shí)處理,其時(shí)分秒控制,定時(shí)器0計(jì)時(shí)中斷程序每個(gè)5ms中斷一次當(dāng)做一個(gè)計(jì)數(shù),每中斷一次則計(jì)數(shù)加1,當(dāng)計(jì)數(shù)200次時(shí),表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了,若計(jì)數(shù)到了則將相關(guān)變量清除為0。單片機(jī)定時(shí)器負(fù)責(zé)定時(shí)的技術(shù),不會(huì)因?yàn)榘讣幚矶袛鄷r(shí)間描述的增加,時(shí),分,秒

27、數(shù)據(jù)是存在變量?jī)?nèi)并寫入LCD而顯示相關(guān)時(shí)間的。</p><p>  在主控程序循環(huán)中主要工作為掃描是否有按鍵,若有按鍵則做相應(yīng)的功能處理,同時(shí)也檢查所倒數(shù)的時(shí)間是否為0,若為0表示倒數(shù)的時(shí)間終了,應(yīng)該執(zhí)行想對(duì)應(yīng)的工作了,圖為主程序控制工作流程。時(shí)間計(jì)時(shí)處理程序時(shí)等過了1s 后,則更新時(shí)間數(shù)據(jù),將最新剩余倒數(shù)的分秒的時(shí)間數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù),并顯示在LCD上。程序中如何判斷是否已過了1s?可以設(shè)一舊秒數(shù)變量,當(dāng)新舊秒

28、數(shù)變量不一樣時(shí),則表示已過了1s,要做相關(guān)程序處理了。倒數(shù)計(jì)時(shí)鬧鈴的動(dòng)作利用時(shí)間計(jì)時(shí)處理來做秒數(shù)倒數(shù),當(dāng)所設(shè)置的時(shí)間為0,壓電喇叭則不斷發(fā)出音樂聲,LED持續(xù)閃動(dòng),啟動(dòng)繼電器,有繼電器可以控制家電開啟或關(guān)閉。</p><p>  音樂聲的產(chǎn)生也是有定時(shí)器來產(chǎn)生固定頻率的方波信號(hào)推動(dòng)壓電喇叭,發(fā)出旋律。而定時(shí)器原先已利用設(shè)計(jì)時(shí)間計(jì)時(shí)處理了,怎么能在設(shè)計(jì)來做音樂旋律的控制?在此設(shè)計(jì)定義一個(gè)音樂演奏標(biāo)志,若音樂演奏標(biāo)志

29、為0則執(zhí)行中斷程序中計(jì)時(shí)程序的部分程序,若音樂演奏標(biāo)志為1則執(zhí)行音樂發(fā)生控制程序。因此只要適當(dāng)?shù)倪\(yùn)用程序設(shè)計(jì)技巧,計(jì)時(shí)中斷程序中可以做許多種不同的工作,而這些工作是需要特定一段時(shí)間久必須要被觸發(fā)而被執(zhí)行的程序。</p><p>  倒數(shù)計(jì)數(shù)器控制程序文件名為DSDS.ASM。注意:在程序中128行有以下的指令:</p><p>  SINCLUDE (DSDS1.ASM); 加載程序

30、一起來匯編及編譯</p><p>  表示在主程序DSDS.ASM中還會(huì)自動(dòng)加載另一程序DSDS1.ASM程序一起進(jìn)來匯編及編譯,只是為了方便程序編譯用,一些測(cè)試正確的程序代碼可以分別存檔好方便管理,此外整個(gè)程序源代碼長(zhǎng)度也不至于太長(zhǎng),不方便編輯。DSDS1.ASM主要的程序代碼功能為以定時(shí)器演奏歌曲旋律的控制。</p><p>  3.軟件程設(shè)計(jì)和調(diào)試</p><p&

31、gt;  3.1延時(shí)時(shí)間的計(jì)算</p><p>  若我們想設(shè)計(jì)程序執(zhí)行100ms時(shí)間延時(shí),程序可以設(shè)計(jì)如下</p><p>  DELAY: MOV R6, #50</p><p>  D1:MOV R7,#100</p><p>  DJNZ R7,$</p><p>  DJNZ R6,D1</p&

32、gt;<p>  DJNZ R5,DELAY</p><p><b>  RET</b></p><p>  如果震蕩頻率為12MHz則執(zhí)行時(shí)間按為</p><p>  T=1+50*(1+100*2)+2+2+2us</p><p><b>  =10.057ms</b></

33、p><p>  如果執(zhí)行10次此子程序,則延時(shí)時(shí)間約為100ms</p><p><b>  3.2工作方式設(shè)計(jì)</b></p><p>  本次設(shè)計(jì)中采用的定時(shí)器模式0來設(shè)計(jì),在此方式中T0、T0可以進(jìn)行13位的計(jì)時(shí),其值保存在兩個(gè)8位的定時(shí)寄存器中。</p><p>  對(duì)于其中任一定時(shí)器,工作時(shí)鐘可以由內(nèi)部或是外部來提

34、供,由C/T位來決定做定時(shí)器還是計(jì)數(shù)器。定時(shí)器的時(shí)鐘為系統(tǒng)工作時(shí)鐘除以12.此次試驗(yàn)中采用12MHz石英震蕩器則產(chǎn)生1us的計(jì)數(shù)時(shí)間脈沖寬度。本次實(shí)驗(yàn)的定時(shí)器計(jì)時(shí)時(shí)間為5ms,因此定時(shí)器0需計(jì)數(shù)5000次,其定時(shí)器初值的加載可以計(jì)算如下:</p><p>  TL0=(8191-5000).MOD.32</p><p>  TH0=(8191-5000)/32</p><

35、;p>  執(zhí)行后的結(jié)果為,產(chǎn)生的脈沖寬度為</p><p><b>  T=5ms</b></p><p>  3.3有定時(shí)器產(chǎn)生各種頻率的聲音</p><p>  我們可以設(shè)定發(fā)音的頻率來改變聲音產(chǎn)生音樂,計(jì)時(shí)時(shí)間長(zhǎng)短也是按照發(fā)音的頻率而定的。由頻率值推得定時(shí)器計(jì)數(shù)初值由下關(guān)系式得到:</p><p>  T=1

36、/f(us) ;方波寬度</p><p>  Co=(int)t/2 ;定時(shí)器所得計(jì)數(shù)的次數(shù)</p><p>  Lo=(8191-co)%32 ;計(jì)數(shù)初值低字節(jié)</p><p>  Hi=(8191-co)/32 ;計(jì)數(shù)初值高字節(jié)</p><p>  軟件的編譯和調(diào)試使用的是KEIL軟件,文件格式是A

37、SM。</p><p><b>  3.4子程序說明</b></p><p>  DSDS.ASM 主要控制子程序說明如下:</p><p>  INIT:初始化控制變量。</p><p>  INIT_TIMER:初始化定時(shí)器接口,使用定時(shí)器0的模式0計(jì)時(shí)。</p><p>  T0_INT:定

38、時(shí)器0計(jì)時(shí)中斷程序每隔5ms中斷一次,或是做音樂演奏控制。</p><p>  SHOW_DIG:在LCD的第一行顯示數(shù)字。</p><p>  SHOW_DIG2: 在LCD的第二行顯示數(shù)字。</p><p>  SET_LCD:對(duì)LCD做初始化工作。</p><p>  CLR_LINE1:清除LCD的第一行顯示字符。</p>

39、<p>  CLR_LINE2:清除LCD的第二行顯示字符。</p><p>  LCD_PRINT:在LCD的第一或第二行顯示字符。</p><p>  WCOM:以4位控制方式將命令寫至LCD。</p><p>  WDATA:以4位控制方式將數(shù)據(jù)寫入LCD。</p><p>  LCDP1:在LCD的第一行顯示字符。<

40、;/p><p>  LCDP2: 在LCD的第二行顯示字符。</p><p>  CONV1:將分秒的倒數(shù)數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)系那是在LCD第二行。</p><p>  DOWN_TIME:檢查是否計(jì)時(shí)終了。</p><p>  SET_TIME:設(shè)置所要倒數(shù)的時(shí)間。</p><p>  BZ:壓電喇叭發(fā)出嗶一聲。</

41、p><p>  TIME_OUT:計(jì)時(shí)終止啟動(dòng)音樂演奏。</p><p>  DSDS1.ASM主要控制子程序說明如下:</p><p>  MUSIC:以定時(shí)器0計(jì)時(shí)中斷程序做音樂演奏控制。</p><p>  PLAY:演奏單音控制。</p><p>  PLAY_SONG:測(cè)試演奏音樂。</p><

42、;p>  SOUND_ON:啟動(dòng)定時(shí)器0開始計(jì)時(shí),是喇叭發(fā)聲。</p><p>  SOUND_OFF:停止定時(shí)器0計(jì)時(shí)動(dòng)作,喇叭靜音。</p><p>  LOAD_VALUE:一查表法由音階計(jì)數(shù)值來載入定時(shí)器計(jì)數(shù)初值。</p><p><b>  3.5具體程序解釋</b></p><p>  下面是對(duì)本次程序

43、的說明解釋,定義使用軟件,文件名稱,每個(gè)鍵的作用。</p><p>  ;---------------------------------------------------</p><p>  ; DSDS.ASM 8051 COUNT DOWN TIMER WITH LCD+MUSIC</p><p>  ;-------------------------

44、--------------------------</p><p>  ; K1: SET MIN 0--60 K2:UP K3:DOWNK4:OK</p><p>  ; K2: 5 MIN K3:10 MIN K4:20 MIN</p><p>  ;----------------------------------------------&l

45、t;/p><p><b>  ; 5 ms </b></p><p>  ; MOV TL0,#(8191-5000).MOD.32</p><p>  ; MOV TH0,#(8191-5000)/32</p><p>  以下是開始對(duì)各個(gè)變量的具體定義,加載字節(jié),確定時(shí)間常數(shù),時(shí)間變量的存放,倒數(shù)的分鐘秒鐘的存放地址,各

46、變量的含義。</p><p>  LOAEQU 24</p><p>  HIAEQU 99</p><p>  COEQU 200 ;5ms中斷計(jì)數(shù)時(shí)間常數(shù),計(jì)數(shù)200次表示1s</p><p>  MUBEQU 20H.0</p><p>  HOUREQU 30H</p><

47、p>  MINEQU 31H</p><p>  SECEQU 32H</p><p>  DEDAEQU 33H ; 5 mS計(jì)數(shù)值</p><p>  SEC0EQU 34H ;存放舊的秒數(shù)</p><p>  XEQU 35H ;LCD 顯示

48、的地址</p><p>  MMEQU 36H ; 倒數(shù)時(shí)間分鐘數(shù)</p><p>  SSEQU 37H ; 倒數(shù)時(shí)間秒鐘數(shù)</p><p>  LOEQU 38H</p><p>  HIEQU 39H</p><p>  TCEQU 3AH

49、</p><p>  以下是對(duì)四個(gè)按鍵的定義</p><p>  K1EQU P2.4</p><p>  K2EQU P2.5</p><p>  K3EQU P2.6</p><p>  K4EQU P2.7</p><p>  以下是對(duì)LCD、繼電器、喇叭、燈的定義</p&g

50、t;<p>  RSEQU P0.0</p><p>  ENEQU P0.1</p><p>  RY1EQU P3.5</p><p>  RY2EQU P3.6</p><p>  SPKEQU P3.4</p><p>  WLEDEQU P3.7</p><p&g

51、t;  程序開始,代碼由地址0開始執(zhí)行,使用的是定時(shí)器0中斷</p><p><b>  ORG 0H</b></p><p><b>  JMP START</b></p><p>  ORG 0BH ;T0中斷</p><p>  JMP T0_INT</p>

52、<p>  START:SETB MUB ;測(cè)試音樂演奏</p><p>  ; CALL MUSIC</p><p>  CLR EN ;LCD 的狀態(tài)設(shè)為OFF</p><p><b>  CLR RY1</b></p><p><b>  CLR RY

53、2</b></p><p>  CLR MUB ;清除音樂演奏標(biāo)志</p><p>  CALL LED_BL</p><p>  CALL SET_LCD</p><p><b>  CALL BZ</b></p><p><b>  CALL IN

54、IT</b></p><p>  CALL INIT_TIMER</p><p><b>  CALL MENU</b></p><p>  LOOP:CALL DOWN_TIME</p><p>  JB K1,L1 ;對(duì)按鍵進(jìn)行檢測(cè)</p><p><b

55、>  JNB K1,$</b></p><p><b>  ; 按鍵1按下:</b></p><p>  ;MOV MM,#3</p><p>  ;MOV SS,#1</p><p>  MOV DPTR,#MADJ</p><p><b>  MOV A,#1&

56、lt;/b></p><p>  CALL LCD_PRINT</p><p>  CALL SET_TIME</p><p>  MOV DPTR,#MMENU</p><p><b>  MOV A,#1</b></p><p>  CALL LCD_PRINT</p>&

57、lt;p><b>  JMP LOOP</b></p><p>  L1:JB K2,L2</p><p><b>  JNB K2,$</b></p><p><b>  ;按鍵2按下:</b></p><p><b>  CALL BZ</b>

58、;</p><p><b>  MOV MM,#5</b></p><p><b>  MOV SS,#1</b></p><p>  CALL LED_BL</p><p><b>  JMP LOOP</b></p><p>  L2:JB K3

59、,L3</p><p><b>  JNB K3,$</b></p><p><b>  ;按鍵3按下:</b></p><p><b>  CALL BZ</b></p><p><b>  CALL BZ</b></p><p>

60、;  MOV MM,#10</p><p><b>  MOV SS,#1</b></p><p>  CALL LED_BL</p><p><b>  JMP LOOP</b></p><p>  L3:JB K4,L4</p><p><b>  JNB

61、K4,$</b></p><p><b>  ; 按鍵4按下:</b></p><p><b>  CALL BZ</b></p><p><b>  CALL BZ</b></p><p><b>  CALL BZ</b></p>

62、;<p>  MOV MM,#20</p><p><b>  MOV SS,#1</b></p><p>  CALL LED_BL</p><p><b>  JMP LOOP</b></p><p>  L4:JMP LOOP ;繼續(xù)循環(huán)執(zhí)行</p>

63、;<p>  $INCLUDE (DSDS1.ASM)</p><p>  以下是在顯示器上顯示的時(shí)間消息:</p><p>  ;--------------------------------------------</p><p>  LMESS1: DB "LCD LINE 1 .....",0</p><

64、;p>  LMESS2: DB "TIME ",0</p><p>  TITLE:DB "DSDS.ASM 8051 DOWN COUNT WITH LCD+MUSIC"</p><p>  ;--------------------------------------------</p><p&g

65、t;  以下是初始化控制變量</p><p>  INIT:MOV DEDA,#0 ;將所有時(shí)間計(jì)時(shí)清為0</p><p>  MOV SEC0,#0</p><p>  MOV SEC,#0</p><p>  MOV MIN,#0</p><p>  MOV HOUR,#0</p>

66、<p><b> ??;定義倒數(shù)時(shí)間:</b></p><p><b>  MOV MM,#5</b></p><p><b>  MOV SS,#1</b></p><p><b>  RET</b></p><p>  以下是初始化定時(shí)器接口,

67、使用定時(shí)器0模式0計(jì)時(shí)</p><p>  INIT_TIMER:</p><p>  MOV TMOD,#00000000B</p><p>  MOV IE, #10000010B</p><p>  MOV TL0,#LOA</p><p>  MOV TH0,#HIA</p><p>

68、<b>  SETB TR0</b></p><p><b>  RET</b></p><p>  T0_INT:JNB MUB,W0 ;T0計(jì)時(shí)中斷程序每5ms中斷一次,音樂演奏標(biāo)志為0時(shí)則執(zhí)行計(jì)時(shí)程序</p><p>  MOV TL0,LO ;對(duì)音樂的加載</p>&l

69、t;p>  MOV TH0,HI</p><p><b>  CPL SPK</b></p><p><b>  RETI</b></p><p>  W0:PUSH ACC ;對(duì)時(shí)間計(jì)數(shù)的初始化</p><p>  MOV TL0,#LOA</p>&

70、lt;p>  MOV TH0,#HIA</p><p><b>  INC DEDA</b></p><p><b>  ;判斷是否為1S</b></p><p>  MOV A,DEDA</p><p>  CJNE A,#CO,W1</p><p>  MOV DE

71、DA, #0</p><p><b>  CPL WLED</b></p><p><b>  INC SEC</b></p><p><b>  MOV A,SEC</b></p><p>  CJNE A,#60,W1</p><p>  ; 判斷是

72、否1分到了</p><p><b>  INC MIN</b></p><p>  MOV SEC,#0</p><p>  MOV A, MIN</p><p>  CJNE A,#60,W1</p><p>  ;判斷是否1小時(shí)到了</p><p><b> 

73、 INC HOUR</b></p><p>  MOV MIN,#0</p><p>  MOV A, HOUR</p><p>  CJNE A,#24,W1</p><p>  MOV SEC,#0 ;清除時(shí)間變量為0</p><p>  MOV MIN,#0</p>&

74、lt;p>  MOV HOUR,#0</p><p>  W1: POP ACC ;將累加器有堆棧取出</p><p><b>  RETI</b></p><p>  以下是使LCD第一行顯示</p><p>  ; A:DIG X: LCD X POS</p><p

75、>  ; SHOW ON LCD LINE1</p><p>  SHOW_DIG:MOV B,#10</p><p><b>  DIV AB</b></p><p>  ADD A,#30H</p><p><b>  PUSH B</b></p><p><

76、b>  MOV B,X</b></p><p>  CALL LCDP1</p><p><b>  POP B</b></p><p><b>  MOV A,B</b></p><p>  ADD A,#30H</p><p><b>  IN

77、C X</b></p><p><b>  MOV B,X</b></p><p>  CALL LCDP1</p><p><b>  RET</b></p><p>  以下是使LCD第二行顯示</p><p>  ; A:DIG X: LCD X POS

78、</p><p>  ; SHOW ON LCD LINE2</p><p>  SHOW_DIG2: MOV B,#10</p><p><b>  DIV AB</b></p><p>  ADD A,#30H</p><p><b>  PUSH B</b></

79、p><p><b>  MOV B,X</b></p><p>  CALL LCDP2</p><p><b>  POP B</b></p><p><b>  MOV A,B</b></p><p>  ADD A,#30H</p>&l

80、t;p><b>  INC X</b></p><p><b>  MOV B,X</b></p><p>  CALL LCDP2</p><p><b>  RET</b></p><p>  以下是LCD的控制程序設(shè)計(jì):</p><p>  

81、SET_LCD:CLR EN ;啟動(dòng)失效</p><p>  CALL INIT_LCD ;初始化LCD</p><p>  MOV R5,#10</p><p>  CALL DELAY</p><p>  MOV DPTR,#LMESS1</p><p>  M

82、OV A,#1 ;顯示在第一行</p><p>  CALL LCD_PRINT</p><p>  MOV DPTR,#LMESS2</p><p>  MOV A,#2 ;顯示在第二行</p><p>  CALL LCD_PRINT</p><p>&l

83、t;b>  RET</b></p><p>  LCD控制指令初始化:</p><p>  INIT_LCD1:</p><p>  MOV A,#28H</p><p><b>  CALL WCOM</b></p><p>  MOV A,#0CH</p>&l

84、t;p><b>  CALL WCOM</b></p><p>  MOV A,#0EH</p><p><b>  CALL WCOM</b></p><p>  MOV A,#01H</p><p><b>  CALL WCOM</b></p><

85、;p><b>  RET</b></p><p>  清除LCD的第一行字符:</p><p>  CLR_LINE1:</p><p>  MOV A,#80H</p><p><b>  CALL WCOM</b></p><p>  MOV R0,#24</

86、p><p>  CLR1:MOV A,#' '</p><p>  CALL WDATA</p><p>  DJNZ R0,CLR1</p><p><b>  RET</b></p><p>  在LCD的第一行或第二行顯示字符:</p><p>  LC

87、D_PRINT:</p><p>  CJNE A,#1,LINE2 ;判斷是否為第一行</p><p>  LINE1:MOV A,#80H</p><p><b>  CALL WCOM</b></p><p>  CALL CLR_LINE</p><p>  MOV A,#8

88、0H</p><p><b>  CALL WCOM</b></p><p><b>  JMP FILL</b></p><p>  LINE2:MOV A,#0C0H</p><p><b>  CALL WCOM</b></p><p>  CA

89、LL CLR_LINE</p><p>  MOV A,#0C0H</p><p><b>  CALL WCOM</b></p><p>  FILL: ;填入字符</p><p><b>  CLR A</b></p><p> 

90、 MOVC A,@A+DPTR</p><p>  CJNE A,#0,LC1</p><p><b>  RET</b></p><p>  LC1: ;寫入數(shù)據(jù)</p><p>  CALL WDATA</p><p><b>  INC

91、DPTR</b></p><p><b>  JMP FILL</b></p><p><b>  RET</b></p><p>  CLR_LINE: ;清除該行的LCD字符</p><p>  MOV R0,#24</p><p

92、>  CL1: MOV A,#' ' </p><p>  CALL WDATA</p><p>  DJNZ R0,CL1</p><p><b>  RET</b></p><p>  DE:MOV R7, #5 ;短暫延時(shí)</p><p>&

93、lt;b>  DJNZ R7,$</b></p><p><b>  RET</b></p><p>  EN1: ;短脈沖產(chǎn)生啟用信號(hào)</p><p><b>  SETB EN</b></p><p><b>  CALL

94、 DE</b></p><p><b>  CLR EN</b></p><p><b>  CALL DE</b></p><p><b>  RET</b></p><p>  INIT_LCD: ;4位I/O控制LCD接口

95、初始化</p><p>  MOV P0, #30H</p><p><b>  CALL EN1</b></p><p>  MOV P0, #30H</p><p><b>  CALL EN1</b></p><p>  MOV P0, #30H</p>

96、<p><b>  CALL EN1</b></p><p>  MOV P0, #20H</p><p><b>  CALL EN1</b></p><p>  CALL INIT_LCD1</p><p><b>  RET</b></p><

97、;p>  WCOM: ;以4位控制方式將命令寫入LCD</p><p>  ; 高4位數(shù)據(jù)的寫入</p><p><b>  MOV P0, A</b></p><p>  CLR RS ;設(shè)置寫入命令</p><p><b> 

98、 CALL EN1</b></p><p><b>  RLC A</b></p><p><b>  RLC A</b></p><p><b>  RLC A</b></p><p><b>  RLC A</b></p>&

99、lt;p>  ; 低4位數(shù)據(jù)的寫入</p><p><b>  MOV P0, A</b></p><p>  CLR RSCALL EN1</p><p><b>  RET</b></p><p>  WDATA: ;以4位控制方式將數(shù)據(jù)寫入LC

100、D</p><p>  ; 高4位數(shù)據(jù)的寫入</p><p><b>  MOV P0, A</b></p><p>  SETB RS ;設(shè)置寫入數(shù)據(jù)</p><p><b>  CALL EN1</b></p><p><b>

101、  RLC A</b></p><p><b>  RLC A</b></p><p><b>  RLC A</b></p><p><b>  RLC A</b></p><p>  ; 高4位數(shù)據(jù)的寫入</p><p><b>

102、;  MOV P0, A</b></p><p><b>  SETB RS</b></p><p><b>  CALL EN1</b></p><p><b>  RET</b></p><p>  在LCD的第一行寫入字符</p><p&g

103、t;  LCDP1:PUSH ACC</p><p><b>  MOV A,B</b></p><p>  ADD A,#80H</p><p><b>  CALL WCOM</b></p><p><b>  POP ACC</b></p><p&g

104、t;  CALL WDATA</p><p><b>  RET</b></p><p>  在LCD的第二行寫入字符</p><p>  LCDP2:PUSH ACC</p><p><b>  MOV A,B</b></p><p>  ADD A,#0C0H</

105、p><p><b>  CALL WCOM</b></p><p><b>  POP ACC</b></p><p>  CALL WDATA</p><p><b>  RET</b></p><p>  延遲子程序:總延遲時(shí)間為R5*10ms</

106、p><p><b>  DELAY:</b></p><p>  MOV R6,#50</p><p>  D1:MOV R7,#100</p><p><b>  DJNZ R7,$</b></p><p>  DJNZ R6,D1</p><p> 

107、 DJNZ R5,DELAY</p><p><b>  RET</b></p><p>  LED_BL: ;工作指示燈閃爍</p><p><b>  MOV R4,#4</b></p><p>  LE1:CPL WLED</p>&

108、lt;p><b>  MOV R5,#5</b></p><p>  CALL DELAY</p><p>  DJNZ R4, LE1</p><p><b>  RET</b></p><p>  以下是LCD顯示的關(guān)于菜單和按鍵的消息</p><p>  MMEN

109、U:DB "SET 5 10 20 MIN",0</p><p>  MADJ:DB " UP DOWN OK",0</p><p><b>  MENU:</b></p><p>  MOV DPTR,#MMENU</p><p><b>  MOV A,

110、#1</b></p><p>  CALL LCD_PRINT</p><p><b>  RET</b></p><p>  在LCD上顯示倒數(shù)的時(shí)間在第二行:</p><p><b>  CONV1:</b></p><p>  MOV A,MM

111、 ;倒數(shù)的分鐘數(shù)顯示</p><p><b>  MOV X,#5</b></p><p>  CALL SHOW_DIG2</p><p><b>  INC X</b></p><p>  MOV A,#':' ;顯示’:’符號(hào)&l

112、t;/p><p><b>  MOV B,X</b></p><p>  CALL LCDP2</p><p>  MOV A,SS ;倒數(shù)的秒數(shù)顯示</p><p><b>  INC X</b></p><p>  CALL SHOW_DIG

113、2</p><p><b>  RET</b></p><p>  以下為倒數(shù)的終止程序1:</p><p>  TIME_OUT1:</p><p>  SETB RY1 ;繼電器ON</p><p>  I1:CALL LED_BL</p>

114、<p><b>  CALL BZ</b></p><p><b>  JMP I1</b></p><p><b>  RET</b></p><p>  過了1S后則更新倒數(shù)時(shí)間并檢查是否倒數(shù)終止:</p><p>  DOWN_TIME:</p>

115、<p>  MOV A,SEC ;加載現(xiàn)在時(shí)間</p><p>  MOV B,SEC0 ;加載舊時(shí)間</p><p>  CJNE A,B,DO1 ;是否過了1S</p><p><b>  RET</b></p><p

116、><b>  DO1:</b></p><p>  MOV SEC0,SEC ;記錄舊秒數(shù)</p><p><b>  DEC SS</b></p><p><b>  MOV A,SS</b></p><p>  CJNE A,#0,D2

117、 ;判斷秒數(shù)和分鐘數(shù)是否為0</p><p><b>  MOV A,MM</b></p><p>  CJNE A,#0,D12</p><p>  CALL TIME_OUT ;當(dāng)秒數(shù)和分鐘數(shù)為0時(shí)則停止倒數(shù)計(jì)時(shí)</p><p><b>  RET</b></

118、p><p><b>  D12:</b></p><p>  MOV SS,#59 ;秒數(shù)=59 分鐘數(shù)減1</p><p><b>  DEC MM</b></p><p><b>  D2:</b></p><p>  CALL CONV

119、1 ;更新顯示倒數(shù)的時(shí)間</p><p><b>  RET</b></p><p>  設(shè)置倒數(shù)的時(shí)間,K2為加,K3為減,K4為設(shè)置成功:</p><p><b>  SET_TIME:</b></p><p><b>  CLR TR0</b></p&g

120、t;<p><b>  MOV SS,#1</b></p><p>  CALL CONV1</p><p>  以下程序?yàn)閽呙璋聪碌臑槟膫€(gè)鍵</p><p>  S0: JB K2,S1 ;未按下K2則繼續(xù)掃描</p><p>  CALL BZ ;

121、調(diào)整分鐘數(shù)增加</p><p><b>  INC MM</b></p><p><b>  MOV A, MM</b></p><p>  CJNE A,#60,S11</p><p><b>  MOV MM,#0</b></p><p><b

122、>  S11:</b></p><p>  CALL CONV1 ;顯示倒數(shù)的時(shí)間</p><p>  MOV R5,#20</p><p>  CALL DELAY</p><p><b>  JMP S0</b></p><p>  S1:JB K3

123、,S2 ;未按下K3則繼續(xù)掃描</p><p>  ; K2 KEYED ADJ DOWN MIN.</p><p><b>  CALL BZ</b></p><p><b>  DEC MM</b></p><p><b>  MOV A, MM<

124、/b></p><p>  CJNE A,#0,S21</p><p>  MOV MM,#60</p><p><b>  S21:</b></p><p>  CALL CONV1 </p><p>  MOV R5,#20</p><p>

125、;  CALL DELAY</p><p><b>  JMP S0</b></p><p>  S2:JB K4,S0 ;為按下K4則繼續(xù)掃描</p><p>  JNB K4,$ ;有按下則等待放開來</p><p>  CALL BZ

126、 ;設(shè)置完成壓電喇叭發(fā)出聲音,LED </p><p>  CALL BZ 閃動(dòng),定時(shí)器啟動(dòng)</p><p>  CALL LED_BL</p><p><b>  SETB TR0</b></p><p><b>  RET</b></p>&

127、lt;p>  BZ: MOV R6,#0 ;壓電喇叭發(fā)出聲音</p><p>  B1:CALL DEX</p><p><b>  CPL SPK</b></p><p>  DJNZ R6,B1</p><p>  MOV R5,#10</p><p>  C

128、ALL DELAY</p><p><b>  RET</b></p><p>  DEX: MOV R7,#180 ;短暫延遲</p><p><b>  DE1: NOP</b></p><p>  DJNZ R7,DE1</p><p><b>

129、;  RET</b></p><p>  TIME_OUT:SETB RY1 ;倒數(shù)終了處理程序,繼電器ON</p><p>  TI1:CALL LED_BL</p><p><b>  CALL BZ</b></p><p><b>  SETB MUB</b>&

130、lt;/p><p>  CALL MUSIC ;設(shè)置音樂</p><p><b>  JMP TI1</b></p><p><b>  RET</b></p><p><b>  END</b></p><p>  到此主程序完成

131、可以實(shí)現(xiàn)本次設(shè)計(jì)中要求的主要功能。對(duì)于要喇叭發(fā)出音樂聲,則需要下面的DSDS1.ASM程序的介入。主要為音樂程序。</p><p>  DSDS1.ASM的程序清單如下:</p><p>  MUSIC: ;音樂的設(shè)置</p><p>  MOV TMOD,#00000000B</p><p>  M

132、OV IE, #10000010B</p><p><b>  M0:</b></p><p>  CALL SOUND_ON ;喇叭打開</p><p>  MOV R4,#1 ;發(fā)出“DO”一拍</p><p><b>  MOV R3,#1</b

133、></p><p><b>  CALL PLAY</b></p><p>  CALL LED_BL</p><p>  MOV R4,#2 ;發(fā)出“RE”一拍</p><p><b>  MOV R3,#1</b></p><p>&l

134、t;b>  CALL PLAY</b></p><p>  CALL LED_BL</p><p>  MOV R4,#3 ;發(fā)出“ME”一拍</p><p><b>  MOV R3,#3</b></p><p><b>  CALL PLAY</b>

135、;</p><p>  CALL LED_BL</p><p>  CALL SOUND_OFF ;喇叭關(guān)閉沒有聲音</p><p>  MOV R5,#50 ;靜音0.5S</p><p>  CALL DELAY</p><p>  下面是一段旋律演奏的程序</

136、p><p>  CALL SOUND_ON</p><p>  CALL PLAY_SONG</p><p>  CALL SOUND_OFF</p><p><b>  JMP M0</b></p><p>  R4音階指針,R3拍數(shù)</p><p>  PLAY:CALL

137、LOAD_VALUE ;單音演奏</p><p>  PL:MOV R5,#10</p><p>  CALL DELAY</p><p>  DJNZ R3, PL</p><p><b>  實(shí)現(xiàn)暫停:</b></p><p>  CALL SOUND_OFF</p>

138、<p><b>  MOV R5,#3</b></p><p>  CALL DELAY</p><p>  CALL SOUND_ON ;喇叭開啟</p><p><b>  RET</b></p><p><b>  演奏一段旋律:</b>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論