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

下載本文檔

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

文檔簡介

1、<p><b>  課程設計(說明書)</b></p><p><b>  電子音樂盒的設計</b></p><p>  2013年01月 12日</p><p><b>  課程設計任務書</b></p><p>  題目: 電子音樂

2、盒的設計 </p><p>  課程: 單片機課程設計 </p><p>  課程設計時間 2012年 12月21 日 至2012年1 月3日 共 2 周</p><p>  課程設計工作內容與基本要求(設計要求、設計任務、工作計劃、所需相關資料

3、)(紙張不夠可加頁)</p><p><b>  1.設計要求</b></p><p>  查閱資料,了解單片機控制單音喇叭發(fā)聲原理;設計基于單片機的電子音樂盒;通過按鈕可選擇不同的音樂。 </p><p><b>  創(chuàng)新設計:</b></p><p>  1、安裝復位鍵,暫停、播放鍵;

4、 </p><p>  2、有6首不同的音樂用程序編出可供選擇。</p><p>  2. 設計任務與要求</p><p>  2.1系統(tǒng)硬件電路設計</p><p>  根據(jù)該系統(tǒng)設計的功能要求選擇所用元器件,設計硬件電路。要求用Proteus繪制整個系統(tǒng)電路原理圖。</p><p><b>  2.2

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

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

7、p><b>  4.主要參考資料</b></p><p>  單片機課程設計指導書 皮大能 北京理工大學出版社2010.7</p><p>  8051單片機實踐與應用 吳金戎 清華大學出版社2003.8</p><p>  單片機技術基礎教程與實踐 夏路易 電子工業(yè)出版社 2008.1</p><p

8、>  MCS-51單片機原理接口及應用王質樸 北京理工大學出版社2009.11</p><p>  基于Proteus的單片機系統(tǒng)設計與仿真實例 蔣輝平 機械工業(yè)出版社 2009.7</p><p><b>  指導老師簽字:</b></p><p>  日 期:</p><p><b&

9、gt;  電子音樂盒</b></p><p>  1 設計任務和要求 ................................................. 1</p><p>  2 總體方案設計 ................................................. 1</p><p>  3 硬件設

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

11、 2</p><p>  3.3 器件選擇 ............................................. 2</p><p>  3.4 原理圖設計 ............................................ 3</p><p>  3.5 原理說明 .................

12、............................ 6</p><p>  4 軟件設計 ................................................... 7</p><p>  5 仿真、安裝和調試 .............................................. 8</p><p>

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

14、..............12</p><p>  附件2: 總電路圖 ...............................................13</p><p>  附件3:音樂程序 ...............................................14</p><p>  1 設計任務和要求<

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

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

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

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

19、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=65059</

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

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

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

