單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的音樂(lè)播放器_第1頁(yè)
已閱讀1頁(yè),還剩31頁(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>  1.緒論</b></p><p><b>  1.1課題概述</b></p><p>  基于單片機(jī)的音樂(lè)播放器可應(yīng)用于mp3,MP4,擴(kuò)音器等很多方面,并可作為很多系統(tǒng)的輔助功能,作為單片機(jī)的重要硬件資源之一,利用定時(shí)器可以產(chǎn)生各種固定頻率的方波信號(hào),也可以產(chǎn)生包括"Do"、"Re&q

2、uot;、"Me"--等音階在內(nèi)的各種頻率聲音。將各個(gè)音階連接在一起,便可組成一支曲子或是演奏一段旋律?;谶@個(gè)思想,我設(shè)計(jì)了一款特殊的"音樂(lè)播放器",本播放器可實(shí)現(xiàn)播放、暫停、復(fù)位等功能。為了體現(xiàn)樂(lè)曲播放過(guò)程中的動(dòng)態(tài)效果,增加了1只LED,作隨機(jī)閃爍以指示旋律的節(jié)奏。由于時(shí)間及條件限制,本設(shè)計(jì)實(shí)現(xiàn)了一種簡(jiǎn)單的音樂(lè)播放器,其核心器件采用AT89C51單片機(jī),本播放器具有電路簡(jiǎn)單,功能強(qiáng)大,易于拓展

3、等特點(diǎn)。在此基礎(chǔ)上,可以添加按鍵,LED顯示屏等模塊,實(shí)現(xiàn)切換歌曲,歌名顯示,動(dòng)感音樂(lè)屏等功能。</p><p>  2.系統(tǒng)硬件原理及設(shè)計(jì)</p><p><b>  2.1硬件電路設(shè)計(jì)</b></p><p><b>  2.1.1設(shè)計(jì)目的</b></p><p>  設(shè)計(jì)一個(gè)音樂(lè)播放器,有三個(gè)

4、按鍵及控制按鈕:播放/暫停、下一曲、上一曲;通過(guò)控制按鈕控制單片機(jī),播放所要求的音樂(lè),并通過(guò)放大電路和喇叭輸出聲音。同時(shí)通過(guò)LED燈顯示器,用來(lái)顯示所選曲目,該顯示器在音樂(lè)播放中關(guān)閉,一曲演奏結(jié)束時(shí),或選曲時(shí)才顯示曲目信息,從而利于操作。</p><p>  2.1.2總體電路設(shè)計(jì)</p><p><b>  圖1 總體電路圖</b></p><

5、p>  2.1.3單片機(jī)電路設(shè)計(jì)</p><p>  89C52單片機(jī)擁有4KB的片內(nèi)ROM和128B片內(nèi)RAM。ROM和RAM的片外尋址范圍都是64KB,單片機(jī)擁有32個(gè)并行口和一個(gè)串行口,在89C52單片機(jī)中存在5個(gè)中斷源,其中有兩個(gè)外部中斷源、兩個(gè)內(nèi)部中斷源和一個(gè)串行中斷源。如圖2所示。</p><p>  圖2 89C52單片機(jī)</p><p>  

6、通過(guò)TXAL1 與TXAL2輸入時(shí)鐘信號(hào),通過(guò)p1.0~p1.7輸出控制現(xiàn)實(shí)控制信號(hào)的顯示,有p3.2、p3.3與p3.5分別作為上一曲、下一曲和開(kāi)始暫停的控制輸入。</p><p>  2.1.4顯示電路設(shè)計(jì)</p><p>  顯示電路是一個(gè)8位共陰極LED數(shù)碼管。 單片機(jī)的P1.0-P1.7分別與數(shù)碼管的A、B、C、D、E、F、G、DP相連接。如圖3所示。</p>&l

7、t;p>  2.1.5晶振時(shí)間電路設(shè)計(jì)</p><p>  晶振電路由兩個(gè)30pF的電容和一個(gè)6Mhz的晶體振蕩器組成。如圖4所示。節(jié)點(diǎn)1與單片機(jī)的XTAL2相連接,節(jié)點(diǎn)2與單片機(jī)的XTAL1相連接,從而為單片機(jī)提供時(shí)間信號(hào),為音樂(lè)的播放節(jié)拍控制提供基本時(shí)間單位:當(dāng)晶體振蕩頻率為6.MHz,定時(shí)器工作在方式1下時(shí),若各音階相對(duì)應(yīng)的定時(shí)器計(jì)數(shù)初值為X,則可根據(jù)下式計(jì)算X:</p><p&g

8、t;  圖3 8位共陰極LED燈 圖4 晶振電路</p><p>  2.1.6控制電路設(shè)計(jì)</p><p>  控制電路,鍵一與p3.2相連、鍵二與p3.3相連、鍵3與p3.5相連。當(dāng)電鍵按下時(shí)接口接低電平,從而實(shí)現(xiàn)對(duì)音樂(lè)播放器的控制。鍵一聯(lián)通實(shí)現(xiàn)上一曲更換,鍵二聯(lián)通實(shí)現(xiàn)下一曲更換,鍵三聯(lián)通實(shí)現(xiàn)開(kāi)始暫停操作。如圖5所示。</p><

9、;p><b>  圖5 復(fù)位電路</b></p><p>  2.1.7輸出電路設(shè)計(jì)</p><p>  發(fā)聲電路由數(shù)字揚(yáng)聲器連接p2.0接口實(shí)現(xiàn)音樂(lè)的輸出,由控制電路發(fā)出操作指令后,單片機(jī)調(diào)用相應(yīng)程序,并將音樂(lè)信號(hào)由p2.0口輸出,通過(guò)驅(qū)動(dòng)揚(yáng)聲器發(fā)出美妙的音樂(lè)。如圖6所示。</p><p><b>  圖6 輸出電路&

10、lt;/b></p><p><b>  3. 系統(tǒng)軟件設(shè)計(jì)</b></p><p><b>  3.1總體流程圖</b></p><p>  主程序?qū)崿F(xiàn)對(duì)單片機(jī)進(jìn)行初始化后,進(jìn)入曲目識(shí)別子程序,進(jìn)行歌曲曲目判斷。確定歌曲曲目后,數(shù)碼管再進(jìn)行顯示。然后,子程序?qū)κ欠癫シ胚M(jìn)行循環(huán)判斷,得到播放中斷的指令后再進(jìn)行播放。&

