基于單片機音樂倒數(shù)定時器的設(shè)計_第1頁
基于單片機音樂倒數(shù)定時器的設(shè)計_第2頁
基于單片機音樂倒數(shù)定時器的設(shè)計_第3頁
基于單片機音樂倒數(shù)定時器的設(shè)計_第4頁
基于單片機音樂倒數(shù)定時器的設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄一、設(shè)計要求1二、設(shè)計目的1三、設(shè)計的具體實現(xiàn)21系統(tǒng)概述22單元電路設(shè)計33軟件程設(shè)計和調(diào)試7四、結(jié)論和展望24五、心得體會及建議25六、附錄26七、參考文獻27基于單片機音樂倒數(shù)定時器的設(shè)計報告一、 設(shè)計要求利用單片機結(jié)合LCD顯示器設(shè)計一個倒數(shù)計時器,可以放在家中使用,例如煮方便面、煮開水或小睡片刻等,做一小段時間計時。當(dāng)?shù)箶?shù)計時為0時,則發(fā)出一段音樂,通知倒數(shù)終了,該做重要的事情了。具體要求:文字型LCD(16*2)顯示目前倒數(shù)的時間;顯示格式為“TIME 分分:秒秒”;具有4個按鍵操作來設(shè)置現(xiàn)在想要倒數(shù)的時間;一旦按鍵后則開始倒數(shù)計時,當(dāng)計時為零則發(fā)出一陣音樂聲響,程序執(zhí)行后工作

2、指示燈LED山東,表示程序開始執(zhí)行,七段顯示器顯示“0500”,按下操作鍵K1K4動作如下:操作鍵K1,可調(diào)整倒數(shù)時間1min60min;操作鍵K2,設(shè)置倒數(shù)計時時間為5min,顯示“0500”;操作鍵K3,設(shè)置倒數(shù)計時時間為10min,顯示“1000”;操作鍵K4,設(shè)置倒數(shù)計時時間為20min,顯示“2000”, RESET后按下K1顯示如下:UP DOWN OKTIME 04:59ß倒數(shù)時間操作鍵K2:增加倒數(shù)計時1min;操作鍵K3,減少倒數(shù)計時1min,操作鍵K4:設(shè)置完成。一旦按鍵后則開始倒數(shù)計時,當(dāng)計時為0時則發(fā)出一段音樂,同時繼電器啟動二、 設(shè)計目的1、通過該設(shè)計能提高

3、學(xué)生分析解決問題的能力。2、了解模擬電路及數(shù)字電路的相關(guān)知識。3、學(xué)習(xí)單片機定時器時間計時處理、按鍵掃描、LCD顯示及音樂旋律演奏的設(shè)計方法。 三、設(shè)計的具體實現(xiàn) 1系統(tǒng)概述1.1 總體方案論證要實現(xiàn)音樂倒數(shù)定時器可以用兩種方案實現(xiàn)。方案一:利用PROG-110可編程控制器PROG-110 可編程器,是一種用數(shù)字簡碼控制的產(chǎn)品,它的特點是:自帶一套用于輸入數(shù)碼的按鍵和顯示程序的數(shù)碼管,只要我們現(xiàn)場輸入一列2位數(shù)碼,編制的程序即能完成,即編,即用。每一種數(shù)字簡碼控制器,它都自帶一套系統(tǒng)軟件,每一套系統(tǒng)軟件都有一套相對應(yīng)的指令表,配套的指令表表明,只要輸入什么樣的數(shù),程序?qū)⑷プ鍪裁词拢斎胍涣袛?shù),

4、它就會按次序去完成你要求它做的所有的事。但是首先PROG-110模塊總共只有6個I/O端口,這就必須擴展模塊端口,用兩部以上模塊串聯(lián),但花錢要多;其次是程序過長,PROG-110模塊的E2PROM存儲器24C01只可輸入128步程序;第三是受PROG-110模塊跳轉(zhuǎn)指令步數(shù)的限制。方案二:利用單片機、LCD顯示器和壓電喇叭單片機具有性能高、速度快、體積小、價格低、穩(wěn)定可靠、應(yīng)用廣泛、通用性強等突出優(yōu)點。它在硬件結(jié)構(gòu)、指令系統(tǒng)、I/O端口、功率消耗及可靠性等方面均有其獨特之處,其最顯著的特點之一就是具有非常有效的控制功能。而LCD顯示器具有體積小、重量輕、工作電壓低、功耗極低、顯示內(nèi)容豐富、穩(wěn)定