23、;<p>  七段顯示器顯示原理七段顯示器可用來顯示單一的十進制或十六進制的數(shù)字,它是由八個發(fā)光二極管所構成的( 每一個二極管依位置不同而賦予不同的名稱,請參見圖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。因此,以共陽極七段顯示器而言,要

24、產(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 原理圖設計</b></p><p><b>  1、晶振電路</b></p><p>  單片機需要一個時

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

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

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

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

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

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

31、生了蜂鳴聲。</p><p>  由于蜂鳴器的工作電流一般比較大,以致于單片機的I/O 口是無法直接驅動的,所以要利用放大電路來驅動,一般使用三極管來放大電流就可以了。</p><p><b>  圖5 蜂鳴器電路</b></p><p><b>  3.5 原理說明</b></p><p>  

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

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

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

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

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

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

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

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

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

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

42、lt;b>  參考文獻</b></p><p>  [1] 許珉.單片機原理及應用[M].北京:中國電力出版社,2007.08</p><p>  [2] 三恒星科技.MCS-51單片機原理與應用實例[M]. 北京:電子工業(yè)出版社,2008.01</p><p>  [3] 王為青,程國鋼.單片機Keil Cx51應用開發(fā)技術[M]. 北京

43、:人民郵電出版社,2007.02</p><p>  [4] John Markus.電子電路大全[M].北京:計量出版社,1995</p><p>  [5] 閻石.數(shù)字電子技術基礎[M].北京:高等教育出版社,1998.12,第4版</p><p>  [6] 鄧元慶.數(shù)字電路與邏輯設計[M].北京:電子工業(yè)出版社,2001</p><

44、p>  [7] http://www.picavr.com/news/2008-06/5859.htm</p><p><b>  附件1:元件清單</b></p><p><b>  附件2:總電路圖</b></p><p><b>  附件3:音樂程序</b></p><

45、p>  OUT BIT P2.0 ;定義音頻輸出端口,p2.0</p><p>  N EQU 6;歌曲總數(shù)</p><p>  OUT_NUM EQU P1;數(shù)碼管顯視當前所放歌曲曲數(shù)</p><p><b>  ORG 0000H</b></p><p&g

46、t;<b>  AJMP MAIN</b></p><p><b>  ORG 0003H</b></p><p>  AJMP LAST_SONG ;外部中斷0用于接上一曲歌按鍵</p><p><b>  ORG 000BH</b></p><p> 

47、 AJMP F_T0 ;定時器0用于定時,作音符發(fā)生器用</p><p><b>  ORG 0013H</b></p><p>  q4: AJMP NEXT_SONG ;外部中斷1接下一曲歌按鍵</p><p><b>  ORG 001BH</b></p

48、><p>  AJMP START_PAUSE ;定時器1用計數(shù),這里用作中斷,接開始/暫停鍵,初值為0ffH,方式2</p><p><b>  ORG 0030H</b></p><p>  MAIN: MOV SP,#60H</p><p>  MOV DPTR,#TABLE

49、;DPRT指向每首歌曲的入口地址的地址。</p><p>  MOV R0,#30H ;R0中存入數(shù)據(jù)30H,這里在以30H開始的單元存放每首歌曲的入口地址,其中30H,31H存放</p><p>  ;歌曲的節(jié)拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四個存儲存單元。</p><p>  MOV R5,#00H

50、 ;R5中存放表TABLE中正在執(zhí)行操作的序號</p><p>  MOV R6,#1 ;R6存放正在設置入口信息的歌曲數(shù)</p><p>  SET_TAB: MOV A,R5 ;設置每首歌曲的入口信息,存放在以30H開始的存儲單元中。</p><p>  MOVC A,@A+DPTR&l

51、t;/p><p><b>  MOV @R0,A</b></p><p><b>  INC R5</b></p><p><b>  INC R0</b></p><p><b>  MOV A,R5</b></p><p>  MO

52、VC A,@A+DPTR</p><p><b>  MOV @R0,A</b></p><p><b>  INC R5</b></p><p><b>  INC R0</b></p><p><b>  MOV A,R5</b></p>

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

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

55、 ;設置完一首歌曲后,歌曲數(shù)加一</p><p>  CJNE R6,#N+1,SET_TAB ;是否設置完,沒有便繼續(xù),否則進行下面的操作</p><p>  ;*********************************** 對中斷,計數(shù)器的相關參數(shù)進行設置</p><p>  MOV TMOD, #6

56、1H;計數(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 ET1 ;允許計數(shù)器1中斷</p><p>

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

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

59、 ;高優(yōu)先級</p><p>  SETB EX1 ;允許外部中斷1中斷</p><p>  SETB EX0;允許外部中斷定0中斷</p><p>  SETB EA ;開中斷總開關</p>

60、<p>  SETB TR1 ;定時器1開始工作,作中斷用</p><p>  SETB OUT;音頻輸出端口初始化</p><p>  ;*********************************** ;設置結束</p><p>  CLR F0

61、 ;設置F0=0,用來作暫停/播放的標置位用</p><p>  MOV 22H,#01H ;22H單元中存放正在播放的歌曲編號</p><p>  MOV DPTR,#OUT_TAB ;將正在播放的歌曲編號送數(shù)碼管顯視</p><p>&

62、lt;b>  MOV A,22H</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A</p><p>  MOV R7,#00H ;R7中存放歌曲總信息的入口地址</p><p>  START0:MOV R4,#00

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

64、t;  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><b>  

65、INC R0</b></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

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

67、OV A,R7</b></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>

68、  MOV DPL,@R0</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 ;放在A

69、中</p><p>  ;****************************************************</p><p>  JZ END0 ;若為0,則表示為休止符,不唱,本次音符不唱,</p><p>  MOV R1,A ;不為0,取

70、出節(jié)拍數(shù)</p><p>  ANL A,#0FH</p><p><b>  MOV R2,A</b></p><p><b>  MOV A,R1</b></p><p><b>  SWAP A</b></p><p>  ANL A,#0FH&l

71、t;/p><p>  JNZ SING ;音符不為0,唱</p><p>  CLR TR0 ;為0,不唱,關頻率發(fā)生器</p><p>  SJMP SING1</p><p>  SING: DEC A

72、 ;開始唱,進行相應的數(shù)據(jù)處理</p><p><b>  MOV R3,A</b></p><p><b>  RL A</b></p><p>  MOV DPH,@R0</p><p><b>  INC R0</b>&

73、lt;/p><p>  MOV DPL,@R0</p><p><b>  INC R0</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV 21H,A</b></p><p><b>  MOV TH0,A</b>

74、;</p><p><b>  MOV A,R3</b></p><p><b>  RL A</b></p><p><b>  INC A</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV 20H

75、,A</b></p><p><b>  MOV TL0,A</b></p><p>  SETB TR0 ;開唱</p><p>  SING1:LCALL DELAY ;每個音符唱多久</p><

76、p>  JB F0,FOR;是否暫停,</p><p>  AJMP NEXT ;沒有暫停,繼續(xù)</p><p>  FOR: CLR TR0;暫停,不唱</p><p>  JB F0,$;等待播放</p><p>  AJMP NEXT

77、 ;開始播放</p><p>  END0: CLR TR0 ;不唱</p><p>  MOV A,22H ;唱完處理</p><p>  CJNE A,#N,WW ;是不是全部歌曲都唱完</p&g

78、t;<p>  MOV 22H,#01H ;全部唱完,則從第一首開始再唱</p><p>  MOV R7,#00H</p><p>  MOV OUT_NUM,#11111001B ;數(shù)碼管顯視第一首歌曲編號</p><p><b>  AJ

79、MP WWW</b></p><p>  WW: MOV A,R7 ;沒有全部唱完,唱下一首,歌曲的入口信息調整</p><p><b>  ADD A,#4</b></p><p><b>  MOV R7,A</b></p><

80、p><b>  INC 22H</b></p><p><b>  CLR EA</b></p><p><b>  PUSH DPH</b></p><p><b>  PUSH DPL</b></p><p><b>  MOV A,

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

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

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

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

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

86、lt;/b></p><p>  Q: INC 22H ;不是最后一首,唱下一首,R7內容加4,歌曲數(shù)加1</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,#4</b></p><

87、p><b>  MOV R7,A</b></p><p>  BACK: MOV R4,#00H ;數(shù)碼管顯視相應的歌曲編號</p><p><b>  MOV A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><

88、;p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A</p><p>  ;********************************************</p><p>  MOV B,R0 ;對下首要演唱的歌曲的幾分拍進行調整,同時對R0中的內容進行保護</p&g

89、t;<p>  MOV R4,#00H</p><p>  MOV R0,#30H</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,R0</b></p><p><b>  MOV R0,A</b></p>

90、<p>  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><b>  INC R0</b></p><p><b>  MOV A,R4</b></p><

91、p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV 26H,A ;結果存入26H單元中</p><p><b>  DEC R4</b></p><p>  MOV R0,B

92、 ;恢復R0中的內容</p><p>  ;********************************************</p><p>  POP DPL ;恢復現(xiàn)場</p><p><b>  POP DPH</b></p><p><b>  POP ACC&

93、lt;/b></p><p><b>  SETB EA</b></p><p>  RETI ;中斷返回</p><p>  LAST_SONG: PUSH ACC ;上一曲中斷程序處理開始,保護現(xiàn)場</p>

94、<p><b>  PUSH DPH</b></p><p><b>  PUSH DPL</b></p><p>  CLR EA ;關中斷</p><p>  MOV A,22H ;曲目數(shù)送A</p><p>  CJNE A,#

95、1,QQ ;是否是第一首</p><p>  MOV 22H,#N ;是第一首歌曲</p><p>  MOV B,#4 ;將R7指向最后一首歌曲</p><p>  MOV A,#N-1</p><p><b>  MUL AB</b></p>

96、;<p><b>  MOV R7,A</b></p><p>  AJMP BACK2 ;處理結束</p><p>  QQ: DEC 22H</p><p>  MOV A,R7 ;R7減4</p><p><b>  SUBB A,#4<

97、;/b></p><p><b>  MOV R7,A</b></p><p>  BACK2: MOV R4,#00H</p><p><b>  MOV A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><p>  MOVC

98、 A,@A+DPTR</p><p>  MOV OUT_NUM,A ;數(shù)碼管顯視相應歌曲的編號</p><p>  ;********************************************</p><p>  MOV B,R0;對下首要演唱的歌曲的幾分拍進行調整,同時對R0中的內容進行保護</p><p&

99、gt;  MOV R4,#00H</p><p>  MOV R0,#30H</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,R0</b></p><p><b>  MOV R0,A</b></p><p>

100、;  MOV DPH,@R0</p><p><b>  INC R0</b></p><p>  MOV DPL,@R0</p><p><b>  INC R0</b></p><p><b>  MOV A,R4</b></p><p><b

101、>  INC R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV 26H,A ;結果存入26H單元中</p><p><b>  DEC R4</b></p><p>  MOV R0,B;R0中的內容恢復</p&

102、gt;<p>  ;********************************************</p><p>  POP DPL ;恢復現(xiàn)場</p><p><b>  POP DPH</b></p><p><b>  POP ACC</b></p><p>

103、;<b>  SETB EA</b></p><p>  RETI ;中斷返回</p><p>  START_PAUSE:CPL F0 ;開始/暫停中斷處理程序,將標置位取反</p><p>  JB F0,RETURN ;為1返回</p><p>  S

104、ETB TR0 ;為0則播放</p><p>  RETURN: RETI ;中斷返回</p><p>  DELAY: MOV 27H,26H ;音符演奏時間控制</p><p>  D2: MOV 28H,#125</p><p>  D3:

105、 MOV 29H,#248</p><p>  DJNZ 29H,$</p><p>  DJNZ 28H,D3</p><p>  DJNZ 27H,D2</p><p>  DJNZ R2,DELAY</p><p><b>  RET</b></p><p>  ;O

106、UT_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,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ;共陽&

107、lt;/p><p>  TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4 ,SONG5,TABLE5</p><p>  TABLE1:DW 64580,64684,64777,64820,64898,64968,65030</p><p>  DW 63628,63835,64021,6410

108、3,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,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H<

109、;/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>  DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D

110、4H,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,31H,31H,32H,54H,52H,32H,52H,52H,32H</p><p>  DB 32H,21

111、H,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,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p>

112、<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,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H</p&g

113、t;<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>  DB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31

114、H,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,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H</p><p>  DB

115、 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,14H,14H</p><p><b>  DB 00H</b></p><

116、;p>  TABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684,64777</p><p>  DW 64820,64898,64968,65030,65058,65110,65157,65178</p><p>  SONG2: DB 02H;1=C 4/4 死了都要愛</p><p>  

117、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,0B4H,0C4H,84H,82H,92H,94H,0A4H</p><p>  DB 04H,0C2H,0C2H,0

118、D4H,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>  DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H</p><p>  DB 0C8H

119、,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,38H,34H,24H</p><p>  DB 24H,64H,64H,24H,64H,72H,72H,72H

120、,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>  DB 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72

121、H,72H,92H,91H,91H,94H,54H,74H,94H</p><p>  ;;*************************************************</p><p>  DB 0A8H,0A4H,0A2H,0B2H,0C4H,0B4H,0A4H,0A4H,0A4H,92H,92H,98H,82H,72H,78H,04H,0A4H,0A2H,0B2

122、H,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,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02</p><p>  DB 0A4H,

123、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,84H,84H,92H,92H,94H,92H,02</p><p>  DB 0A4H,0A2H,0B2H,0B

溫馨提示

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

評論

0/150

提交評論