11、lt;/p><p>  執(zhí)行播放后,關(guān)閉數(shù)碼管顯示并調(diào)用查表子程序進(jìn)行播放音樂(lè)。在播放音樂(lè)的過(guò)程中,查表子程序循環(huán)判斷音樂(lè)是否結(jié)束。當(dāng)音樂(lè)結(jié)束時(shí),程序跳轉(zhuǎn)回曲目識(shí)別子程序。如圖7所示。 </p><p>  圖7 總體流程圖</p><p>  3.2單片機(jī)音階代碼實(shí)現(xiàn)</p><p>  音調(diào)的高低用音階表示,不同的音階對(duì)

12、應(yīng)不同的頻率。因此,不同頻率的方波就可以產(chǎn)生音階,音階與頻率的關(guān)系見(jiàn)表1。由于頻率的倒數(shù)是周期,因此可由單片機(jī)中的定時(shí)控制方波周期,當(dāng)定時(shí)器計(jì)數(shù)溢出時(shí)產(chǎn)生中斷。將與揚(yáng)聲器連接的P1.7取反后就可得到方波的周期,從而達(dá)到了控制頻率,即音階的目的。</p><p>  音階與頻率的關(guān)系及 如下表:</p><p>  注:0表示簡(jiǎn)譜中的空拍</p><p>  表1 方

13、式1下定時(shí)器的初值</p><p>  當(dāng)晶體振蕩頻率為6.144MHz,定時(shí)器工作在方式1下時(shí),若各音階相對(duì)應(yīng)的定時(shí)器計(jì)數(shù)初值為X,則可根據(jù)下式計(jì)算X:</p><p>  音調(diào)的長(zhǎng)短用節(jié)拍數(shù)表示(例如1/4拍、2/4拍、……),不同節(jié)拍數(shù)的不同音符的組合形成樂(lè)譜。程序中,音的節(jié)拍可由延時(shí)子程序?qū)崿F(xiàn)。延時(shí)子程序設(shè)定為四分之一拍,節(jié)拍值只能是它的整數(shù)倍。</p><p&

