單片機(jī)音樂播放器課程設(shè)計(jì)報(bào)告書_第1頁
單片機(jī)音樂播放器課程設(shè)計(jì)報(bào)告書_第2頁
單片機(jī)音樂播放器課程設(shè)計(jì)報(bào)告書_第3頁
單片機(jī)音樂播放器課程設(shè)計(jì)報(bào)告書_第4頁
單片機(jī)音樂播放器課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

/摘要本文將介紹一種以89C51型單片機(jī)為基礎(chǔ)元件設(shè)計(jì)的自動(dòng)音樂播放器。在當(dāng)今這個(gè)科技高速發(fā)展的時(shí)代.生活節(jié)奏的加快.人們長期處于工作、學(xué)習(xí)壓力過大的狀態(tài).對(duì)于調(diào)節(jié)心理壓力而言音樂對(duì)于每一個(gè)人都十分重要.由此音樂播放器在國內(nèi)已經(jīng)開始普及。校園里的上下課的鈴聲.宿舍內(nèi)早晨的起床號(hào)聲音.都由以前枯燥刺耳的鈴音轉(zhuǎn)變成了好聽的音樂.公路、廣場(chǎng)中的計(jì)時(shí)裝置也逐漸開始采用音樂來充當(dāng)鈴聲。此裝置不僅為人們?nèi)粘I畹挠?jì)時(shí)提供了方便.同時(shí)也為目前快節(jié)奏的生活帶來了樂趣。本文是應(yīng)用MCS-51單片機(jī)原理和控制理論設(shè)計(jì)音樂演奏控制器的硬件電路.并利用C語言進(jìn)行程序設(shè)計(jì)。通過控制單片機(jī)內(nèi)部的定時(shí)器來產(chǎn)生不同頻率的方波.驅(qū)動(dòng)蜂鳴器發(fā)出不同音調(diào)的音樂.再利用延遲來控制發(fā)音時(shí)間的長短。把樂譜轉(zhuǎn)化成相應(yīng)的定時(shí)常數(shù)就可以從發(fā)音設(shè)備中演奏出悅耳動(dòng)聽的音樂。這種控制電路結(jié)構(gòu)簡(jiǎn)單.可讀性高,應(yīng)用性強(qiáng);軟件程序適應(yīng)范圍廣.對(duì)于不同的音樂只需要改變相應(yīng)的定時(shí)常數(shù)即可。關(guān)鍵詞:?jiǎn)纹瑱C(jī);音樂播放器;C語言。目錄緒論1第1章音樂盒的設(shè)計(jì)總體方案2第2章硬件電路設(shè)計(jì)32.1總體設(shè)計(jì)框圖32.2時(shí)鐘電路32.3復(fù)位電路32.4選曲按鍵電路32.5音頻發(fā)生及放大電路4第3章軟件程序設(shè)計(jì)53.1單片機(jī)發(fā)聲概述53.2程序流程圖63.3音樂的產(chǎn)生7第4章KEIL仿真軟件的應(yīng)用8第5章調(diào)試與故障分析95.1軟件程序調(diào)試95.2硬件電路調(diào)試9總結(jié)10致謝11參考文獻(xiàn)12附錄1:原理圖13附錄2:源程序14緒論單片機(jī).更確切地說應(yīng)稱為作微控制器.是20世紀(jì)70年代中期發(fā)展起來的一種面向控制的大規(guī)模集成電路模塊.其特點(diǎn)是功能強(qiáng)、體積小、可靠性高、價(jià)格低廉。它一面世便在工業(yè)控制、數(shù)據(jù)采集、智能儀表化、機(jī)電一體化、家用電器等領(lǐng)域得到了廣泛應(yīng)用.極大地提高了這些領(lǐng)域的技術(shù)水平和自動(dòng)化程度。因此.單片機(jī)的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。本文將介紹一種以89C51型單片機(jī)為基礎(chǔ)元件設(shè)計(jì)的自動(dòng)音樂播放器。在當(dāng)今這個(gè)科技高速發(fā)展的時(shí)代.生活節(jié)奏的加快.人們長期處于工作、學(xué)習(xí)壓力過大的狀態(tài).對(duì)于調(diào)節(jié)心理壓力而言音樂對(duì)于每一個(gè)人都十分重要.由此音樂播放器在國內(nèi)已經(jīng)開始普及。校園里的上下課的鈴聲.宿舍內(nèi)早晨的起床號(hào)聲音.都由以前枯燥刺耳的鈴音轉(zhuǎn)變成了好聽的音樂.公路、廣場(chǎng)中的計(jì)時(shí)裝置也逐漸開始采用音樂來充當(dāng)鈴聲。此裝置不僅為人們?nèi)粘I畹挠?jì)時(shí)提供了方便.同時(shí)也為目前快節(jié)奏的生活帶來了樂趣。本次設(shè)計(jì)以89C51單片機(jī)為基礎(chǔ).利用單片機(jī)編成技術(shù)對(duì)芯片進(jìn)行功能設(shè)定.實(shí)現(xiàn)音樂的播放。同時(shí).利用單片機(jī)的定時(shí)器中斷.在單片機(jī)內(nèi)部產(chǎn)生所需要的音樂頻率.并通過音頻功率放大器將音頻信號(hào)放大.通過蜂鳴器連續(xù)播放一段音樂。此設(shè)計(jì)通過多次測(cè)試.音樂聲音宏亮清晰.節(jié)拍正常.達(dá)到預(yù)期效果。本文將圍繞基于單片機(jī)的自動(dòng)音樂播放器.介紹一些關(guān)于單片機(jī)的基礎(chǔ)知識(shí)、音樂播放器的制作原理及方法〔其中包括了音樂編程原理、定時(shí)器的設(shè)定.以及仿真軟件〔Keil、Proteus的使用方法。第1章音樂盒的設(shè)計(jì)總體方案單片機(jī)音樂播放器控制系統(tǒng)結(jié)構(gòu)簡(jiǎn)單.環(huán)節(jié)較少.因此.單片機(jī)音樂播放器包括LED彩燈、數(shù)碼管的顯示。除了播放音樂有按鍵外.其余的硬件組成大體相同;對(duì)于單片機(jī)音樂播放器聲音的讀出除了蜂鳴器以外.還要配置合適的放大器播放出響亮的聲音。單單片機(jī)按鍵電路復(fù)位電路晶振電路發(fā)聲電路時(shí)鐘電路電源電路圖1-1結(jié)構(gòu)總圖單片機(jī)音樂播放器電路板向著小型化、低功耗、抗千擾、低成本、實(shí)用功能方向發(fā)展。因此在對(duì)單片機(jī)的選擇趨向于容量適中、功能豐富、性能可靠、價(jià)格低的元件。因此本設(shè)計(jì)中應(yīng)用最為廣泛的MCS-51系列8位單片機(jī)8051。第2章硬件電路設(shè)計(jì)2.1總體設(shè)計(jì)框圖80c5180c51單片機(jī)揚(yáng)聲器歌曲制按鈕電源復(fù)位晶振時(shí)鐘鐘圖2-1總設(shè)計(jì)圖2.2時(shí)鐘電路圖2-2時(shí)鐘電路2.3復(fù)位電路圖2-3復(fù)位電路2.4選曲按鍵電路圖2-4選曲電路其中P3.2播放\暫停,P1.2上一首歌.P3.5下一首歌。2.5音頻發(fā)生及放大電路圖2-5音頻發(fā)生及放大電路利用STC89C51的I/O口產(chǎn)生一定頻率的方波脈沖.通過LM386功放電路驅(qū)動(dòng)喇叭發(fā)出不同的音調(diào)從而演湊樂曲。第3章軟件程序設(shè)計(jì)3.1單片機(jī)發(fā)聲概述一般來說.單片機(jī)不像其他專業(yè)樂器那樣能奏出多種音色的聲音.即不包含相應(yīng)幅度的諧振頻率。單片機(jī)演奏的音樂基本都是單音頻率。因此單片機(jī)演奏音樂比較簡(jiǎn)單.只需能清楚"音調(diào)"和"節(jié)拍"兩個(gè)概念即可。音調(diào)表示一個(gè)音符唱多高的頻率。節(jié)拍表示一個(gè)音符唱多長的時(shí)間。知道了一個(gè)音符的頻率后.便可以讓單片機(jī)發(fā)出相應(yīng)頻率的振蕩信號(hào).從而產(chǎn)生相應(yīng)的音符聲音。通過單片機(jī)的定時(shí)器進(jìn)行定時(shí)中斷.在中斷服務(wù)程序中將單片機(jī)上完結(jié)單片機(jī)I/O口來回置高電平或者是低電平的.從而讓揚(yáng)聲器發(fā)出聲音。通過節(jié)拍計(jì)算出每個(gè)音符所需要的時(shí)間.采用循環(huán)延時(shí)的方法來實(shí)現(xiàn)控制一個(gè)音符唱多長的時(shí)間.從而構(gòu)成一首完整的音樂。音調(diào)主要由聲音的頻率決定。對(duì)一定強(qiáng)度的純音.音調(diào)隨頻率的升降而升降;對(duì)一定頻率的純音、低頻純音的音調(diào)隨響度增加而下降.高頻純音的音調(diào)卻隨響度增加而上升。以標(biāo)準(zhǔn)高音A的頻率F=440HZ.其對(duì)應(yīng)的周期為:T=1/F=1/440=2272us因此需要在單片機(jī)I/O端口輸出周期為T=2272us的方波脈沖.也就是t=T/2=2272/2=1136us也就是說.單片機(jī)上定時(shí)器的中斷出發(fā)時(shí)間為1136us。如果單片機(jī)采用定時(shí)器為工作方式1.它以振蕩器的十二分頻信號(hào)為計(jì)數(shù)脈沖。設(shè)外接晶振的振蕩器頻率為f.則定時(shí)器的預(yù)置初始值有以下公式來確定:Temp=65536-<50000/CurrentFre>*10/<12000000/SYSTEM_OSC>TH=Temp/256TL=Temp%2563.2程序流程圖開始初始化堆棧初始化音樂輸出口及按鈕暫停/播放鍵是否按下上一曲鍵是否按下,并且在開機(jī)后有一次按下暫停/播放鍵根據(jù)當(dāng)前狀態(tài)播放相應(yīng)歌曲的某個(gè)音符開始初始化堆棧初始化音樂輸出口及按鈕暫停/播放鍵是否按下上一曲鍵是否按下,并且在開機(jī)后有一次按下暫停/播放鍵根據(jù)當(dāng)前狀態(tài)播放相應(yīng)歌曲的某個(gè)音符按鍵處理是否下一曲鍵是否按下,并且在開機(jī)后有一次按下暫停/播放鍵按鍵處理是否按鍵處理是否開機(jī)后是否按下過暫停/播放鍵是按鍵處理否3.3音樂的產(chǎn)生一首音樂是許多不同的音階組成的.而每個(gè)音階對(duì)應(yīng)著不同的頻率.這樣我們就可以利用不同的頻率的組合.即可構(gòu)成我們所想要的音樂了.當(dāng)然對(duì)于單片機(jī)來產(chǎn)生不同的頻率非常方便.我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號(hào).因此.我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。若要產(chǎn)生音頻脈沖.只要算出某一音頻的周期〔1/頻率.再將此周期除以2.即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間.每當(dāng)計(jì)時(shí)終止后就將P1.0反相.然后重復(fù)計(jì)時(shí)再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式〔MODE1下.改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階.例如.頻率為523Hz.其周期T=1/523=1912μs..則半周期為1912/2=956μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs.每計(jì)數(shù)956次時(shí)將I/O反相.就可得到中音DO〔523Hz則初始值為65535-956=64579=0xFC43。計(jì)數(shù)脈沖值與頻率的關(guān)系式<如式3-1所示>是:N=fi÷2÷fr

