電子音樂盒(單片機課程設(shè)計)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課程設(shè)計工作內(nèi)容與基本要求(設(shè)計要求、設(shè)計任務(wù)、工作計劃</p><p><b>  1.設(shè)計要求</b></p><p>  查閱資料,了解單片機控制單音喇叭發(fā)聲原理;設(shè)計基于單片機的電子音樂盒;通過按鈕可選擇不同的音樂。 </p><p><b>  創(chuàng)新設(shè)計:</b></p>&l

2、t;p>  1、安裝復(fù)位鍵,暫停、播放鍵; </p><p>  2、有6首不同的音樂用程序編出可供選擇。</p><p>  2. 設(shè)計任務(wù)與要求</p><p>  2.1系統(tǒng)硬件電路設(shè)計</p><p>  根據(jù)該系統(tǒng)設(shè)計的功能要求選擇所用元器件,設(shè)計硬件電路。要求用Proteus繪制整個系統(tǒng)電路原理圖。</p

3、><p><b>  2.2軟件設(shè)計</b></p><p>  根據(jù)該系統(tǒng)要求的功能進行軟件設(shè)計,繪制整個系統(tǒng)的軟件流程圖;根據(jù)流程圖編寫程序并匯編調(diào)試通過;列出軟件清單,軟件清單要求逐條加以注釋。</p><p>  2.3 Proteus仿真</p><p>  用Proteus對系統(tǒng)進行仿真并進行軟硬件調(diào)試。<

4、/p><p>  2.4 編寫設(shè)計說明書</p><p>  內(nèi)容包括任務(wù)書、設(shè)計方案分析、硬件部分設(shè)計、軟件部分設(shè)計、調(diào)試結(jié)果整理分析、設(shè)計調(diào)試的心得體會等,字數(shù)不少于4000字;硬件部分設(shè)計要繪制整個系統(tǒng)電路原理圖,對各部分電路設(shè)計原理做出說明;軟件設(shè)計部分要繪制整個系統(tǒng)及各部分的軟件流程圖,列出程序清單,逐條加以注釋,并在各功能塊前加程序功能注釋。</p><p>

5、;<b>  電子音樂盒</b></p><p>  1 設(shè)計任務(wù)和要求 ................................................. 1</p><p>  2 總體方案設(shè)計 ................................................. 1</p><p>  

6、3 硬件設(shè)計 ................................................... 2</p><p>  3.1 硬件電路 ............................................. 2</p><p>  3.2 系統(tǒng)總框圖 ......................................

7、....... 2</p><p>  3.3 器件選擇 ............................................. 2</p><p>  3.4 原理圖設(shè)計 ............................................ 3</p><p>  3.5 原理說明 ..........

8、................................... 6</p><p>  4 軟件設(shè)計 ................................................... 7</p><p>  5 仿真、安裝和調(diào)試 .............................................. 8</p>&l

9、t;p>  收獲與體會 ...................................................... 10</p><p>  參考文獻 ........................................................11</p><p>  附件1:元件清單 ..........................

10、.....................12</p><p>  附件2: 總電路圖 ...............................................13</p><p>  附件3:音樂程序 ...............................................14</p><p>  1 設(shè)計任務(wù)

11、和要求</p><p>  1.利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演樂曲(內(nèi)存六首樂曲)。</p><p>  2.采用七段數(shù)碼管顯示當前播放的歌曲序號。</p><p>  3.可通過功能鍵選擇樂曲,包括暫停和播放,上一曲,下一曲,復(fù)位。</p><p><b>  2 總體方案設(shè)計</b&g

12、t;</p><p>  1. 要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/音頻),然后將此周期除以2,即為半周期的時間,利用定時器計時這個半周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復(fù)計時此半周期時間再對I/O口反相,就可在I/O腳上得到此頻率的脈沖</p><p>  2. 利用8051的內(nèi)部定時器使其工作在計數(shù)器模式MODE1下,改變記數(shù)值TH0及TL0以產(chǎn)生不同頻率的方