14、gt;  3.3單片機(jī)產(chǎn)生不同脈沖信號(hào)的原理</p><p>  (1)要產(chǎn)生音頻脈沖,只要算出某一音頻的脈沖(1/頻率),然后將此周期除以2,即為半周期的時(shí)間,利用定時(shí)器計(jì)時(shí)這個(gè)半周期的時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O反相,然后重復(fù)計(jì)時(shí)此半周期的時(shí)間再對(duì)I/O反相,就可以在I/O腳上得到此頻率的脈沖。</p><p> ?。?)利用8051的內(nèi)部定時(shí)器使其工作在計(jì)數(shù)器模式MODE1

15、下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法如下:</p><p>  例如,頻率為523Hz,其周期天/523 S=1912uS,因此只要令計(jì)數(shù)器計(jì)時(shí)956uS/1us=956,在每計(jì)數(shù)956次時(shí)就將I/O反接,就可得到中音DO(532Hz)。</p><p>  計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:</p><p><b>  N=Fi/2/Fr<

16、;/b></p><p>  N:計(jì)數(shù)值,F(xiàn)i:內(nèi)部計(jì)時(shí)一次為1uS,故其頻率為1MHz,F(xiàn)r:要產(chǎn)生的頻率 )</p><p> ?。?) 其計(jì)數(shù)值的求法如下:</p><p>  T=65536-N=65536-Fi/2/Fr</p><p><b>  計(jì)算舉例:</b></p><p&g

17、t;  設(shè)K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。</p><p>  T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr</p><p>  低音DO的T=65536-500000/262=63627</p>&l

18、t;p>  中音DO的T=65536-500000/523=64580</p><p>  高音DO的T=65536-500000/1047=65059</p><p>  (4)C調(diào)個(gè)音符頻率與計(jì)數(shù)值T的對(duì)照表如下表所示: </p><p>  表2 C調(diào)各音符頻率與計(jì)數(shù)值T的對(duì)照表</p><p> ?。?)每個(gè)音符使用1個(gè)字節(jié),

19、字節(jié)的高4位代表音符的高低,低4位代表音符的節(jié)拍,下表為節(jié)拍碼的對(duì)照。但如果1拍為0.4秒,1/4拍是0.1秒,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間。假設(shè)1/4節(jié)拍為1DELAY,則1拍應(yīng)為4DELAY,以此類推。所以只要求得1/4拍的DELAY時(shí)間,其余的節(jié)拍就是它的倍數(shù),如下表為1/4和1/8節(jié)拍的時(shí)間設(shè)定。</p><p>  表3 節(jié)拍碼對(duì)照表</p><p>  表4 各調(diào)

20、節(jié)拍的時(shí)間設(shè)定表</p><p>  四分之一拍延時(shí)代碼設(shè)計(jì):</p><p>  1/4拍的延遲時(shí)間=187毫秒</p><p>  DELAY: MOV R7,#2</p><p>  D2: MOV R4,#187</p><p>  D3: MOV R3,#248</p&

21、gt;<p>  DJNZ R3,$</p><p>  DJNZ R4,D3</p><p>  DJNZ R7,D2</p><p><b>  RET</b></p><p>  3.4音樂(lè)代碼的實(shí)現(xiàn)</p><p>  3.4.1音樂(lè)代碼庫(kù)的建立方法</p>

22、<p> ?。?)先找出樂(lè)曲的最低音和最高音范圍,然后確定音符表T的順序。</p><p> ?。?)把T值表建立在TABLE1,構(gòu)成發(fā)音符的計(jì)數(shù)值放在“TABLE”。</p><p> ?。?)簡(jiǎn)譜碼(音符)為高位,節(jié)拍為(節(jié)拍數(shù))為低4位,音符節(jié)拍碼放在程序的“TABLE”處。</p><p> ?。?)音符節(jié)拍碼00H為音樂(lè)結(jié)束標(biāo)記。</p