〔3-1式中.N是計(jì)數(shù)值;fi是機(jī)器頻率〔晶體振蕩器為12MHz時(shí).其頻率為1MHz;fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值T的求法如下:T=65536-N=65536-fi÷2÷fr

例如:設(shè)K=65536.fi=1MHz.求低音DO〔261Hz、中音DO〔523Hz、高音DO〔1046Hz的計(jì)數(shù)值。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr

低音DO的T=65536-500000/262=63627

中音DO的T=65536-500000/523=64580

高音DO的T=65536-500000/1046=65059第4章KEIL仿真軟件的應(yīng)用硬件與軟件的設(shè)計(jì)一般都要分別借助一些軟件.如我們通常用作電路設(shè)計(jì)與制版的Protel.MCS-51程序開發(fā)工具KEIL等。KeilC51uVision2集成開發(fā)環(huán)境是基于80C51內(nèi)核的軟件開發(fā)平臺(tái).支持工程建立、程序的編譯與鏈接、軟件仿真、硬件仿真、目標(biāo)代碼的生成等功能。KeilC51編譯器在產(chǎn)生代碼的準(zhǔn)確性和效率方面達(dá)到了較高的水平。

與大多數(shù)集成開發(fā)環(huán)境類似.KeilC51集成開發(fā)環(huán)境也是用工程的方法來管理文件.在一個(gè)工程文件中源程序〔C51程序、匯編程序、頭文件等都可以進(jìn)行統(tǒng)一管理。