13、法。例如頻率為523HZ,其周期T=1/523=1912微秒,因此只要令計數(shù)器定時956/1=956在每記數(shù)9次時將I/O口反相,就可得到中音D0(523HZ)。</p><p>  記數(shù)脈沖值與頻率的關(guān)系公式如下:</p><p>  N=Fi/2/Fr N:記數(shù)值</p><p>  Fi:內(nèi)部計時一次為1微秒.故其頻率為1MHZ</p>&

14、lt;p><b>  Fr;要產(chǎn)生的頻率</b></p><p>  3. 起記數(shù)值的求法如下:</p><p>  T=65536-N=65536-Fi/2/Fr</p><p>  例如:設(shè)K=65536,F(xiàn)=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的記數(shù)值。</p><

15、p>  T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr</p><p>  低音D0的T=65536-500000/262=63627</p><p>  中音D0的T=65536-500000/523=64580</p><p>  低音D0的T=65536-500000/1047=650

16、59</p><p><b>  3 系統(tǒng)硬件設(shè)計</b></p><p><b>  3.1 硬件電路</b></p><p>  本設(shè)計中用到89C51單片機,喇叭,七段顯示數(shù)碼管LED。(硬件電路原理圖如圖1所示)</p><p>  3.2 系統(tǒng)總框圖</p><p

17、><b>  圖1 總體方案圖</b></p><p><b>  3.3 器件選擇</b></p><p><b>  1、單片機的選擇</b></p><p>  采用ATMEL公司生產(chǎn)的AT89C51單片機作為電子音樂盒的核心部件,AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能C

18、MOS8位單片機,片內(nèi)含4k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲單元,功能強大AT89C51單片機可提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p>  2、7SEG-DIGITAL簡介&l

19、t;/p><p>  七段顯示器顯示原理七段顯示器可用來顯示單一的十進制或十六進制的數(shù)字,它是由八個發(fā)光二極管所構(gòu)成的( 每一個二極管依位置不同而賦予不同的名稱,請參見圖4.1 ) 。我們可以簡單的說,要產(chǎn)生數(shù)字,便是點亮特定數(shù)據(jù)的發(fā)光二極管。例如要產(chǎn)生數(shù)字「0」,須只點亮A、B、C、D、E、F等節(jié)段的發(fā)光二極管;要產(chǎn)生數(shù)字「5」,則須點亮A、C、D、F、G等節(jié)段發(fā)光二極管,以此類推,參見圖4.6。因此,以共陽極七段

20、顯示器而言,要產(chǎn)生數(shù)字「0」,必須控制Cyclone II FPGA芯片接連至A、B、C、D、E、F 等接腳呈現(xiàn)“低電位”,使電路形成通路狀態(tài)。表4.1則為共陽極七段顯示器顯示之數(shù)字編碼。 </p><p><b>  3.4 原理圖設(shè)計</b></p><p><b>  1、晶振電路</b></p><p>  單

21、片機需要一個時間基準來為各種操作提供秩序,此電路叫時鐘電路,采用不同的接線方式可以獲得不同時鐘電路,有內(nèi)部時鐘電路和外部時鐘電路,外部時鐘電路會使電路復(fù)雜,故采用的是內(nèi)部時鐘電路。時鐘電路在單片機的外部通過XTAL1,XTAL2這兩個引腳跨接晶體振蕩器和微調(diào)電容,構(gòu)成穩(wěn)定的自激振蕩器.本系統(tǒng)采用的為12MHz的晶振,一個機器周期為1us,C1,C2為30uF。</p><p><b>  2、復(fù)位電路&

22、lt;/b></p><p>  復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分-合過程中引起的抖動而影響復(fù)位。</p><p>  復(fù)位電路分為上電自動復(fù)位和按鍵手動復(fù)位,如圖2所示。RST引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效.這次采用的是手動復(fù)位,復(fù)位通過電容C

23、3,C4和電阻R1,R2來實現(xiàn),按鍵手動復(fù)位是圖中復(fù)位鍵來實現(xiàn)的。</p><p>  圖 2 晶振與復(fù)位電路</p><p><b>  3、鍵盤部分</b></p><p>  鍵盤是由一組按壓式或觸摸式開關(guān)構(gòu)成的陣列,是一種常用的輸入設(shè)備。鍵盤可分為編碼式鍵盤和非編碼式鍵盤兩種。</p><p> ?。?).編碼鍵