23、><p><b>  3.4.2選曲</b></p><p>  在一個(gè)程序中,需要演奏兩首或兩首以上的歌曲時(shí),音樂(lè)代碼庫(kù)的建立有兩種方法:</p><p> ?。?)將每首歌曲建立相互獨(dú)立的音符表T和發(fā)音符計(jì)數(shù)值TABLE。</p><p>  (2)在建立公用音符表T后,再寫每首歌的發(fā)音計(jì)數(shù)值TABLE中的代碼</

24、p><p>  不管采用那種方法,每首歌曲結(jié)束時(shí),在TABLE中均需加上音樂(lè)結(jié)束符00H。</p><p>  3.4.3歌曲的設(shè)計(jì)</p><p>  下面以歌曲《軍港之夜》的設(shè)計(jì)為例,講述歌曲在單片機(jī)中的實(shí)現(xiàn)。曲譜如下圖所示:</p><p>  圖8 《軍港之夜》樂(lè)譜</p><p>  從歌中可看出,最低音為低7

25、Si,最高音為高1Do。根據(jù)音樂(lè)軟件的設(shè)計(jì)方法,簡(jiǎn)譜對(duì)應(yīng)的簡(jiǎn)譜碼、T值、節(jié)拍數(shù)如表所示。</p><p>  表5 簡(jiǎn)譜對(duì)應(yīng)的簡(jiǎn)譜碼、T值、節(jié)拍數(shù)</p><p>  《軍港之夜》代碼實(shí)現(xiàn)如下:</p><p>  SONG1: DB 04H ;1=C 2/4 軍港之夜</p><p>  DB 32H,54H,52H,32H,

26、54H,52H,32H,12H,12H,32H,32H,54H,52H,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,21

27、H,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>  DB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,

28、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,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H<

29、/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,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H</p><p>  DB 0C2H,32H,32

30、H,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,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H

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

32、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><p>  DB 32H,52H,52H,32H,32H,2

33、1H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,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,65

34、030,65058,65110,65157,65178</p><p>  《死了都要愛(ài)》代碼實(shí)現(xiàn)如下:</p><p>  SONG2: DB 02H;1=C 4/4 死了都要愛(ài)</p><p>  DB 04H,94H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H

35、,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,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H</p><p>  DB 0E8H,0E4H,0E4H,0E8H,0E

36、4H,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,0C8H,08H,08H,78H,28H,38H,34H,24H</p><p>  DB 24H,64H,64H,24H,64H,7

37、2H,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,94H,92H,94H,0A4H,58H,58H,54H,44H ;#音不準(zhǔn)</p><p>  DB 58H,58H,58H,58

38、H,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,72H,72H,92H,91H,91H,94H,54H,74H,94H</p><p>  ;;**********************

39、***************************</p><p>  DB 0A8H,0A4H,0A2H,0B2H,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,0C

40、8H,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,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H&l

41、t;/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,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H</p>&l

42、t;p>  ;*************</p><p>  DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H</p><p>  DB 0C8H,0C8H,0C8H,08H</p><p><b>  DB 00H</b></p><p>  《中華人民共和國(guó)國(guó)歌》代碼實(shí)現(xiàn)如下:<

43、/p><p>  ONG3: DB 03H ;G=2/4 中華人民共和國(guó)國(guó)歌</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,31H,12H

44、,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,12H,34H,3

45、2H,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,0C4H,1

46、4H,14H,04H</p><p>  DB 04H,04H,04H,04H</p><p><b>  DB 00H</b></p><p><b>  END;</b></p><p><b>  3.5鍵控子程序</b></p><p>  鍵控

47、子程序主要由播放/暫停子程序、上一曲子程序、下一曲子程序組成,分別由一個(gè)計(jì)數(shù)器中斷和兩個(gè)外部中斷實(shí)現(xiàn)。</p><p>  3.5.1播放/暫停子程序</p><p>  播放/暫停在程序利用內(nèi)部中斷T0口。將T0口設(shè)為計(jì)數(shù)中斷并工作在方式2下。標(biāo)識(shí)符初值賦值為R1=00H,計(jì)數(shù)初值設(shè)為TH0=0FFH,TL0=0FFH。當(dāng)按鍵第一次產(chǎn)生中斷信號(hào)時(shí),播放/暫停子程序改變標(biāo)志符R1,將其賦值