安裝運(yùn)行KEIL51.使用KEIL的開發(fā)工具進(jìn)行項(xiàng)目開發(fā)過程.與其他軟件開發(fā)項(xiàng)目的過程基本上相同:創(chuàng)建C語言或匯編語言的源程序。編譯或匯編源文件。糾正源文件中的錯(cuò)誤。從編譯器和匯編器連接目標(biāo)文件。測(cè)試連接的應(yīng)用程序。第5章調(diào)試與故障分析5.1軟件程序調(diào)試本次設(shè)計(jì)的軟件部分由音樂播放程序組成。關(guān)于音樂播放程序的調(diào)試.我首先采用Preteus軟件來仿真.但是該仿真軟件中沒有喇叭或蜂鳴器等聲音播放工具。于是本人將圖3-4中的單片機(jī)的P1.0處接了一個(gè)示波器.想通過這樣來仿真并調(diào)試音樂播放程序.但是效果不是很理想。程序運(yùn)行的時(shí)候.能看見示波器有不同頻率的波形交替出現(xiàn).但是頻率變換得很快.無法確認(rèn)是否顯示的是所需要的頻率.并且無法辨別音頻變換的節(jié)奏是否正確。此方法并不適用。接著.我制作了一個(gè)簡(jiǎn)單的單片機(jī)播放器電路。即在實(shí)驗(yàn)板上焊接實(shí)驗(yàn)電路.電路由單片機(jī)89C51、按鈕外圍電路組成.并在單片機(jī)的P1.0處用三極管連接一個(gè)簡(jiǎn)單的音頻放大器.再外接一個(gè)蜂鳴器。將程序?qū)懭雴纹瑱C(jī)中.這樣就能聽出聲音和音樂節(jié)奏是否正確。5.2硬件電路調(diào)試本次設(shè)計(jì)的硬件電路主要由單片機(jī)89C51組成.在調(diào)試電路的過程中也碰到了一些問題。問題一:?jiǎn)纹瑱C(jī)無法正常下載程序。調(diào)試步驟:〔1檢查單片機(jī)和串口電路是否連接錯(cuò)?!?檢查焊接電路是否有虛焊和漏焊。問題二:下載音頻程序后無法播放音樂。調(diào)試步驟:檢查電源是否正常接入電路中。利用示波器測(cè)試單片機(jī)輸出端是否有信號(hào)輸出.發(fā)現(xiàn)信號(hào)輸出正常.說明單片機(jī)正常工作。利用示波器測(cè)試音頻放大電路輸出端是否有信號(hào)輸出.發(fā)現(xiàn)信號(hào)輸出正常.說明音頻放大電路工作正常.同時(shí)說明是蜂鳴器部分出現(xiàn)了問題。故障原因:焊接時(shí)將發(fā)聲器件燒壞了.導(dǎo)致發(fā)不出聲音。解決方案:重新?lián)Q一個(gè)無源蜂鳴器.即可正常播放音樂??偨Y(jié)經(jīng)過這次創(chuàng)新設(shè)計(jì).我覺得自己學(xué)到了不少東西。歸納起來.主要有以下幾點(diǎn):〔1通過這次創(chuàng)新設(shè)計(jì).我能將以前四年所學(xué)到的專業(yè)知識(shí)與實(shí)踐相聯(lián)系.將所學(xué)到的知識(shí)充分運(yùn)用到本次設(shè)計(jì)中。同時(shí).我也認(rèn)識(shí)到自己知識(shí)上不足的地方.體會(huì)到了所學(xué)理論知識(shí)的重要性.知識(shí)掌握得越多.設(shè)計(jì)得就更全面、更順利、更好?!?進(jìn)一步熟悉了單片機(jī)的知識(shí)。通過本次設(shè)計(jì).我對(duì)單片機(jī)的基本原理、內(nèi)部結(jié)構(gòu)、各引腳功能、定時(shí)器和中斷的應(yīng)用都有了更深刻的理解。并且.能夠以單片機(jī)為基礎(chǔ)元件設(shè)計(jì)一個(gè)簡(jiǎn)單的系統(tǒng)?!?通過本次設(shè)計(jì).熟悉了設(shè)計(jì)一個(gè)項(xiàng)目所必經(jīng)的幾個(gè)階段。本次設(shè)計(jì)從理論研究到硬件原理圖設(shè)計(jì).從元器件的選擇到PCB板的制作.從軟件編程到最后的調(diào)試過程都由我獨(dú)立完成。這不僅鍛煉了我獨(dú)立完成設(shè)計(jì)工作的能力.更重要的是了解了一個(gè)電子產(chǎn)品的設(shè)計(jì)流程.為將來投入工作增加了寶貴的經(jīng)驗(yàn).奠定了堅(jiān)實(shí)的基礎(chǔ)?!?提高了自己查找資料的能力。在設(shè)計(jì)過程中.我碰到了一些暫時(shí)無法解決的問題.于是我通過上網(wǎng)查閱和圖書館借閱資料.或是通過與老師同學(xué)交流一步步地解決了。從中我懂得了我們這個(gè)專業(yè)的知識(shí)面相當(dāng)廣泛.我們需要不斷通過各種途徑更新自己的知識(shí).不斷充實(shí)自己.同時(shí)要懂得與他人交流意見.積極聽取別人的建議.懂得不斷學(xué)習(xí)的重要性。致謝在棗莊學(xué)院的求學(xué)生涯在師長、親友的大力支持下.走得辛苦卻也收獲滿囊.在論文即將付梓之際.思緒萬千.心情久久不能平靜。偉人、名人為我所崇拜.可是我更急切地要把我的敬意和贊美獻(xiàn)給一位平凡的人.我的導(dǎo)師。我不是您最出色的學(xué)生.而您卻是我最尊敬的老師。您治學(xué)嚴(yán)謹(jǐn).學(xué)識(shí)淵博.思想深邃.視野雄闊.為我營造了一種良好的精神氛圍。授人以魚不如授人以漁.置身其間.耳濡目染.潛移默化.使我不僅接受了全新的思想觀念.樹立了宏偉的學(xué)術(shù)目標(biāo).領(lǐng)會(huì)了基本的思考方式.從論文題目的選定到論文寫作的指導(dǎo),經(jīng)由您悉心的點(diǎn)撥,再經(jīng)思考后的領(lǐng)悟,常常讓我有"山重水復(fù)疑無路,柳暗花明又一村"。感謝我的爸爸媽媽.焉得諼草.言樹之背.養(yǎng)育之恩.無以回報(bào).你們永遠(yuǎn)健康快樂是我最大的心愿。在論文即將完成之際.我的心情無法平靜.從開始進(jìn)入課題到論文的順利完成.有多少可敬的師長、同學(xué)、朋友給了我無言的幫助.在這里請(qǐng)接受我誠摯謝意!最后再一次感謝所有在創(chuàng)新設(shè)計(jì)中曾經(jīng)幫助過我的良師益友和同學(xué).以及在設(shè)計(jì)中被我引用或參考的論著的作者。參考文獻(xiàn)[1]鄭郁正.單片機(jī)原理及應(yīng)用.XX大學(xué)出版社.2003[2]譚浩強(qiáng).C程序設(shè)計(jì)〔第二版.清華大學(xué)出版社.1999[3]王曉君.安國臣等.MCS—51及兼容單片機(jī)原理與選型.北京-電子工業(yè)出版社,2003[4]李啟炎.Protel99SE應(yīng)用教程.上海-同濟(jì)大學(xué)出版社2005.2[5]胡燁,姚鵬翼,江思敏.Protel99SE電路設(shè)計(jì)與仿真教程.北京-機(jī)械工業(yè)出版社,2006[6]張義和.陳敵北。例說8051。北京:人民郵電出版社.2006[7]張洪潤.張亞凡。單片機(jī)原理及應(yīng)用。清華大學(xué)出版社.2004[8]AT89C51DATASHEEPPhilipsSemiconductors1999.dec[9]Yang.Y.,Yi.J.,Woo,Y.Y.,andKim.B.:‘OptimumdesignforlinearityandefficiencyofmicrowaveDohertyamplifierusinganewloadmatchingtechnique’,Microw.J.,2001,44,<12>,pp.20–36[10]Vizimuller,P.:‘RFdesignguide-systems,circuits,andequations’<ArtechHouse,Boston,MA,1995>附錄1:原理圖附錄2:源程序#include<reg51.h>#definesound_amount5//歌曲的數(shù)量sbitplay_up=P1^3; //上一首歌sbitplay_down=P3^5;//下一首歌sbitpause=P3^2;//播放\暫停sbitspeaker=P1^0;//無源蜂鳴器unsignedchartimer0h,timer0l,time;//timer0h,timer0l為定時(shí)器T0的高低位初值,time為對(duì)應(yīng)的節(jié)拍時(shí)間unsignedcharmusic_num;//music_num為歌曲編號(hào),music_num=0表示剛開機(jī)時(shí)的狀態(tài),num是查找歌曲數(shù)據(jù)表的地址unsignedintnum;signedintfre;//對(duì)應(yīng)頻率數(shù)據(jù)表的地址bitplay_enable;//歌曲播放的使能標(biāo)志位,用于播放\暫停voiddelay<unsignedchart>; //延時(shí)子函數(shù),控制發(fā)音的時(shí)間長度voiddelayms<unsignedintt>; //普通延時(shí)子程序,可用于按鍵消抖voidmusic_play<void>; //播放歌曲////////////////////////////////////////////////每三個(gè)數(shù)字,代表一個(gè)音符//第一個(gè)數(shù)字是音符的數(shù)值1234567之一<第幾個(gè)音>,代表哆來咪發(fā)...//第二個(gè)數(shù)字是0123之一,代表低音\中音\高音\超高音<第幾個(gè)八度>//第三個(gè)數(shù)字是時(shí)間長度,以半拍為單位,樂曲數(shù)據(jù)表的結(jié)尾是三個(gè)0//《煙花易冷》unsignedcharcodesong1[]={5,2,1,3,2,1,2,2,2,2,2,4,3,2,1,1,2,1,2,2,1,3,2,4, 5,2,1,3,2,1,2,2,2,2,2,2,5,1,1,3,2,1,4,2,1,3,2,4, 3,2,1,3,2,1,7,2,1,3,2,1,2,2,2,1,2,1,7,1,1,1,2,1, 2,2,1,3,2,1,6,2,3,6,1,1,1,2,1,3,2,1,2,2,1,6,1,1, 1,2,1,7,1,1,5,1,1,6,1,6,5,2,1,3,2,1,2,2,2,2,2,1, 2,2,1,2,2,1,5,1,1,3,2,1,4,2,1,3,2,4,3,2,1,3,2,1, 7,2,3,3,2,1,2,2,2,1,2,1,7,1,1,1,2,1,2,2,1,3,2,1, 6,2,3,6,1,1,1,2,1,3,2,1,2,2,1,6,1,1,1,2,1,7,1,2, 5,1,2,6,1,6,0,0,0};//《發(fā)如雪》unsignedcharcodesong2[]={5,1,1,2,2,1,3,2,2,2,2,1,3,2,1,5,2,1,6,2,1,5,2,3,1,2,1,2,2,1, 3,2,1,6,2,1,5,2,1,3,2,1,5,2,3,5,2,1,6,2,1,1,3,2,6,2,1,5,2,1, 3,2,1,5,2,1,3,2,2,1,2,1,2,2,1,3,2,1,1,2,1,6,1,1,3,2,1,2,2,1, 5,1,1,2,2,1,3,2,2,2,2,1,3,2,1,5,2,1,6,2,1,5,2,3,1,2,1,2,2,1, 5,2,1,3,2,1,5,2,1,3,2,2,1,2,1,6,1,1,3,2,1,2,2,1,1,2,1,6,1,1, 1,2,1,2,2,1,2,2,1,1,2,4,0,0,0};//《簡(jiǎn)單愛》unsignedcharcodesong3[]={5,1,1,1,2,1,2,2,1,3,2,1,2,2,1,3,2,1,4,2,1,5,2,1,5,2,1,5,2,1, 4,2,1,3,2,1,2,2,3,5,1,1,1,2,1,2,2,1,3,2,1,4,2,1,5,2,1,5,2,1, 5,2,1,6,2,1,5,2,2,2,2,1,3,2,1,1,2,2,1,2,1,6,1,1,2,2,1,2,2,1, 3,2,1,3,2,1,1,2,1,5,2,1,1,2,1,5,2,1,1,2,1,7,1,1,1,2,1,1,2,1,6,1,1,2,2,1,2,2,1,3,2,1,3,2,1,5,2,1,5,2,1,4,2,1,3,2,1,2,2,3,5,1,1,1,2,1,2,2,1,3,2,1,2,2,1,3,2,1,4,2,1,5,2,1,5,2,1,5,2,2,2,2,1,3,2,1,1,2,2,1,2,1,6,1,1,2,2,1,2,2,1,3,2,1,3,2,1,1,2,2,5,2,1,1,2,1,5,2,1,5,2,1,7,1,1,1,2,1,0,0,0};//《世上只有媽媽好》unsignedcharcodesong4[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1, //6,2,3代表6,中音,3個(gè)半拍; //5,2,1代表5,中音,1個(gè)半拍; //3,2,2代表3,中音,2個(gè)半拍; //5,2,2代表5,中音,2個(gè)半拍; //1,3,2代表1,高音,2個(gè)半拍;3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};//《當(dāng)你孤單你會(huì)想起誰》unsignedcharcodesong5[]={3,2,2,3,2,1,4,2,1,3,2,2,2,2,1,1,2,1,2,2,2,5,2,2,2,2,2,2,2,3, 6,1,2,2,2,1,3,2,1,2,2,1,1,2,1,6,1,2,5,1,2,2,2,1,3,2,1,2,2,1, 1,2,1,6,1,2,6,1,2,2,2,1,3,2,1,2,2,1,1,2,1,6,1,1,7,1,1,1,2,6,0,0,0};//《鄉(xiāng)間小路》unsignedcharcodesong6[]={3,1,2,3,1,1,3,1,1,6,0,1,6,0,1,1,1,2,6,0,1,5,0,1,6,0,4,6,0,2,6,0,1,6,0,1,6,0,2,6,0,1,1,1,1,2,1,2,2,1,1,3,1,1,2,1,4,3,1,1,3,1,1,3,1,1,2,1,1,4,1,2,3,1,1,6,1,1,7,1,1,6,1,1,5,1,1,5,1,2,5,1,1,2,1,1,5,1,1,6,1,1,5,1,1,4,1,1,4,1,2,4,1,1,3,1,1,2,1,2,1,1,1,2,1,1,3,1,1,2,1,1,1,1,1,2,1,1,3,1,4,6,1,2,3,1,1,6,1,1,7,1,1, 6,1,1,5,1,1,5,1,2,2,1,1,5,1,1,6,1,1,5,1,1,4,1,1,0,0,0};//《送別》unsignedcharcodesong7[]={5,1,2,3,1,3,5,1,1,1,2,3,6,1,2,1,2,2,5,1,4,5,1,2,1,1,1,2,1,1,3,1,2,2,1,1,1,1,1,2,1,4,5,1,2, 3,1,1,5,1,1,1,2,2,7,1,1,6,1,2,1,2,2,5,1,4,5,1,2,2,1,1, 7,1,1,1,2,4,6,1,1,7,1,1,1,2,1,6,1,1,6,1,1,5,1,1,3,1,1, 1,1,1,2,1,8,5,1,2,3,1,1,5,1,1,1,2,2,7,1,1,6,1,2,1,2,2, 5,1,4,5,1,2,2,1,1,3,1,1,4,1,2,7,0,2,1,1,4,0,0,0};//《最浪漫的事》unsignedcharcodesong8[]={5,1,1,6,1,1,1,2,1,6,1,2,6,1,1,5,1,1,6,1,1,5,1,1,3,1,1,5,1,5, 5,1,1,6,1,1,1,2,1,6,1,2,6,1,1,5,1,1,6,1,1,5,1,1,6,1,1,1,1,5, 3,1,2,2,1,3,5,1,1,6,1,1,1,2,1,6,1,2,6,1,1,5,1,1,6,1,1,5,1,1, 6,1,1,1,1,5,1,1,1,2,1,1,3,1,1,4,1,2,4,1,1,5,1,1,6,1,1,6,1,1, 5,1,1,6,1,2,1,2,1,6,1,3,1,2,1,6,1,1,5,1,1,5,1,4,1,1,1,6,1,1, 5,1,5,5,1,1,6,1,1,1,2,1,3,1,1,2,1,1,3,1,1,1,1,6,0,0,0};//頻率-半周期數(shù)據(jù)表高八位共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)unsignedcharcodeFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音12345670xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音2345670xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};//超高音1234567//頻率-半周期數(shù)據(jù)表低八位unsignedcharcodeFREQL[]={0x42,0xC1,0x17,0xB6,//低音12345670x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音2345670x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};//超高音1234567voidmain<void>{ TMOD=0x11;//T0T1均在工作方式1 ET0=1;//T0開中斷 EA=1;//CPU開中斷 while<1> { music_play<>; //根據(jù)當(dāng)前狀態(tài)播放相應(yīng)歌曲的某個(gè)音符 if<!pause> //暫停鍵處理 { if<!pause> { if<music_num==0>//music_num=0只有在剛開機(jī),且未按下暫停鍵時(shí)存在,表示剛開機(jī)時(shí)的狀態(tài),按下后從第一首開始播放 { music_num=1;//歌曲序號(hào)置1 num=0; //從頭播放 play_enable=1; //允許播放 } else { play_enable=~play_enable; speaker=1; } while<!pause> //若按著暫停鍵不放手時(shí)的處理 { if<play_enable==0>{} //如果是暫停.則顯示時(shí)間不變//〔暫停時(shí)play_enable==0 } }//暫停鍵處理結(jié)束 }//while結(jié)束 if<<!play_up>&&<music_num!=0>>//上一首按鍵 { delayms<5>; if<<!play_up>&&<music_num!=0>> {speaker=1; music_num-=1;//歌曲編號(hào)減一 if<music_num<=0> music_num=8; num=0; //從頭開始播放 if<music_num==<sound_amount+1>> music_num=1; delayms<500>;//歌曲切換時(shí)延時(shí)0.5S } } if<<!play_down>&&<music_num!=0>> { delayms<5>; if<<!play_down>&&<music_num!=0>> {speaker=1; music_num=1; num=0; //從頭開始播放 if<music_num==0> music_num=sound_amount; delayms<500>;//歌曲切換時(shí)延時(shí)0.5S } } }}voiddelayms<unsignedintt> //MS延時(shí)子程序{ unsignedinti,j; for<i=0;i<t;i++> { for<j=0;j<123;j++>; }}voiddelay<unsignedchart> //延時(shí)子函數(shù),控制發(fā)音的時(shí)間長度,每個(gè)節(jié)拍0.4S{ unsignedchart1; for<t1=0;t1<t;t1++> //嵌套循環(huán),共延時(shí)t個(gè)半拍 { for<t2=0;t2<8000;t2++>;//延時(shí)期間,可進(jìn)入T0中斷去發(fā)音 } TR0=0; //關(guān)閉T0,停止發(fā)音}voidtimer0<void>interrupt1//T0中斷程序,控制發(fā)音的音調(diào){ speaker=!speaker;//輸出方波,發(fā)音 TH0=timer0h; //下次的中斷時(shí)間,這個(gè)時(shí)間控制音調(diào)高低 TL0=timer0l;}voidsong<void> //演奏一個(gè)音符{ TH0=timer0h;//控制音調(diào) TR0=1; //啟動(dòng)T0,由T0輸出方波發(fā)音 delay<time>;//每個(gè)音符的演奏時(shí)間}voidmusic_play<void>//播放相應(yīng)歌曲的某個(gè)音符{ if<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論