24、盤通過硬件電路產(chǎn)生被按按鍵的鍵碼,這種鍵盤所需程序簡單,但硬件電路復(fù)雜、價格昂貴通常不被單片機系統(tǒng)采用。</p><p> ?。?.)非編碼鍵盤常用一些按鍵排列成行列矩陣,其硬件邏輯與按鍵編碼不存在嚴格的對應(yīng)關(guān)系,而要由所用的程序來決定。非編碼鍵盤的硬件接口簡單,但是要占用較多的CPU時間,通常采用可編程鍵盤管理芯片來克服這個缺點。本設(shè)計使用兩種按鍵,一種是按鍵式非編碼鍵盤和輕觸式非編碼開關(guān)。</p>

25、<p><b>  圖 3 鍵盤電路</b></p><p>  4、7SEG-DIGITAL LCD</p><p>  七段顯示器LCD顯示原理用P1.0-P1.6控制七段碼a,b,c,d,e,f,g</p><p>  圖4 LCD顯示電路</p><p><b>  5、蜂鳴器部分<

26、;/b></p><p>  一般所指的蜂鳴器是以壓電陶瓷為主要元件的。壓電陶瓷是一類有將壓力與電流相互轉(zhuǎn)換能力的特殊陶瓷。這種能力緣于其特殊的晶體結(jié)構(gòu)。當壓電陶瓷在一定方向上受到一個壓力使其晶體結(jié)構(gòu)發(fā)生形變時,它就會在內(nèi)部產(chǎn)生一個電流,并且電流的變化與壓力的變化密切相關(guān)。反之亦然。所以利用這一特性,在壓電陶瓷上通過一定頻率的電流,就會引起壓電陶瓷微小形變,這一形變帶動空氣發(fā)生振動,如果頻率適當,就可以被人

27、耳所聽見,也就是產(chǎn)生了蜂鳴聲。</p><p>  由于蜂鳴器的工作電流一般比較大,以致于單片機的I/O 口是無法直接驅(qū)動的,所以要利用放大電路來驅(qū)動,一般使用三極管來放大電流就可以了。</p><p><b>  圖5 蜂鳴器電路</b></p><p><b>  3.5 原理說明</b></p>&l

28、t;p>  當鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅(qū)動蜂鳴器,放出樂曲。同時啟動定時器T1,顯示歌曲號。</p><p> ?。?)硬件電路中用、分別接S1、S2作為上、下一曲的功能鍵</p><p> ?。?)用P1.0-P1.6控制七段碼a,b,c,d,e,f。</p><p> ?。?)用P2.0口控制喇叭。</p&

29、gt;<p> ?。?)電路為12MHZ晶振頻率工作,起振電路中C1,C2均為30pf。</p><p>  圖1 音樂盒原理圖</p><p><b>  4 軟件設(shè)計</b></p><p>  本程序可以實現(xiàn)課程設(shè)計的基本要求,并可以通過按鍵播放歌曲,程序流程圖如下:</p><p>  5

30、仿真、安裝和調(diào)試</p><p>  按照上面設(shè)計的電路在proteus軟件內(nèi)畫圖, 打開單片機軟件開發(fā)系統(tǒng)Keil,選擇89c51單片機,在其中編寫程序,運行生成一個后綴名為hex的文件,然后將該文件下載到proteus中的AT89c51單片機中進行仿真,觀察實驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目,暫停、播放,復(fù)位功能。仿真成功后,安裝好實驗板,然后將音樂程序下載到電路板內(nèi) ,觀察結(jié)果。能實現(xiàn)播放音樂,按鍵

31、換曲等功能。</p><p>  程序調(diào)試中出現(xiàn)的問題及解決的辦法:</p><p> ?。?) 有時會出現(xiàn)程序一點錯誤也沒有,但就是不能正常運行的現(xiàn)象,最后我們發(fā)現(xiàn)是因為程序中有的指令書寫得不規(guī)范導(dǎo)致的,例如有的RET返回指令一定要按正確格式書寫或在兩行指令間最好不要留空行。</p><p>  (2) 程序中的跳轉(zhuǎn)指令的運用很重要,為保險起見,都用LJMP,我們