48、為01H。此時(shí)播放器由暫停狀態(tài)進(jìn)入播放狀態(tài)。當(dāng)按鍵第二次產(chǎn)生中斷信號(hào)時(shí),播放/暫停子程序判斷R1是否為02H后,將R1再次賦值為00H。此時(shí),播放器由播放狀態(tài)進(jìn)入暫停狀態(tài)。</p><p>  圖9 播放/暫停子程序流程圖</p><p><b>  代碼實(shí)現(xiàn)如下:</b></p><p>  POP DPL ;恢復(fù)現(xiàn)場(chǎng)</p

49、><p><b>  POP DPH</b></p><p><b>  POP ACC</b></p><p><b>  SETB EA</b></p><p>  RETI ;中斷返回</p><p>  START_

50、PAUSE:CPL F0 ;開(kāi)始/暫停中斷處理程序,將標(biāo)置位取反</p><p>  JB F0,RETURN ;為1返回</p><p>  SETB TR0 ;為0則播放</p><p>  RETURN: RETI ;中斷返回</p><p>  

51、DELAY: MOV 27H,26H ;音符演奏時(shí)間控制</p><p>  D2: MOV 28H,#125</p><p>  D3: MOV 29H,#248 </p><p>  DJNZ 29H,$</p><p>  DJNZ 28H,D3 </p><p>

52、;  DJNZ 27H,D2 </p><p>  DJNZ R2,DELAY</p><p><b>  RET</b></p><p>  3.5.2曲目選擇子程序</p><p>  曲目選擇子程序分為上一曲子程序和下一曲子程序。上一曲和下一曲功能實(shí)現(xiàn)方式類似,分別由外部中斷和外部中斷。下面以實(shí)現(xiàn)上一曲功能為

53、例:首先設(shè)置標(biāo)識(shí)符R7初始值為00H。當(dāng)按鍵產(chǎn)生中斷信號(hào),上一曲中斷子程序改變標(biāo)識(shí)符R7的值為01H并改變曲目R0的值。播放子程序判斷出標(biāo)識(shí)符R7改變后,先將R7賦值為00H,然后跳轉(zhuǎn)到曲目識(shí)別子程序。</p><p>  圖10 曲目選擇子程序流程圖</p><p><b>  代碼實(shí)現(xiàn)如下:</b></p><p>  POP DPL

54、 ;恢復(fù)現(xiàn)場(chǎng)</p><p><b>  POP DPH</b></p><p><b>  POP ACC</b></p><p><b>  SETB EA</b></p><p>  RETI ;中

55、斷返回</p><p>  LAST_SONG: PUSH ACC ;上一曲中斷程序處理開(kāi)始,保護(hù)現(xiàn)場(chǎng) </p><p><b>  PUSH DPH</b></p><p>  PUSH DPL </p><p>

56、;  CLR EA ;關(guān)中斷</p><p>  MOV A,22H ;曲目數(shù)送A</p><p>  CJNE A,#1,QQ ;是否是第一首</p><p>  MOV 22H,#N ;是第一首歌曲</p><p>  MOV B,#4

57、 ;將R7指向最后一首歌曲</p><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>  

58、QQ: DEC 22H </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>

59、<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)歌曲的編號(hào)</p><p><b>  4.電路仿真調(diào)試</b&g

60、t;</p><p><b>  4.1仿真平臺(tái)</b></p><p>  仿真平臺(tái)為Proteus軟件。Proteus軟件是世界上著名的EDA工具,能完成原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì)它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件,是目前最好的仿真單片機(jī)及外圍器件的工具。</p><p&g

61、t;<b>  4.2仿真測(cè)試</b></p><p>  開(kāi)始仿真后,音樂(lè)播放器處于暫停狀態(tài)如圖11:</p><p>  圖11 初始數(shù)碼管顯示圖</p><p>  點(diǎn)擊播放,播放器進(jìn)入播放狀態(tài),數(shù)碼管顯示為一,開(kāi)始默認(rèn)從第一首《軍港之夜》開(kāi)始播放如圖12:</p><p>  圖12 開(kāi)始播放仿真實(shí)現(xiàn)<