5、可靠、成本低、控制驅(qū)動方便、接口簡單易用、模塊化結(jié)構(gòu)緊湊等特點。綜上所述,按照設(shè)計要求我選擇第二種方案,即利用單片機和LCD顯示器來實現(xiàn)定時倒數(shù),通過壓電喇叭來發(fā)出音樂。 1.2 單片機選擇方案采用8051單片機8051單片機內(nèi)部包含一個8位CPU、一個片內(nèi)振蕩器及時鐘電路、ROM程序存儲器、RAM數(shù)據(jù)存儲器、兩個16位定時器/計數(shù)器、可分別尋址64KB的程序存儲器空間和64KB的數(shù)據(jù)存儲器空間、32條可編程的I/O口線(4個8位并行I/O端口)、一個可編程全雙工串行口、具有5個中斷源和2個優(yōu)先級的中斷結(jié)構(gòu)。可以有效實現(xiàn)本次設(shè)計中要求的各項功能。具體的設(shè)計流程可見圖1:2單元電路設(shè)計2.1控制

6、電路主程序開始繼電器OFF初始化變量及LCD接口初始化定時器LCD閃動表示程序開始執(zhí)行LCD掃描顯示器更新倒數(shù)時間數(shù)據(jù),檢查鬧鈴時間是否到了是否按K1,K2,K3,K4鍵K1:調(diào)整倒數(shù)時間K2:倒數(shù)計時時間為5MINK3:倒數(shù)計時時間為10MINK4:倒數(shù)計時時間為20MINYN圖1 設(shè)計流程圖2單元電路設(shè)計2.1控制電路倒數(shù)計數(shù)器的控制電路可以見附圖,其中主要分為以下幾部分單片機80518051 基本資料如下:圖2 8051引腳圖 8051主要使用引腳功能說明如下:l 8051的引腳40接+5V電源,引腳20接電源地線。l 傳統(tǒng)8051工作時鐘的最高為12MHz。l EA引腳低電平動作用來存

7、取外部程序ROM控制。l EA接地,由外部程序ROM來執(zhí)行程序。l EA接高電平,由內(nèi)部ROM來執(zhí)行程序。l 開機時必須加入芯片重置信號。(RESET)l RESET信號高電平動作,高電平時產(chǎn)生芯片重置。l RESET信號低電平時,由程序ROM地址0開始執(zhí)行程序。在本次設(shè)計中采用的8051外接電路如圖3所示:圖3 8051外接電路圖8051系列的單片機的時鐘方式分為內(nèi)部方式和外部方式。內(nèi)部方式就是在單片機的引腳18、19外接晶振,就夠成了自激振蕩器在單片機內(nèi)部產(chǎn)生時鐘脈沖信號。外部時鐘方式是把外部已經(jīng)有的時鐘信號引入到單片機內(nèi)部。時鐘電路在計算機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基

8、礎(chǔ)。在一個單片機應(yīng)用系統(tǒng)中,時鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時時鐘,即定時時間。用一個12MHz晶振和兩個30Pf瓷片電容組成,為單片機提供標(biāo)準(zhǔn)時鐘,其中兩個瓷片電容可以增加電路的穩(wěn)定性,可以抗噪聲增加穩(wěn)定性,不容易死機。在8051中之所以采用高性能的振蕩電路,因為:1.單片機電子鐘的計時脈沖基準(zhǔn)是由外部晶振的頻率經(jīng)過12分頻后提供,采用內(nèi)部的定時/計數(shù)器來實現(xiàn)計時功能。所以,外接晶振頻率精確度直接影響電子鐘計時的準(zhǔn)確性。 2.單片機電子鐘利用內(nèi)部定時/計數(shù)器溢出產(chǎn)生中斷(12

9、M晶振一般為50ms)再乘以相應(yīng)的倍率來實現(xiàn)秒、分、時的轉(zhuǎn)換。大家都知道從定時/計數(shù)器產(chǎn)生中斷請求到響 應(yīng)中斷需要3-8個機器周期,定時中斷子程序中的數(shù)據(jù)入棧和重裝定時/計數(shù)器的初值還需要占用數(shù)個機器周期,還有從中斷入口轉(zhuǎn)到中斷子程序也要占用一定的機器周期。工作指示燈LED,送出低電平時,LED點亮,高電平時則使LED熄滅。即l 程序執(zhí)行中有情況產(chǎn)生時,LED閃動一下。l 用于狀態(tài)區(qū)分,如狀態(tài)1閃動一下,狀態(tài)2閃動兩下。l 程序執(zhí)行中遇到特殊錯誤時,持續(xù)閃動。LCD顯示器圖4 LCD芯片接線圖本次設(shè)計使用的倒數(shù)計時LCD控制,使用的是16字*2行設(shè)計。圖4中為4位控制電路,以8051 P0的6