32、就遇到過跳轉(zhuǎn)指令用錯程序無法正常運行的現(xiàn)象。當用JNZ指令時,跳轉(zhuǎn)范圍比較少,這時要用一個標號中轉(zhuǎn)。</p><p>  (3) 編程時要注意,在程序開始時,要寫入各定時器中斷的入口地址。</p><p> ?。?) 編程過程中要注意加注釋或分割線,否則,在程序過長時容易變得很亂,不便于查找或更改。</p><p>  (5) 編程前要加流程圖,這樣會使思路清晰,例

33、如數(shù)字音樂盒的設(shè)計思路完全可以按著MP3的工作方式列寫流程圖。</p><p> ?。?) LCD計時正常顯示的解決辦法:</p><p>  a. 兩個定時器同時工作,存在中斷時序問題,剛開始時我們把定時器1設(shè)定在方式3,計250us,由于定時中斷過于頻繁,使CPU負載過大,導(dǎo)致音樂不能正常播放,時間不能正常顯示。</p><p>  解決辦法:將定時器1設(shè)定在工

34、作方式1,16位計數(shù),計50ms,效果有很大改觀。但還有問題。</p><p>  b. 當音樂為全4拍起始時,此時音樂節(jié)奏與定時器T1中斷頻率錯開,LCD顯示和音樂播放都會好一些。</p><p>  c. 另外,在歌曲中,當遇到一個音符發(fā)音為4拍,在編曲中為*CH,因時間較長,當定時器T1此時來中斷時,就會對歌曲播放產(chǎn)生影響,若改為發(fā)音一拍,中斷對歌曲播放影響減弱,但音樂效果變差。&l

35、t;/p><p>  改進方案:若采用可以定時時間更長的單片機,可以避免所有問題。</p><p><b>  收獲與體會</b></p><p>  (1) 上學(xué)期學(xué)習(xí)單片機的課時不多,對單片機的硬件設(shè)計,軟件設(shè)計掌握的深度不夠,但通過此次課程設(shè)計,明顯的改善了,首先對于硬件電路的工作原理有了進一步的學(xué)習(xí),同時有了一個提升;軟件方面,在程序的設(shè)計

36、,程序的調(diào)試方面都有了很大的進步。</p><p>  (2) 在一個好的氛圍里才能踏下心來做東西,在這一段時間里,寢室成員都認真對待這次課程設(shè)計,除了自己做好自己的課題外,在遇到不懂的地方互相討論,查閱資料,互助解決問題。另外在編程中出現(xiàn)問題時,一定要戒驕戒躁,腳踏實地,認真看書,仔細分析,仔細調(diào)試,就一定會發(fā)現(xiàn)錯誤。我們也是這么做的,這一點在這次的課程設(shè)計中十分重要。</p><p>

37、  (3) 通過這次課程設(shè)計,我體會到了成功的喜悅,聽著自己設(shè)計的程序下載到單片機中播放出音樂,心理非常自豪。這次的課程設(shè)計在一定程度上改變了我學(xué)習(xí)單片機這門課程的態(tài)度,從最初的認為學(xué)它沒有什么實際意義,到如今愛上單片機學(xué)習(xí),并希望能將理論運用到實踐,設(shè)計出更好更完整的系統(tǒng)。我明白了一個人要想做好一件事,就必須具備自信心,耐心,還要有毅力,要膽大心細,要勇于嘗試,要手腦并用,最后才能交出一份令人滿意的答卷。</p><

38、;p><b>  附件1:元件清單</b></p><p><b>  附件2:總電路圖</b></p><p><b>  附件3:音樂程序</b></p><p>  OUT BIT P2.0 ;定義音頻輸出端口,p2.0</p><p&g

39、t;  N EQU 6 ;歌曲總數(shù)</p><p>  OUT_NUM EQU P1 ;數(shù)碼管顯視當前所放歌曲曲數(shù)</p><p><b>  ORG 0000H</b></p><p><b>  AJMP MAIN</b></p><p><b>  OR