62、/p><p>  按鍵一及p3.2低電位,開(kāi)始播放上一曲(第三首《中華人民共和國(guó)國(guó)歌》)如圖13:</p><p>  圖13 開(kāi)始播放上一曲仿真</p><p>  按鍵二及p3.3低電位,開(kāi)始播放下一曲(第二首《死了也要愛(ài)》)如圖14:</p><p>  圖14 播放下一曲仿真</p><p>  再次點(diǎn)擊播放/

63、暫停鍵,播放進(jìn)入播放狀態(tài),數(shù)碼管關(guān)閉。</p><p><b>  4.3測(cè)試總結(jié)</b></p><p>  音樂(lè)播放器很好的實(shí)現(xiàn)了播放/暫停、上一曲、下一曲的功能,并滿足了數(shù)碼管顯示的特殊要求。 音效良好,能很好聽(tīng)出樂(lè)曲的曲名。當(dāng)然設(shè)計(jì)的音樂(lè)播放器也存在著不足之處。8位LED數(shù)碼管只能顯示10以內(nèi)的歌曲曲目,超過(guò)10將無(wú)法顯示。</p><p&

64、gt;  調(diào)試過(guò)程中所遇到的問(wèn)題:</p><p>  (1)運(yùn)行程序時(shí)LED4位共陰數(shù)碼管顯示程亂碼。</p><p>  原因分析:數(shù)碼管初始設(shè)置有錯(cuò)。</p><p>  解決方案:重新設(shè)置數(shù)碼管顯示參數(shù)。</p><p>  (2)數(shù)碼管顯示的時(shí)間與真正的時(shí)間進(jìn)度不一致。</p><p>  原因分析:定時(shí)器初

65、值設(shè)置有誤。本次設(shè)計(jì)的晶振為6MHZ,而程序中的初值卻設(shè)置成了6MHZ晶振所采用的值5000,導(dǎo)致顯示的時(shí)間比真正的時(shí)間要慢。</p><p>  解決方案:將定時(shí)器初值改為6MHZ晶振初值的一半,及2500即可。</p><p><b>  5.心得體會(huì)</b></p><p>  課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)

66、際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程。隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說(shuō)得是無(wú)處不在。因此作為自動(dòng)化專業(yè)的學(xué)生來(lái)說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的。 我的題目是音樂(lè)播放器硬軟件的設(shè)計(jì),對(duì)于我們這些工科學(xué)生來(lái)說(shuō),這是一次考驗(yàn)。怎么才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn)?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計(jì)劃更具有序性,而不會(huì)忙無(wú)一用?這

67、都是我們所要考慮和努力的。這次課程設(shè)計(jì)我學(xué)到很多很多的東西,學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上所沒(méi)有學(xué)到過(guò)的知識(shí),掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡(jiǎn)單的編程。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高

68、自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。</p><p>  同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)單片機(jī)匯編語(yǔ)言掌握得不夠好。這次課程設(shè)計(jì)通過(guò)自己的努力,同學(xué)的幫助,還有老師的辛勤指導(dǎo)下,最終順利完成。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 鄭郁正.單片機(jī)原

69、理及應(yīng)用.四川大學(xué)出版社,2003。</p><p>  [2] 譚浩強(qiáng).C程序設(shè)計(jì)(第二版).清華大學(xué)出版社,1999。</p><p>  [3] 王曉君.安國(guó)臣等. MCS—51及兼容單片機(jī)原理與選型. 北京-電子工業(yè)出版社, 2003。</p><p>  [4] 李啟炎. Protel 99SE應(yīng)用教程. 上海-同濟(jì)大學(xué)出版社 2005.2</p&g

70、t;<p><b>  附錄1:程序設(shè)計(jì)</b></p><p>  OUT BIT P2.0 ;定義音頻輸出端口,p2.0</p><p>  N EQU 3;歌曲總數(shù)</p><p>  OUT_NUM EQU P1;數(shù)碼管顯視當(dāng)前所放歌曲曲數(shù)</p>

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

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

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