10、調(diào)輸出控制線來實現(xiàn)控制,P0還有提升電阻以增強其驅(qū)動能力,控制信號如下:R/W=0,LCD執(zhí)行寫入的動作,RS寄存器選擇控制線。EN啟用控制線。VO亮度調(diào)整控制引腳。D0D7雙向的數(shù)據(jù)總線。必須在有亮度照明的地方,才能看見時間,若使用LCD,選擇有背光顯示的模塊,則在夜晚或黑暗的場合也可以使用,有背光顯示的LCD模塊在引腳上,與無背光顯示的模塊兼容,指示價格較貴,一般顯示的背光顏色為黃光,與手機的背光顏色相似。按鍵控制按鍵控制室控制程序執(zhí)行時數(shù)據(jù)的輸入或是特殊功能的設(shè)置及操作,使用8051端口2的4條輸入口,由程序來控制,平時輸入端為高電平,當(dāng)有按鍵按下則相對位會呈現(xiàn)低電平,進過輪流掃描判斷輸

11、入端是否為低電平,便可知道按下的是哪一個按鈕。壓電喇叭圖5 壓電喇叭接線圖8051端口3的第4位是壓電喇叭的驅(qū)動位,持續(xù)送出工作脈沖可以推動喇叭發(fā)出嗶的聲響,當(dāng)工作頻率越高時,聲音越清脆,工作頻率低時,聲音則較低沉。繼電器繼電器接點說明如下:NC:常閉點。以COM為共同點,NC與COM在平時是呈導(dǎo)通。COM:共同點。輸出控制接點的共同接點。NO:常開點。NO與COM平時呈開路的狀態(tài),當(dāng)繼電器動作時,NO與COM導(dǎo)通,NC與COM則呈開路狀態(tài)。電源輸入J1為+5V電源輸入,當(dāng)電源加入時電源指示燈LED將亮起,用哪個以指示電源供給正常,定時器在倒數(shù)時間到后壓電喇叭會發(fā)出音樂旋律,并啟動繼電器使其狀

12、態(tài)為ON,控制繼電器的ON/OFF狀態(tài),可以直接控制家電開關(guān)。2.2控制程序本課程設(shè)計中,可以學(xué)習(xí)利用單片機定時器設(shè)計時間計時處理,其時分秒控制,定時器0計時中斷程序每個5ms中斷一次當(dāng)做一個計數(shù),每中斷一次則計數(shù)加1,當(dāng)計數(shù)200次時,表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了,若計數(shù)到了則將相關(guān)變量清除為0。單片機定時器負(fù)責(zé)定時的技術(shù),不會因為案件處理而中斷時間描述的增加,時,分,秒數(shù)據(jù)是存在變量內(nèi)并寫入LCD而顯示相關(guān)時間的。在主控程序循環(huán)中主要工作為掃描是否有按鍵,若有按鍵則做相應(yīng)的功能處理,同時也檢查所倒數(shù)的時間是否為0,若為0表示倒數(shù)的時間終了,應(yīng)該