40、G 0003H</b></p><p>  AJMP LAST_SONG ;外部中斷0用于接上一曲歌按鍵</p><p><b>  ORG 000BH</b></p><p>  AJMP F_T0 ;定時器0用于定時,作音符發(fā)生器用</p><p>&

41、lt;b>  ORG 0013H</b></p><p>  q4: AJMP NEXT_SONG ;外部中斷1接下一曲歌按鍵</p><p><b>  ORG 001BH</b></p><p>  AJMP START_PAUSE ;定時器1用計數(shù),這里用作中斷,接開始/暫停鍵,初值為0ffH

42、,方式2</p><p><b>  ORG 0030H</b></p><p>  MAIN: MOV SP,#60H</p><p>  MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。</p><p>  MOV R0,#30H ;R0中存入數(shù)據(jù)30H,這里在以30H開始的單

43、元存放每首歌曲的入口地址,其中30H,31H存放歌曲的節(jié)拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四個存儲存單元。</p><p>  MOV R5,#00H;R5中存放表TABLE中正在執(zhí)行操作的序號</p><p>  MOV R6,#1;R6存放正在設(shè)置入口信息的歌曲數(shù)</p><p>  SET_TAB: MOV A,R5

44、 ;設(shè)置每首歌曲的入口信息,存放在以30H開始的存儲單元中。</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV @R0,A</b></p><p><b>  INC R5</b></p><p><b>  INC R0</b><

45、/p><p><b>  MOV A,R5</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV @R0,A</b></p><p><b>  INC R5</b></p><p><b>  INC R0

46、</b></p><p><b>  MOV A,R5</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV @R0,A</b></p><p><b>  INC R0</b></p><p><

47、;b>  INC R5</b></p><p><b>  MOV A,R5</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV @R0,A</b></p><p><b>  INC R0</b></p>

48、<p><b>  INC R5</b></p><p>  INC R6 ;設(shè)置完一首歌曲后,歌曲數(shù)加一</p><p>  CJNE R6,#N+1,SET_TAB ;是否設(shè)置完,沒有便繼續(xù),否則進行下面的操作</p><p>  ;************************ 對中斷,

49、計數(shù)器的相關(guān)參數(shù)進行設(shè)置</p><p>  MOV TMOD, #61H;計數(shù)器0工作方式1,計數(shù)器1工作方式2</p><p>  MOV TH1,#0FFH ;給計數(shù)器1置初值0FFH,是工作方式2</p><p>  MOV TL1,#0FFH;計數(shù)器計數(shù)為1,相當于一外部中斷。</p><p>  SETB

50、 ET1 ;允許計數(shù)器1中斷</p><p>  SETB ET0 ;允許計數(shù)器具0中斷</p><p>  CLR PT0 ;計數(shù)器0為低優(yōu)先級</p><p>  SETB PT1;計數(shù)器1為高優(yōu)先級</p><p>  SETB IT0

51、 ;外部中斷0為跳沿觸發(fā)</p><p>  SETB PX0 ;高優(yōu)先級</p><p>  SETB IT1 ;外部中斷1為跳沿觸發(fā)</p><p>  SETB PX1 ;高優(yōu)先級</p><p>  SETB EX1 ;

52、允許外部中斷1中斷</p><p>  SETB EX0 ;允許外部中斷定0中斷</p><p>  SETB EA ;開中斷總開關(guān)</p><p>  SETB TR1 ;定時器1開始工作,作中斷用</p><p>  SETB OUT;音頻輸出端口初始化<

53、/p><p>  ;*********************************** ;設(shè)置結(jié)束</p><p>  CLR F0 ;設(shè)置F0=0,用來作暫停/播放的標置位用</p><p>  MOV 22H,#01H ;22H單元中存放正在播放的歌曲編號</p><p>  MOV DPTR,#OUT_

54、TAB ;將正在播放的歌曲編號送數(shù)碼管顯視</p><p><b>  MOV A,22H</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A</p><p>  MOV R7,#00H ;R7中存放歌曲總信息的入口地址</p>

55、<p>  START0:MOV R4,#00H ;R4存放當前正在播放歌曲的第幾個節(jié)拍數(shù)</p><p>  MOV R0,#30H ;30H開始的單元中存放歌曲的入口信息</p><p>  MOV A,R7 ;將歌曲的節(jié)拍表的入口地址送到DPTR</p><p><b>  ADD A,R0</b&g