74、;/p><p>  MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。</p><p>  MOV R0,#30H ;R0中存入數(shù)據(jù)30H,這里在以30H開(kāi)始的單元存放每首歌曲的入口地址,其中30H,31H存放</p><p>  ;歌曲的節(jié)拍入口地址,32H,33H存放歌曲音符入口地址,

75、每首歌占用四個(gè)存儲(chǔ)存單元。</p><p>  MOV R5,#00H ;R5中存放表TABLE中正在執(zhí)行操作的序號(hào)</p><p>  MOV R6,#1 ;R6存放正在設(shè)置入口信息的歌曲數(shù)</p><p>  SET_TAB: MOV A,R5 ;設(shè)置每首歌曲的入口信息,存放在以30H

76、開(kāi)始的存儲(chǔ)單元中。</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></p><p><b&

77、gt;  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</b></p>&

78、lt;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><b>  INC R5</b>

79、;</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><b>  I

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

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

82、t;<p>  SETB ET1 ;允許計(jì)數(shù)器1中斷 </p><p>  SETB ET0 ;允許計(jì)數(shù)器具0中斷</p><p>  CLR PT0 ;計(jì)數(shù)器0為低優(yōu)先級(jí)</p><p>  SETB P

83、T1 ;計(jì)數(shù)器1為高優(yōu)先級(jí)</p><p>  SETB IT0 ;外部中斷0為跳沿觸發(fā)</p><p>  SETB PX0 ;高優(yōu)先級(jí)</p><p>  SETB IT1

84、 ;外部中斷1為跳沿觸發(fā)</p><p>  SETB PX1 ;高優(yōu)先級(jí)</p><p>  SETB EX1 ;允許外部中斷1中斷</p><p>  SETB EX0 ;允許外部中斷定0中斷</p>

85、;<p>  SETB EA ;開(kāi)中斷總開(kāi)關(guān)</p><p>  SETB TR1 ;定時(shí)器1開(kāi)始工作,作中斷用</p><p>  SETB OUT ;音頻輸出端口初始化</p><p>  ;********

86、*************************** ;設(shè)置結(jié)束</p><p>  CLR F0 ;設(shè)置F0=0,用來(lái)作暫停/播放的標(biāo)置位用</p><p>  MOV 22H,#01H ;22H單元中存放正在播放的歌曲編號(hào)</p><p>  M

87、OV DPTR,#OUT_TAB ;將正在播放的歌曲編號(hào)送數(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

88、 ;R7中存放歌曲總信息的入口地址 </p><p>  START0:MOV R4,#00H ;R4存放當(dāng)前正在播放歌曲的第幾個(gè)節(jié)拍數(shù)</p><p>  MOV R0,#30H ;30H開(kāi)始的單元中存放歌曲的入口信息</p><p>  MOV A,

89、R7 ;將歌曲的節(jié)拍表的入口地址送到DPTR</p><p><b>  ADD A,R0</b></p><p><b>  MOV R0,A</b></p><p>  MOV DPH,@R0</p><p><b>  IN

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

91、C A,@A+DPTR ;取出第一節(jié)拍數(shù),其實(shí)第一個(gè)節(jié)拍不是歌曲的第一個(gè)節(jié)拍,而是表示幾分音符 </p><p>  ;****************************************************</p><p>  MOV 26H,A ;將取出的音符數(shù)+節(jié)拍數(shù)保存在職26

92、H單元中</p><p>  NEXT: MOV R0,#30H ;開(kāi)始取出歌曲的第一個(gè)數(shù)據(jù)</p><p><b>  MOV A,R7</b></p><p><b>  ADD A,R0</b></p><p><b>  MOV

93、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></p><p><b>  MOV A,R4&l

94、t;/b></p><p><b>  INC R4</b></p><p>  MOVC A,@A+DPTR ;放在A中</p><p>  ;**************************************************** </p><p>

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

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

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

98、t;<b>  MOV R3,A</b></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&

99、gt;  INC R0</b></p><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>