13、執(zhí)行想對應(yīng)的工作了,圖為主程序控制工作流程。時間計時處理程序時等過了1s 后,則更新時間數(shù)據(jù),將最新剩余倒數(shù)的分秒的時間數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù),并顯示在LCD上。程序中如何判斷是否已過了1s?可以設(shè)一舊秒數(shù)變量,當(dāng)新舊秒數(shù)變量不一樣時,則表示已過了1s,要做相關(guān)程序處理了。倒數(shù)計時鬧鈴的動作利用時間計時處理來做秒數(shù)倒數(shù),當(dāng)所設(shè)置的時間為0,壓電喇叭則不斷發(fā)出音樂聲,LED持續(xù)閃動,啟動繼電器,有繼電器可以控制家電開啟或關(guān)閉。音樂聲的產(chǎn)生也是有定時器來產(chǎn)生固定頻率的方波信號推動壓電喇叭,發(fā)出旋律。而定時器原先已利用設(shè)計時間計時處理了,怎么能在設(shè)計來做音樂旋律的控制?在此設(shè)計定義一個音樂演奏標(biāo)志,若音

14、樂演奏標(biāo)志為0則執(zhí)行中斷程序中計時程序的部分程序,若音樂演奏標(biāo)志為1則執(zhí)行音樂發(fā)生控制程序。因此只要適當(dāng)?shù)倪\用程序設(shè)計技巧,計時中斷程序中可以做許多種不同的工作,而這些工作是需要特定一段時間久必須要被觸發(fā)而被執(zhí)行的程序。倒數(shù)計數(shù)器控制程序文件名為DSDS.ASM。注意:在程序中128行有以下的指令:SINCLUDE (DSDS1.ASM); 加載程序一起來匯編及編譯表示在主程序DSDS.ASM中還會自動加載另一程序DSDS1.ASM程序一起進來匯編及編譯,只是為了方便程序編譯用,一些測試正確的程序代碼可以分別存檔好方便管理,此外整個程序源代碼長度也不至于太長,不方便編輯。DSDS1.ASM主要

15、的程序代碼功能為以定時器演奏歌曲旋律的控制。3軟件程設(shè)計和調(diào)試3.1延時時間的計算若我們想設(shè)計程序執(zhí)行100ms時間延時,程序可以設(shè)計如下DELAY: MOV R6, #50D1:MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET如果震蕩頻率為12MHz則執(zhí)行時間按為T=1+50*(1+100*2)+2+2+2us =10.057ms如果執(zhí)行10次此子程序,則延時時間約為100ms3.2工作方式設(shè)計本次設(shè)計中采用的定時器模式0來設(shè)計,在此方式中T0、T0可以進行13位的計時,其值保存在兩個8位的定時寄存器中。對于其中任一定時器,工作時鐘可以由內(nèi)

16、部或是外部來提供,由C/T位來決定做定時器還是計數(shù)器。定時器的時鐘為系統(tǒng)工作時鐘除以12.此次試驗中采用12MHz石英震蕩器則產(chǎn)生1us的計數(shù)時間脈沖寬度。本次實驗的定時器計時時間為5ms,因此定時器0需計數(shù)5000次,其定時器初值的加載可以計算如下:TL0=(8192-5000).MOD.32TL1=(8192-5000)/32執(zhí)行后的結(jié)果為,產(chǎn)生的脈沖寬度為T=5ms3.3有定時器產(chǎn)生各種頻率的聲音我們可以設(shè)定發(fā)音的頻率來改變聲音產(chǎn)生音樂,計時時間長短也是按照發(fā)音的頻率而定的。由頻率值推得定時器計數(shù)初值由下關(guān)系式得到:T=1/f(us) ;方波寬度Co=(int)t/2 ;定時器所得計數(shù)的

17、次數(shù)Lo=(8192-co)%32 ;計數(shù)初值低字節(jié)Hi=(8192-co)/32 ;計數(shù)初值高字節(jié)軟件的編譯和調(diào)試使用的是KEIL軟件,文件格式是ASM。3.4子程序說明DSDS.ASM 主要控制子程序說明如下:INIT:初始化控制變量。INIT_TIMER:初始化定時器接口,使用定時器0的模式0計時。T0_INT:定時器0計時中斷程序每隔5ms中斷一次,或是做音樂演奏控制。SHOW_DIG:在LCD的第一行顯示數(shù)字。SHOW_DIG2: 在LCD的第二行顯示數(shù)字。SET_LCD:對LCD做初始化工作。CLR_LINE1:清除LCD的第一行顯示字符。CLR_LINE2:清除LCD的第二行顯示