56、t;</p><p><b>  MOV R0,A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><b>  INC R0</b><

57、/p><p><b>  MOV A,R4</b></p><p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR ;取出第一節(jié)拍數(shù),其實第一個節(jié)拍不是歌曲的第一個節(jié)拍,而是表示幾分音符</p><p>  ;************************

58、****************************</p><p>  MOV 26H,A ;將取出的音符數(shù)+節(jié)拍數(shù)保存在職26H單元中</p><p>  NEXT: MOV R0,#30H ;開始取出歌曲的第一個數(shù)據(jù)</p><p><b>  MOV A,R7</b></p><p>

59、;<b>  ADD A,R0</b></p><p><b>  MOV R0,A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><

60、;b>  INC R0</b></p><p><b>  MOV A,R4</b></p><p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR ;放在A中</p><p>  ;***************

61、*************************************</p><p>  JZ END0 ;若為0,則表示為休止符,不唱,本次音符不唱,</p><p>  MOV R1,A ;不為0,取出節(jié)拍數(shù)</p><p>  ANL A,#0FH</p><p><b>

62、  MOV R2,A</b></p><p><b>  MOV A,R1</b></p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  JNZ SING ;音符不為0,唱</p&g

63、t;<p>  CLR TR0 ;為0,不唱,關(guān)頻率發(fā)生器</p><p>  SJMP SING1</p><p>  SING: DEC A ;開始唱,進行相應(yīng)的數(shù)據(jù)處理</p><p><b>  MOV R3,A</b></

64、p><p><b>  RL A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><b>  INC R0</b></p><

65、;p>  MOVC A,@A+DPTR</p><p><b>  MOV 21H,A</b></p><p><b>  MOV TH0,A</b></p><p><b>  MOV A,R3</b></p><p><b>  RL A</b>

66、;</p><p><b>  INC A</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV 20H,A</b></p><p><b>  MOV TL0,A</b></p><p>  SETB TR0

67、 ;開唱</p><p>  SING1:LCALL DELAY ;每個音符唱多久</p><p>  JB F0,FOR ;是否暫停,</p><p>  AJMP NEXT ;沒有暫停,繼續(xù)</p><p>  FOR: CLR

68、TR0 ;暫停,不唱</p><p>  JB F0,$ ;等待播放</p><p>  AJMP NEXT ;開始播放</p><p>  END0: CLR TR0 ;不唱</p><p> 

69、 MOV A,22H ;唱完處理</p><p>  CJNE A,#N,WW ;是不是全部歌曲都唱完</p><p>  MOV 22H,#01H ;全部唱完,則從第一首開始再唱</p><p>  MOV R7,#00H</p><p>  MOV OUT_

70、NUM,#11111001B ;數(shù)碼管顯視第一首歌曲編號</p><p><b>  AJMP WWW</b></p><p>  WW: MOV A,R7 ;沒有全部唱完,唱下一首,歌曲的入口信息調(diào)整</p><p><b>  ADD A,#4</b></p><p&

71、gt;<b>  MOV R7,A</b></p><p><b>  INC 22H</b></p><p><b>  CLR EA</b></p><p><b>  PUSH DPH</b></p><p><b>  PUSH DPL

72、</b></p><p><b>  MOV A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A ;數(shù)碼管顯視相應(yīng)的歌曲編號</p><p&

73、gt;<b>  POP DPL</b></p><p><b>  POP DPH</b></p><p>  WWW: SETB EA</p><p>  AJMP START0 ;開始下一首的演唱</p><p>  F_T0: MOV TH0,21H

74、 ;定時器0置初值</p><p>  MOV TL0,20H</p><p>  CPL OUT ;頻率產(chǎn)生</p><p><b>  RETI</b></p><p>  NEXT_SONG: PUSH ACC ;下一曲中斷程

75、序處理,保護現(xiàn)場</p><p><b>  PUSH DPH</b></p><p><b>  PUSH DPL</b></p><p>  CLR EA ;關(guān)中斷</p><p>  MOV A,22H</p><p>  CJ