100、;<p><b>  RL A</b></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&

101、gt;</p><p>  SETB TR0 ;開(kāi)唱</p><p>  SING1:LCALL DELAY ;每個(gè)音符唱多久</p><p>  JB F0,FOR ;是否暫停,</p><p>  AJMP

102、 NEXT ;沒(méi)有暫停,繼續(xù)</p><p>  FOR: CLR TR0 ;暫停,不唱</p><p>  JB F0,$ ;等待播放</p><p>  AJMP NEXT ;開(kāi)始播放</p><p&g

103、t;  END0: CLR TR0 ;不唱 </p><p>  MOV A,22H ;唱完處理</p><p>  CJNE A,#N,WW ;是不是全部歌曲都唱完</p><p>  MOV 22H,#01H

104、 ;全部唱完,則從第一首開(kāi)始再唱</p><p>  MOV R7,#00H</p><p>  MOV OUT_NUM,#06H ;數(shù)碼管顯視第一首歌曲編號(hào) </p><p><b>  AJMP WWW</b&g

105、t;</p><p>  WW: MOV A,R7 ;沒(méi)有全部唱完,唱下一首,歌曲的入口信息調(diào)整</p><p><b>  ADD A,#4</b></p><p><b>  MOV R7,A</b></p><p><b>

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

107、gt;  MOV DPTR,#OUT_TAB</p><p>  MOVC A,@A+DPTR</p><p>  MOV OUT_NUM,A ;數(shù)碼管顯視相應(yīng)的歌曲編號(hào)</p><p><b>  POP DPL</b></p><p><b>  POP

108、 DPH</b></p><p>  WWW: SETB EA</p><p>  AJMP START0 ;開(kāi)始下一首的演唱</p><p>  F_T0: MOV TH0,21H ;定時(shí)器0置初值</p><p>  

109、MOV TL0,20H</p><p>  CPL OUT ;頻率產(chǎn)生</p><p><b>  RETI</b></p><p>  NEXT_SONG: PUSH ACC ;下一曲中斷程序處理,保護(hù)現(xiàn)場(chǎng)

110、</p><p><b>  PUSH DPH</b></p><p>  PUSH DPL </p><p>  CLR EA ;關(guān)中斷</p><p>  MOV A,22H</p><p>  CJNE A,#N,Q

111、 ;是最后一首嗎?</p><p>  MOV R7,#00H ;是最后一首,則R7指向第一首,演唱第一首</p><p>  MOV 22H,#01H</p><p>  AJMP BACK </p>

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

113、 R7,A</b></p><p>  BACK: MOV R4,#00H ;數(shù)碼管顯視相應(yīng)的歌曲編號(hào)</p><p><b>  MOV A,22H</b></p><p>  MOV DPTR,#OUT_TAB</p><p>  MOVC A,@A+D

114、PTR</p><p>  MOV OUT_NUM,A</p><p>  ;********************************************</p><p>  MOV B,R0 ;對(duì)下首要演唱的歌曲的幾分拍進(jìn)行調(diào)整,同時(shí)對(duì)R0中的內(nèi)容進(jìn)行保護(hù)</p><p>  MOV

115、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>  MOV D

116、PH,@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>  IN

117、C R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV 26H,A ;結(jié)果存入26H單元中</p><p><b>  DEC R4</b></p><p>  MOV R0,B ;恢復(fù)R0中的內(nèi)容

118、</p><p>  ;******************************************** </p><p>  POP DPL ;恢復(fù)現(xiàn)場(chǎng)</p><p><b>  POP DPH</b></p><p><b>  POP ACC</b></

119、p><p><b>  SETB EA</b></p><p>  RETI ;中斷返回</p><p>  LAST_SONG: PUSH ACC ;上一曲中斷程序處理開(kāi)始,保護(hù)現(xiàn)場(chǎng) </p>

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

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

122、lt;p><b>  MOV R7,A</b></p><p>  AJMP BACK2 ;處理結(jié)束</p><p>  QQ: DEC 22H </p><p>  MOV A,R7 ;R7減4</p><p><b>  SUBB A,#4</b

123、></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 A

溫馨提示

  • 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)論