18、字符。LCD_PRINT:在LCD的第一或第二行顯示字符。WCOM:以4位控制方式將命令寫至LCD。WDATA:以4位控制方式將數(shù)據(jù)寫入LCD。LCDP1:在LCD的第一行顯示字符。LCDP2: 在LCD的第二行顯示字符。CONV1:將分秒的倒數(shù)數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)系那是在LCD第二行。DOWN_TIME:檢查是否計時終了。SET_TIME:設(shè)置所要倒數(shù)的時間。BZ:壓電喇叭發(fā)出嗶一聲。TIME_OUT:計時終止啟動音樂演奏。DSDS1.ASM主要控制子程序說明如下:MUSIC:以定時器0計時中斷程序做音樂演奏控制。PLAY:演奏單音控制。PLAY_SONG:測試演奏音樂。SOUND_ON:啟動

19、定時器0開始計時,是喇叭發(fā)聲。SOUND_OFF:停止定時器0計時動作,喇叭靜音。LOAD_VALUE:一查表法由音階計數(shù)值來載入定時器計數(shù)初值。3.5具體程序解釋下面是對本次程序的說明解釋,定義使用軟件,文件名稱,每個鍵的作用。;-; DSDS.ASM 8051 COUNT DOWN TIMER WITH LCD+MUSIC;-; K1: SET MIN 0-60 K2:UP K3:DOWNK4:OK; K2: 5 MIN K3:10 MIN K4:20 MIN;-; 5 mS isr; MOV TL0,#(8192-5000).MOD.32; MOV TH0,#(8192-5000)/32

20、以下是開始對各個變量的具體定義,加載字節(jié),確定時間常數(shù),時間變量的存放,倒數(shù)的分鐘秒鐘的存放地址,各變量的含義。LOAEQU 24HIAEQU 99COEQU 200 ;5ms中斷計數(shù)時間常數(shù),計數(shù)200次表示1sMUBEQU 20H.0HOUREQU 30HMINEQU 31HSECEQU 32HDEDAEQU 33H ; 5 mS計數(shù)值SEC0EQU 34H ;存放舊的秒數(shù)XEQU 35H ;LCD 顯示的地址MMEQU 36H ; 倒數(shù)時間分鐘數(shù)SSEQU 37H ; 倒數(shù)時間秒鐘數(shù)LOEQU 38HHIEQU 39HTCEQU 3AH以下是對四個按鍵的定義K1EQU P2.4K2EQU

21、 P2.5K3EQU P2.6K4EQU P2.7以下是對LCD、繼電器、喇叭、燈的定義RSEQU P0.0ENEQU P0.1RY1EQU P3.5RY2EQU P3.6SPKEQU P3.4WLEDEQU P3.7程序開始,代碼由地址0開始執(zhí)行,使用的是定時器0中斷ORG 0H JMP START ORG 0BH ;T0中斷 JMP T0_INTSTART:SETB MUB ;測試音樂演奏; CALL MUSIC CLR EN ;LCD 的狀態(tài)設(shè)為OFF CLR RY1 CLR RY2 CLR MUB ;清除音樂演奏標(biāo)志 CALL LED_BL CALL SET_LCD CALL BZ C

22、ALL INIT CALL INIT_TIMER CALL MENULOOP:CALL DOWN_TIME JB K1,L1 ;對按鍵進行檢測 JNB K1,$; 按鍵1按下:;MOV MM,#3;MOV SS,#1MOV DPTR,#MADJMOV A,#1CALL LCD_PRINTCALL SET_TIMEMOV DPTR,#MMENUMOV A,#1CALL LCD_PRINTJMP LOOPL1:JB K2,L2JNB K2,$;按鍵2按下:CALL BZMOV MM,#5MOV SS,#1CALL LED_BLJMP LOOPL2:JB K3,L3JNB K3,$;按鍵3按下:CA