76、NE A,#N,Q ;是最后一首嗎?</p><p>  MOV R7,#00H ;是最后一首,則R7指向第一首,演唱第一首</p><p>  MOV 22H,#01H</p><p><b>  AJMP BACK</b></p><p>  Q: INC 22H

77、;不是最后一首,唱下一首,R7內(nèi)容加4,歌曲數(shù)加1</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,#4</b></p><p><b>  MOV R7,A</b></p><p>  BACK: MOV R4,#00H

78、 ;數(shù)碼管顯視相應(yīng)的歌曲編號</p><p><b>  MOV A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A</p><p>  ;********

79、************************************</p><p>  MOV B,R0 ;對下首要演唱的歌曲的幾分拍進行調(diào)整,同時對R0中的內(nèi)容進行保護</p><p>  MOV R4,#00H</p><p>  MOV R0,#30H</p><p><b>  MOV A,R7</b>&

80、lt;/p><p><b>  ADD A,R0</b></p><p><b>  MOV R0,A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</

81、p><p><b>  INC R0</b></p><p><b>  MOV A,R4</b></p><p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV 26H,A

82、 ;結(jié)果存入26H單元中</p><p><b>  DEC R4</b></p><p>  MOV R0,B ;恢復(fù)R0中的內(nèi)容</p><p>  ;********************************************</p><p>  POP

83、DPL ;恢復(fù)現(xiàn)場</p><p><b>  POP DPH</b></p><p><b>  POP ACC</b></p><p><b>  SETB EA</b></p><p>  RETI ;中斷

84、返回</p><p>  LAST_SONG: PUSH ACC ;上一曲中斷程序處理開始,保護現(xiàn)場</p><p><b>  PUSH DPH</b></p><p><b>  PUSH DPL</b></p><p>  CLR EA ;關(guān)中

85、斷</p><p>  MOV A,22H ;曲目數(shù)送A</p><p>  CJNE A,#1,QQ ;是否是第一首</p><p>  MOV 22H,#N ;是第一首歌曲</p><p>  MOV B,#4 ;將R7指向最后一首歌曲</p&

86、gt;<p>  MOV A,#N-1</p><p><b>  MUL AB</b></p><p><b>  MOV R7,A</b></p><p>  AJMP BACK2 ;處理結(jié)束</p><p>  QQ: DEC 22H</

87、p><p>  MOV A,R7 ;R7減4</p><p><b>  SUBB A,#4</b></p><p><b>  MOV R7,A</b></p><p>  BACK2: MOV R4,#00H</p><p><b>  MOV

88、 A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A ;數(shù)碼管顯視相應(yīng)歌曲的編號</p><p>  ;********************************************<

89、/p><p>  MOV B,R0;對下首要演唱的歌曲的幾分拍進行調(diào)整,同時對R0中的內(nèi)容進行保護</p><p>  MOV R4,#00H</p><p>  MOV R0,#30H</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,R0&l

90、t;/b></p><p><b>  MOV R0,A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><b>  INC R0</b&g

91、t;</p><p><b>  MOV A,R4</b></p><p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV 26H,A ;結(jié)果存入26H單元中</p><p>&l

92、t;b>  DEC R4</b></p><p>  MOV R0,B;R0中的內(nèi)容恢復(fù)</p><p>  ;********************************************</p><p>  POP DPL ;恢復(fù)現(xiàn)場</p><p><b>  POP DPH&l

93、t;/b></p><p><b>  POP ACC</b></p><p><b>  SETB EA</b></p><p>  RETI ;中斷返回</p><p>  START_PAUSE:CPL F0 ;開始/暫停中斷處理程序,

94、將標置位取反</p><p>  JB F0,RETURN ;為1返回</p><p>  SETB TR0 ;為0則播放</p><p>  RETURN: RETI ;中斷返回</p><p>  DELAY: MOV 27H,26H ;音符演奏時間控制&l

95、t;/p><p>  D2: MOV 28H,#125</p><p>  D3: MOV 29H,#248</p><p>  DJNZ 29H,$</p><p>  DJNZ 28H,D3</p><p>  DJNZ 27H,D2</p><p>  DJNZ R2,DELAY&

