版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于89c52單片機音樂播放的設計</p><p> 1、設計任務和要求1</p><p><b> 2、總體設計1</b></p><p><b> 3、硬件設計2</b></p><p> 3.1 硬件電路2</p><p> 3
2、.2 原理說明2</p><p><b> 4、軟件設計2</b></p><p> 5、仿真、安裝和調(diào)試5</p><p><b> 6、收獲與體會6</b></p><p> 附件1:元件清單6</p><p> 附件2: 總仿真電路圖7</
3、p><p> 附件3:音樂程序8</p><p><b> 音樂盒設計</b></p><p><b> 1、設計任務和要求</b></p><p> (1)利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演樂曲。</p><p> (2直接當前播放的
4、歌曲。</p><p> (3)可通過功能鍵選擇播放上一首、下一首和暫停播放歌曲。</p><p><b> 2、總體設計</b></p><p> (1)要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/音頻),然后將此周期除以2,即為半周期的時間,利用定時器計時這個半周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復計時此半周期時間再
5、對I/O口反相,就可在I/O腳上得到此頻率的脈沖</p><p> (2)利用8052的內(nèi)部定時器使其工作在計數(shù)器模式MODE1下,改變記數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法。例如頻率為523HZ,其周期T=1/523=1912微秒,因此只要令計數(shù)器定時956/1=956在每記數(shù)9次時將I/O口反相,就可得到中音D0(523HZ)。</p><p> 記數(shù)脈沖值與頻率的關系公式如下:
6、</p><p> N=Fi/2/Fr N:記數(shù)值</p><p> Fi:內(nèi)部計時一次為1微秒.故其頻率為1MHZ</p><p><b> Fr;要產(chǎn)生的頻率</b></p><p> (3):起記數(shù)值的求法如下:</p><p> T=65536-N=65536-Fi/2/F
7、r</p><p> 例如:設K=65536,F(xiàn)=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的記數(shù)值。</p><p> T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr</p><p> 低音D0的T=65536-500000/262=63627&l
8、t;/p><p> 中音D0的T=65536-500000/523=64580</p><p> 高音D0的T=65536-500000/1047=65059</p><p><b> 3、硬件設計</b></p><p><b> 3.1 硬件電路</b></p><p&
9、gt; 本設計中用到89C52單片機,揚聲器、鍵盤、連接線。</p><p><b> 1.最小系統(tǒng)</b></p><p> ?、艈纹瑱C:本次設計使用單片機芯片AT89C52</p><p> AT89C52的工作特性:</p><p> ?內(nèi)含8KB的FLASH存儲器檫寫次數(shù)1000次; &
10、lt;/p><p> ?256x8bit內(nèi)部RAM;</p><p> ?具有32根可編程I/O線;</p><p> ?具有3個16位編程定時器 </p><p> ?AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時器中斷(定時器0、1、2)和串行口中斷?具有1個全雙工的可編程串行通信接口;<
11、/p><p> ?具有可編程3級程序鎖定位;</p><p> ?AT89C52的工作電源為5(1±0.2)V且典型值為5V;</p><p> ?AT89C52最高工作頻率為24MHZ;</p><p> ?AT89C52的編程頻率為3~24MHZ,編程啟動電流和啟動電壓 </p>
12、;<p> 分別為1mA、5或12V。 </p><p><b> 3.2 原理說明</b></p><p> 當鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器T1,產(chǎn)生一定頻率的脈沖,驅(qū)動蜂鳴器,放出樂曲。同時啟動定時器T0,顯示歌曲號。</p><p> ?。?)硬件電路中用、分
13、別接k1、k2作為上、下一曲的功能鍵</p><p> (2)用P0控制七段碼a,b,c,d,e,f。</p><p> ?。?)用P1.2口控制喇叭。</p><p> (4)電路為12MHZ晶振頻率工作,起振電路中C1,C2均為30pf。</p><p><b> 4、軟件設計</b></p>
14、<p> 本程序可以實現(xiàn)課程設計的基本要求,并可以通過按鍵播放三首歌曲,程序流程圖如下:</p><p><b> 總體框圖:</b></p><p><b> 主程序框圖:</b></p><p><b> 子程序框圖:</b></p><p> 5、仿
15、真、安裝和調(diào)試</p><p> 按照上面設計的電路在proteus軟件內(nèi)畫圖, 打開單片機軟件開發(fā)系統(tǒng)Keil,選擇89C52單片機,在其中編寫程序,運行生成一個后綴名為hex的文件,然后將該文件下載到proteus中的AT89C52單片機中進行仿真,觀察實驗現(xiàn)象。仿真能實現(xiàn)播放音樂,按鍵選擇曲目,暫停,播放功能。仿真成功后,安裝好實驗板,然后將音樂程序下載到電路板內(nèi) ,觀察結果。能實現(xiàn)播放音樂,按鍵換曲等功
16、能。</p><p> 程序調(diào)試中出現(xiàn)的問題及解決的辦法:</p><p> ?。?) 有時會出現(xiàn)程序一點錯誤也沒有,但就是不能正常運行的現(xiàn)象,最后我們發(fā)現(xiàn)是因為程序中有的指令書寫得不規(guī)范導致的,例如有的RET返回指令一定要按正確格式書寫或在兩行指令間最好不要留空行。</p><p> (2) 程序中的跳轉(zhuǎn)指令的運用很重要,為保險起見,都用LJMP,我們就遇到過
17、跳轉(zhuǎn)指令用錯程序無法正常運行的現(xiàn)象。當用JNZ指令時,跳轉(zhuǎn)范圍比較少,這時要用一個標號中轉(zhuǎn)。</p><p> ?。?) 編程時要注意,在程序開始時,要寫入各定時器中斷的入口地址。</p><p> (4) 編程過程中要注意加注釋或分割線,否則,在程序過長時容易變得很亂,不便于查找或更改。</p><p> ?。?) 編程前要加流程圖,這樣會使思路清晰,例如數(shù)字音
18、樂盒的設計思路完全可以按著MP3的工作方式列寫流程圖。</p><p> ?。?) LCD計時正常顯示的解決辦法:</p><p> a. 兩個定時器同時工作,存在中斷時序問題,剛開始時我們把定時器1設定在方式3,計250us,由于定時中斷過于頻繁,使CPU負載過大,導致音樂不能正常播放,時間不能正常顯示。</p><p> 解決辦法:將定時器1設定在工作方式1
19、,16位計數(shù),計50ms,效果有很大改觀。但還有問題。</p><p> b. 當音樂為全4拍起始時,此時音樂節(jié)奏與定時器T1中斷頻率錯開,LCD顯示和音樂播放都會好一些。</p><p> c. 另外,在歌曲中,當遇到一個音符發(fā)音為4拍,在編曲中為*CH,因時間較長,當定時器T1此時來中斷時,就會對歌曲播放產(chǎn)生影響,若改為發(fā)音一拍,中斷對歌曲播放影響減弱,但音樂效果變差。</p
20、><p> 改進方案:若采用可以定時時間更長的單片機,可以避免所有問題。</p><p><b> 6、收獲與體會</b></p><p> (1) 上學期學習單片機的課時不多,對單片機的硬件設計,軟件設計掌握的深度不夠,但通過此次課程設計,明顯的改善了,首先對于硬件電路的工作原理有了進一步的學習,同時有了一個提升;軟件方面,在程序的設計,程
21、序的調(diào)試方面都有了很大的進步。</p><p> (2) 在一個好的氛圍里才能踏下心來做東西,在這一段時間里,寢室成員都認真對待這次課程設計,除了自己做好自己的課題外,在遇到不懂的地方互相討論,查閱資料,互助解決問題。另外在編程中出現(xiàn)問題時,一定要戒驕戒躁,腳踏實地,認真看書,仔細分析,仔細調(diào)試,就一定會發(fā)現(xiàn)錯誤。我們也是這么做的,這一點在這次的課程設計中十分重要。</p><p>
22、(3) 通過這次課程設計,我體會到了成功的喜悅,聽著自己設計的程序下載到單片機中播放出音樂,心理非常自豪。這次的課程設計在一定程度上改變了我學習單片機這門課程的態(tài)度,從最初的認為學它沒有什么實際意義,到如今愛上單片機學習,并希望能將理論運用到實踐,設計出更好更完整的系統(tǒng)。我明白了一個人要想做好一件事,就必須具備自信心,耐心,還要有毅力,要膽大心細,要勇于嘗試,要手腦并用,最后才能交出一份令人滿意的答卷。</p><p
23、><b> 附件1:元件清單</b></p><p> 附件2:總仿真電路圖</p><p><b> 附件3:音樂程序</b></p><p> shuzhi EQU 3fh ;選曲目的地址</p><p> song EQU p1.2 ;揚聲器播放</p
24、><p> play EQU p3.0 ;播放停止鍵</p><p> addone EQU p3.1 ;曲目加一鍵</p><p> subone EQU p3.2 ;曲目減一鍵</p><p> dul EQU P1 ;段選</p><p> wel EQU P2
25、 ;位選</p><p><b> ORG 0000H</b></p><p> LJMP START</p><p> ORG 000BH ;定時器0溢出中斷入口地址</p><p><b> AJMP cont</b></p><p>
26、; ORG 0013H ;外部中斷一入口地址</p><p> AJMP pause ;指向外部中斷程序</p><p><b> ORG 0100H</b></p><p><b> START:</b></p><p> MOV SP,#50H</p>
27、<p> MOV TH0,#0DBH ;定時器賦初值</p><p> MOV TL0,#0FFH</p><p> MOV TMOD,#01H ;設定T1工作于方式2</p><p> MOV IE,#86H ;開中斷</p><p> MOV TCON,#00H</p>
28、<p> MOV R0,#00H</p><p> MOV shuzhi,#00H</p><p> (是否順序播放音樂)</p><p> MAIN: </p><p> JNB play,first ;判斷P3.0鍵是否按下</p><p><b
29、> SJMP MAIN</b></p><p><b> first:</b></p><p> ACALL del20</p><p> JNB play,first </p><p> MOV shuzhi,#00H</p><p> MOV d
30、ul,#06H ;共陰數(shù)碼管顯示1</p><p> MOV wel,#80H</p><p> MOV DPTR,#dat1 ;dat1首地址賦給DPTR</p><p> ACALL music0</p><p> ACALL next</p><p><b>
31、 RET</b></p><p><b> next:</b></p><p> INC shuzhi</p><p> MOV A,shuzhi</p><p> CJNE A,#01,LOOP3 ;A是否=1,不等就跳轉(zhuǎn)到LOOP3</p><p> MOV
32、DPTR,#dat2 ;表2首地址送DPTR</p><p> MOV dul,#5BH ;顯示數(shù)值2</p><p> MOV wel,#80H</p><p> ACALL music0</p><p><b> INC A</b></p><p><b>
33、 LOOP3:</b></p><p> CJNE A,#02,LOOP4 ;A是否=2,不等就跳轉(zhuǎn)到LOOP4</p><p> MOV DPTR,#dat3 ;表3首地址送DPTR</p><p> MOV dul,#4FH ;顯示數(shù)值3</p><p> MOV wel,#80H<
34、;/p><p> ACALL music0</p><p><b> INC A</b></p><p><b> LOOP4: </b></p><p> CJNE A,#03,next</p><p> ACALL first</p><p>
35、;<b> RET</b></p><p> ?。ò存I播放上一首音樂)</p><p><b> last:</b></p><p> DEC shuzhi</p><p> MOVa,shuzhi</p><p> CJNEa,#02,last1</p&
36、gt;<p> MOVdptr,#dat3</p><p> MOVdul,#4Fh</p><p> MOVwel,#80h</p><p> ACALLmusic0</p><p> last1:cjnea,#01,last2</p><p> MOVdptr,#dat2&l
37、t;/p><p> MOVdul,#5Bh</p><p> MOVwel,#80h</p><p> ACALLmusic0</p><p> last2:cjnea,#00,last</p><p> MOVdptr,#dat1</p><p> MOVdul,#06h
38、</p><p> MOVwel,#80h</p><p> ACALLmusic0</p><p><b> RET</b></p><p><b> music0:</b></p><p> MOV20h,#00h ;中斷計數(shù)單元清0&l
39、t;/p><p> music1:clra</p><p> MOVCa,@a+dptr ;查表取音階常數(shù)</p><p> JZend0 ;累加器判0看是否是結束符</p><p> CJNEa,#0ffh,music5;是休止符?</p><p> LJMPmusic3
40、 ;產(chǎn)生100ms停頓 </p><p><b> music5:</b></p><p><b> NOP</b></p><p><b> key:</b></p><p> JNBplay,k0 ;判斷P3.0鍵是否按下</
41、p><p> JNBaddone,k1 ;判斷P3.2鍵是否按下</p><p> JNBsubone,k2 ;判斷P3.1鍵是否按下</p><p> MOVr6,a ;音階常數(shù)送R6</p><p> INCdptr ;DPTR+1 <
42、/p><p><b> MOVa,#0</b></p><p> MOVCa,@a+dptr ;取常數(shù)送R7 </p><p> MOVr7,a</p><p> SETBtr0 ;啟動定時器T0 </p><p> music2:nop&l
43、t;/p><p> CJNEr0,#0,$</p><p> CPLsong ;輸出電平取反</p><p><b> MOVa, r6</b></p><p> MOVr3,a ;音階常數(shù)送R3</p><p> LCALLde
44、l20</p><p> MOVa, r7 ;節(jié)拍常數(shù)送A</p><p> CJNEa,20h,music2 ;節(jié)拍時間到否 </p><p> MOV20h,#00h ;為取下一音階作準備</p><p> INCDPTR</p><p> LJ
45、MPmusic1</p><p><b> music3:</b></p><p> NOP ;休止100ms</p><p> CLRtr0 ;關閉定時器</p><p> MOVr2, #14h </p><p
46、> music4:NOP</p><p> MOVr3, #250 ;R3=250</p><p> LCALLdel20</p><p> DJNZr2, music4</p><p> INCdptr ;為取下一音階作準備 </p><p>
47、LJMPmusic1</p><p> end0:MOVr2, #200 ;歌曲結束后,延時1s后繼續(xù)</p><p> music6:MOVr3, #250</p><p> LCALLdel20</p><p> DJNZr2,music6</p><p><b>
48、(按鍵選擇)</b></p><p> k1:ACALLdel20 ;調(diào)用延時子程序</p><p> JNBaddone,k1 ;判斷P3.2鍵是否釋放</p><p> ACALLnext</p><p> k2:ACALLdel20</p><p&g
49、t; JNBsubone,k2 ;判斷P3.1鍵是否釋放 </p><p> ACALLlast</p><p> k0:ACALLdel20</p><p> JNBplay,k0 ;判斷3.0鍵是否釋放</p><p> LJMPstart</p><p
50、><b> RET</b></p><p> del20:MOVr4,#05h ;延時子程序</p><p><b> del4:NOP</b></p><p> DJNZr4,del4</p><p> DJNZr3,del20</p>
51、<p><b> RET</b></p><p> cont:INC20h ;計數(shù)單元+1</p><p> MOVth0,#0dbh ;重新10ms定時初值</p><p> MOVtl0,#0ffh</p><p> RETI ;跳出中斷
52、 </p><p><b> (停止播放)</b></p><p> pause:ACALLdel20</p><p> JNBp3.0,pause ;判斷P3.0鍵是否有釋放</p><p> MOVa,r0 ;把R0的值給A</p><p&
53、gt; CPLa ;A值取反 </p><p><b> MOVr0,a</b></p><p><b> RETI</b></p><p><b> dat1:</b></p><p> db 3bh,20h,3bh,20h,30h,2
54、0h,33h,20h,3bh,80h,0ffh</p><p> db 3bh,20h,3bh,20h,26h,20h,2bh,20h,26h,80h,0ffh</p><p> db 26h,20h,26h,20h,20h,20h,26h,20h,2bh,20h,2bh,20h,30h,20h,33h,10h,33h,10h</p><p> db 3bh,
55、60h,40h,20h,4ch,80h,0ffh</p><p> db 3bh,20h,3bh,20h,30h,20h,33h,20h,3bh,80h,0ffh</p><p> db 3bh,20h,3bh,20h,26h,20h,2bh,20h,26h,80h,0ffh</p><p> db 26h,20h,26h,20h,20h,20h,26h,20
56、h,2bh,20h,2bh,20h,2bh,20h,30h,20h</p><p> db 33h,20h,3bh,20h,3bh,20h,40h,2bh,3bh,80h,0ffh</p><p> db 19h,20h,1ch,40h,26h,20h,19h,20h,1ch,40h,26h,20h,0ffh</p><p> db 20h,20h,1ch,2
57、0h,1ch,20h,20h,20h,26h,80h,0ffh</p><p> db 19h,20h,1ch,40h,26h,20h,19h,20h,1ch,40h,26h,20h,0ffh</p><p> db 20h,20h,1ch,20h,1ch,20h,20h,20h,26h,80h,0ffh</p><p> db 2bh,20h,2bh,40h
58、,3bh,20h,2bh,20h,2bh,40h,2bh,20h,0ffh</p><p> db 26h,20h,2bh,20h,2bh,20h,30h,20h,2bh,80h,0ffh</p><p> db 2bh,20h,2bh,40h,3bh,20h,30h,20h,30h,40h,2bh,20h,0ffh</p><p> db 33h,20h,3
59、bh,20h,3bh,20h,40h,20h,3bh,80h,0ffh,0ffh</p><p><b> dat2:</b></p><p> db 18h,30h,1ch,10h,20h,40h,1ch,10h</p><p> db 18h,10h,20h,10h,1ch,10h,18h,40h</p><p&g
60、t; db 1ch,20h,20h,20h,1ch,20h,18h,20h</p><p> db 20h,80h,0ffh,20h,30h,1ch,10h,18h</p><p> db 20h,15h,20h,1ch,20h,20h,20h,26h</p><p> db 40h,20h,20h,2bh,20h,26h,20h,20h</p>
61、<p> db 20h,30h,80h,0ffh,20h,20h,1ch,10h</p><p> db 18h,10h,20h,20h,26h,20h,2bh,20h</p><p> db 30h,20h,2bh,40h,20h,20h,1ch,10h</p><p> db 18h,10h,20h,20h,26h,20h,2bh,20h&
62、lt;/p><p> db 30h,20h,2bh,40h,20h,30h,1ch,10h</p><p> db 18h,20h,15h,20h,1ch,20h,20h,20h</p><p> db 26h,40h,20h,20h,2bh,20h,26h,20h</p><p> db 20h,20h,30h,80h,20h,30h,
63、1ch,10h</p><p> db 20h,10h,1ch,10h,20h,20h,26h,20h</p><p> db 2bh,20h,30h,20h,2bh,40h,20h,15h</p><p> db 1fh,05h,20h,10h,1ch,10h,20h,20h</p><p> db 26h,20h,2bh,20h,
64、30h,20h,2bh,40h</p><p> db 20h,30h,1ch,10h,18h,20h,15h,20h</p><p> db 1ch,20h,20h,20h,26h,40h,20h,20h</p><p> db 2bh,20h,26h,20h,20h,20h,30h,30h</p><p> db 20h,30h
65、,1ch,10h,18h,40h,1ch,20h</p><p> db 20h,20h,26h,40h,13h,60h,18h,20h</p><p> db 15h,40h,13h,40h,18h,80h,00h</p><p><b> dat3:</b></p><p> db 26h,20h,20h,2
66、0h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h</p><p> db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h</p><p> db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,8
67、0h,26h,20h</p><p> db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h</p><p> db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h</p><p> db 2bh
68、,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h</p><p> db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h</p><p> db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,2
69、0h,1ch,20h,20h,20h</p><p> db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h</p><p> db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h</p><p> d
70、b 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h</p><p> db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h</p><p> db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 89c52單片機課程設計
- 單片機課程設計--基于單片機的音樂播放器
- 基于89c52單片機的傾角測量
- 基于89c52單片機的電子時鐘設計
- 基于89c52單片機的溫度測量系統(tǒng)設計
- 基于89c52單片機的智能溫度控制
- 基于89c52單片機的64點陣設計
- 基于89c52單片機的數(shù)字電壓表設計
- 單片機課程設計報告--基于stc89c52單片機的實驗平臺開發(fā)設計
- 單片機課程設計報告--基于stc89c52單片機的實驗平臺開發(fā)設計
- 基于89c52單片機的波形發(fā)生器
- 單片機課程設計--基于at89c52單片機的led點陣顯示電子鐘設計
- 單片機課程設計-基于at89c52單片機的led點陣顯示電子鐘設計
- 單片機課程設計--音樂播放系統(tǒng)設計
- 單片機課程設計報告--基于stc89c52單片機的電子時鐘(日歷)
- 基于單片機音樂播放器課程設計
- 單片機課程設計---基于at89s52單片機的溫度控制系統(tǒng)
- 單片機課程設計---基于at89s52 單片機的溫度控制系統(tǒng)
- 單片機課程設計---基于單片機at89s52的數(shù)字溫度計的設計
- 89c51單片機課程設計
評論
0/150
提交評論