23、LL BZCALL BZMOV MM,#10MOV SS,#1CALL LED_BLJMP LOOPL3:JB K4,L4JNB K4,$; 按鍵4按下:CALL BZCALL BZCALL BZMOV MM,#20MOV SS,#1CALL LED_BLJMP LOOPL4:JMP LOOP ;繼續(xù)循環(huán)執(zhí)行$INCLUDE (DSDS1.ASM)以下是在顯示器上顯示的時間消息:;-LMESS1: DB "LCD LINE 1 .",0LMESS2: DB "TIME ",0TITLE:DB "DSDS.ASM 8051 DOWN COUNT

24、WITH LCD+MUSIC"-以下是初始化控制變量INIT:MOV DEDA,#0 ;將所有時間計時清為0MOV SEC0,#0 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0;定義倒數(shù)時間: MOV MM,#5 MOV SS,#1 RET以下是初始化定時器接口,使用定時器0模式0計時INIT_TIMER: MOV TMOD,#00000000B MOV IE, #10000010BMOV TL0,#LOAMOV TH0,#HIASETB TR0RETT0_INT:JNB MUB,W0 ;T0計時中斷程序每5ms中斷一次,音樂演奏標(biāo)志為0時則執(zhí)行計時程序MOV

25、TL0,LO ;對音樂的加載MOV TH0,HICPL SPKRETIW0:PUSH ACC ;對時間計數(shù)的初始化MOV TL0,#LOAMOV TH0,#HIAINC DEDA;判斷是否為1SMOV A,DEDACJNE A,#CO,W1MOV DEDA, #0CPL WLEDINC SECMOV A,SECCJNE A,#60,W1; 判斷是否1分到了INC MINMOV SEC,#0MOV A, MINCJNE A,#60,W1;判斷是否1小時到了INC HOURMOV MIN,#0MOV A, HOURCJNE A,#24,W1MOV SEC,#0 ;清除時間變量為0MOV MIN,#

26、0MOV HOUR,#0W1: POP ACC ;將累加器有堆棧取出RETI以下是使LCD第一行顯示; A:DIG X: LCD X POS; SHOW ON LCD LINE1SHOW_DIG:MOV B,#10 DIV AB ADD A,#30H PUSH B MOV B,X CALL LCDP1 POP B MOV A,B ADD A,#30H INC X MOV B,X CALL LCDP1 RET以下是使LCD第二行顯示; A:DIG X: LCD X POS; SHOW ON LCD LINE2SHOW_DIG2: MOV B,#10DIV AB ADD A,#30HPUSH BM

27、OV B,XCALL LCDP2POP BMOV A,BADD A,#30H INC X MOV B,X CALL LCDP2 RET以下是LCD的控制程序設(shè)計:SET_LCD:CLR EN ;啟動失效 CALL INIT_LCD ;初始化LCD MOV R5,#10CALL DELAYMOV DPTR,#LMESS1MOV A,#1 ;顯示在第一行CALL LCD_PRINTMOV DPTR,#LMESS2MOV A,#2 ;顯示在第二行CALL LCD_PRINTRETLCD控制指令初始化:INIT_LCD1:MOV A,#28HCALL WCOMMOV A,#0CHCALL WCOMMO

28、V A,#0EHCALL WCOMMOV A,#01HCALL WCOMRET清除LCD的第一行字符:CLR_LINE1:MOV A,#80HCALL WCOMMOV R0,#24CLR1:MOV A,#' 'CALL WDATADJNZ R0,CLR1RET在LCD的第一行或第二行顯示字符:LCD_PRINT:CJNE A,#1,LINE2 ;判斷是否為第一行LINE1:MOV A,#80HCALL WCOMCALL CLR_LINEMOV A,#80HCALL WCOMJMP FILLLINE2:MOV A,#0C0HCALL WCOMCALL CLR_LINEMOV A,

29、#0C0HCALL WCOMFILL: ;填入字符CLR AMOVC A,A+DPTRCJNE A,#0,LC1RETLC1: ;寫入數(shù)據(jù)CALL WDATAINC DPTRJMP FILLRETCLR_LINE: ;清除該行的LCD字符MOV R0,#24CL1: MOV A,#' ' CALL WDATADJNZ R0,CL1RETDE:MOV R7, #5 ;短暫延時DJNZ R7,$RETEN1: ;短脈沖產(chǎn)生啟用信號SETB ENCALL DECLR ENCALL DERETINIT_LCD: ;4位I/O控制LCD接口初始化MOV P0, #30HCALL EN1M