96、lt;/p><p><b>  RET</b></p><p>  ;OUT_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,73H ;共陰數(shù)碼管顯視用</p><p>  OUT_TAB: DB 0C0H,0F9H,0A4

97、H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ;共陽</p><p>  TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4 ,SONG5,TABLE5</p><p>  TABLE1:DW 64580,64684,64777,64

98、820,64898,64968,65030</p><p>  DW 63628,63835,64021,64103,64260,64400,64524</p><p>  SONG1: DB 04H ;1=C 2/4 軍港之夜</p><p>  DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52

99、H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p><p>  DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H</p><p>

100、  DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H</p><p>  DB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H

101、,31H,31H,32H,54H,52H,32H,52H,52H,32H</p><p>  DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H</p><p>  DB 32H,52H,52H

102、,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p><p>  DB 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p><p>  DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2

103、H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H</p><p>  DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H</p><p>  D

104、B 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H</p><p>  DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H

105、,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H</p><p>  DB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p><p>  DB 32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,1

106、4H,14H</p><p><b>  DB 00H</b></p><p>  TABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684,64777</p><p>  DW 64820,64898,64968,65030,65058,65110,65157,65178</p&

107、gt;<p>  SONG2: DB 02H;1=C 4/4 死了都要愛</p><p>  DB 04H,94H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H</p><p>  DB 0A4H,0A2H,0B2H,0B

108、4H,0C4H,84H,82H,92H,94H,0A4H</p><p>  DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H</p><p>

109、  DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H</p><p>  DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H</p><p>  DB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D8H,78H,28H

110、,38H,34H,24H</p><p>  DB 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H ;#音不準</p><p>  DB 58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H,98H,08H</p><p>

111、;  DB 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H</p><p>  ;;*************************************************</p><p>  DB 0A8H,0A4H,0A2H,0B

112、2H,0C4H,0B4H,0A4H,0A4H,0A4H,92H,92H,98H,82H,72H,78H,04H,0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H</p><p>  DB 04H,0C4H,0D4H,0C4H,0C8H,04H,94H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H

113、,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02</p><p>  DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,8

114、4H,84H,92H,92H,94H,92H,02</p><p>  DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H</p><p>  ;*************</p><p>  DB 0A4H,0A2H,0B2H,0B3H,0C

115、4H,0E8H,0D8H</p><p>  DB 0C8H,0C8H,0C8H,08H</p><p><b>  DB 00H</b></p><p>  TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,648

116、62</p><p>  SONG3: DB 03H ;G=2/4 中華人民共和國國歌</p><p>  DB 04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H</p><p>  DB 32H,31H,

117、31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H</p><p>  DB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12

118、H,34H,32H,32H,54H,54H,54H,54H</p><p>  DB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H</p><p>  DB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H

119、,0C4H,14H,14H,04H</p><p>  DB 04H,04H,04H,04H</p><p><b>  DB 00H</b></p><p>  TABLE4:DW 64260,64400,64524,64580 ,64684,64777,64280,64898,64968,65030,65058,65110,65157,65

120、178,65217</p><p>  SONG4:DB 04H ;生日快樂</p><p><b>  ;1</b></p><p>  DB 82H,01H,81H,94H,84H</p><p>  DB 0B4H,0A4H,04H</p><p>  DB 82H,01H,81H,94H

121、,84H</p><p>  DB 0C4H,0B4H,04H</p><p><b>  ;2</b></p><p>  DB 82H,01H,81H,94H,84H</p><p>  DB 0B4H,0A4H,04H</p><p>  DB 82H,01H,81H,94H,84H<

122、/p><p>  DB 0C4H,0B4H,04H</p><p><b>  ;3</b></p><p>  DB 82H,01H,81H,94H,84H</p><p>  DB 0B4H,0A4H,04H</p><p>  DB 82H,01H,81H,94H,84H</p>

123、<p>  DB 0C4H,0B4H,04H</p><p><b>  ;4</b></p><p>  DB 82H,01H,81H,94H,84H</p><p>  DB 0B4H,0A4H,04H</p><p>  DB 82H,01H,81H,94H,84H</p><p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論