30、OV P0, #30HCALL EN1MOV P0, #30HCALL EN1MOV P0, #20HCALL EN1CALL INIT_LCD1RETWCOM: ;以4位控制方式將命令寫入LCD; 高4位數(shù)據(jù)的寫入MOV P0, ACLR RS ;設(shè)置寫入命令CALL EN1RLC ARLC ARLC ARLC A; 低4位數(shù)據(jù)的寫入MOV P0, ACLR RSCALL EN1RETWDATA: ;以4位控制方式將數(shù)據(jù)寫入LCD; 高4位數(shù)據(jù)的寫入MOV P0, ASETB RS ;設(shè)置寫入數(shù)據(jù)CALL EN1RLC ARLC ARLC ARLC A; 高4位數(shù)據(jù)的寫入MOV P0, AS

31、ETB RSCALL EN1RET在LCD的第一行寫入字符LCDP1:PUSH ACCMOV A,BADD A,#80HCALL WCOMPOP ACCCALL WDATARET在LCD的第二行寫入字符LCDP2:PUSH ACCMOV A,BADD A,#0C0HCALL WCOMPOP ACCCALL WDATARET延遲子程序:總延遲時間為R5*10msDELAY:MOV R6,#50D1:MOV R7,#100DJNZ R7,$DJNZ R6,D1DJNZ R5,DELAYRETLED_BL: ;工作指示燈閃爍MOV R4,#4LE1:CPL WLEDMOV R5,#5CALL DEL

32、AYDJNZ R4, LE1RET以下是LCD顯示的關(guān)于菜單和按鍵的消息MMENU:DB "SET 5 10 20 MIN",0MADJ:DB " UP DOWN OK",0MENU:MOV DPTR,#MMENUMOV A,#1CALL LCD_PRINTRET在LCD上顯示倒數(shù)的時間在第二行:CONV1:MOV A,MM ;倒數(shù)的分鐘數(shù)顯示MOV X,#5CALL SHOW_DIG2INC XMOV A,#':' ;顯示:符號MOV B,XCALL LCDP2MOV A,SS ;倒數(shù)的秒數(shù)顯示INC XCALL SHOW_DIG2RE

33、T以下為倒數(shù)的終止程序1:TIME_OUT1:SETB RY1 ;繼電器ONI1:CALL LED_BLCALL BZJMP I1RET過了1S后則更新倒數(shù)時間并檢查是否倒數(shù)終止:DOWN_TIME:MOV A,SEC ;加載現(xiàn)在時間MOV B,SEC0 ;加載舊時間CJNE A,B,DO1 ;是否過了1SRETDO1:MOV SEC0,SEC ;記錄舊秒數(shù)DEC SSMOV A,SSCJNE A,#0,D2 ;判斷秒數(shù)和分鐘數(shù)是否為0MOV A,MMCJNE A,#0,D12CALL TIME_OUT ;當(dāng)秒數(shù)和分鐘數(shù)為0時則停止倒數(shù)計時RETD12:MOV SS,#59 ;秒數(shù)=59 分鐘

34、數(shù)減1DEC MMD2:CALL CONV1 ;更新顯示倒數(shù)的時間RET設(shè)置倒數(shù)的時間,K2為加,K3為減,K4為設(shè)置成功:SET_TIME:CLR TR0MOV SS,#1CALL CONV1以下程序為掃描按下的為哪個鍵S0: JB K2,S1 ;未按下K2則繼續(xù)掃描CALL BZ ;調(diào)整分鐘數(shù)增加INC MMMOV A, MMCJNE A,#60,S11MOV MM,#0S11:CALL CONV1 ;顯示倒數(shù)的時間MOV R5,#20CALL DELAYJMP S0S1:JB K3,S2 ;未按下K3則繼續(xù)掃描; K2 KEYED ADJ DOWN MIN.CALL BZDEC MMMO

35、V A, MMCJNE A,#0,S21MOV MM,#60S21:CALL CONV1 MOV R5,#20CALL DELAYJMP S0S2:JB K4,S0 ;為按下K4則繼續(xù)掃描JNB K4,$ ;有按下則等待放開來CALL BZ ;設(shè)置完成壓電喇叭發(fā)出聲音,LED CALL BZ 閃動,定時器啟動CALL LED_BLSETB TR0RETBZ: MOV R6,#0 ;壓電喇叭發(fā)出聲音B1:CALL DEXCPL SPKDJNZ R6,B1MOV R5,#10CALL DELAYRETDEX: MOV R7,#180 ;短暫延遲DE1: NOPDJNZ R7,DE1RETTIME_

36、OUT:SETB RY1 ;倒數(shù)終了處理程序,繼電器ONTI1:CALL LED_BLCALL BZSETB MUBCALL MUSIC ;設(shè)置音樂JMP TI1RETEND到此主程序完成可以實現(xiàn)本次設(shè)計中要求的主要功能。對于要喇叭發(fā)出音樂聲,則需要下面的DSDS1.ASM程序的介入。主要為音樂程序。DSDS1.ASM的程序清單如下:MUSIC: ;音樂的設(shè)置 MOV TMOD,#00000000B MOV IE, #10000010BM0: CALL SOUND_ON ;喇叭打開 MOV R4,#1 ;發(fā)出“DO”一拍 MOV R3,#1 CALL PLAY CALL LED_BLMOV R

37、4,#2 ;發(fā)出“RE”一拍 MOV R3,#1 CALL PLAY CALL LED_BL MOV R4,#3 ;發(fā)出“ME”一拍 MOV R3,#3 CALL PLAY CALL LED_BL CALL SOUND_OFF ;喇叭關(guān)閉沒有聲音 MOV R5,#50 ;靜音0.5S CALL DELAY下面是一段旋律演奏的程序 CALL SOUND_ON CALL PLAY_SONG CALL SOUND_OFF JMP M0R4音階指針,R3拍數(shù)PLAY:CALL LOAD_VALUE ;單音演奏PL:MOV R5,#10 CALL DELAY DJNZ R3, PL實現(xiàn)暫停: CALL

38、SOUND_OFF MOV R5,#3 CALL DELAY CALL SOUND_ON ;喇叭開啟 RET演奏一段旋律:PLAY_SONG: MOV TC,#0PP0: ;指向旋律音階數(shù)據(jù)列表地址 MOV DPTR, #SONG MOV A,TC MOVC A,A+DPTR MOV R4,A CJNE A,#0FFH,PP1 RETPP1: ;指向旋律拍數(shù)數(shù)據(jù)列表地址 MOV DPTR, #LEN MOV A,TC MOVC A,A+DPTR MOV R3,A CALL PLAY INC TC JMP PP0 RETSOUND_ON: ;喇叭打開 SETB TR0 RETSOUND_OFF:

39、 ;喇叭關(guān)閉 CLR TR0 RET以查表法由音階計數(shù)值來載入計數(shù)初值,R4表示音階計數(shù)值LOAD_VALUE: MOV DPTR,#HI_LIST ;指向數(shù)據(jù)列表地址 MOV A,R4 MOVC A,A+DPTR MOV HI,A MOV DPTR,#LO_LIST MOV A,R4 MOVC A,A+DPTR MOV LO,A RET定時器的設(shè)置用來設(shè)置音樂聲音:HI_LIST: ;音階對應(yīng)定時器0計數(shù)初值高字節(jié)數(shù)據(jù)列表 DB 0,226,229,232,233,236,238,240 DB 241,242,244,244,246,247,248LO_LIST: ;音階對應(yīng)定時器0計數(shù)初值低字節(jié)數(shù)據(jù)列表 DB 0,4,13,10,20,3,8,6 DB 2,23,5,26,1,4,3以下為旋律數(shù)據(jù):SONG: DB 2,6,2,2,3,1,4,3,2,2,1,6,7,1,3,3,5,3,2,7,6,1,0FFHLEN: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH四、 結(jié)論和展望本次設(shè)計比較復(fù)雜,

溫馨提示

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

評論

0/150

提交評論