單片機課程設計報告(利用蜂鳴器播放音樂)_第1頁
單片機課程設計報告(利用蜂鳴器播放音樂)_第2頁
單片機課程設計報告(利用蜂鳴器播放音樂)_第3頁
單片機課程設計報告(利用蜂鳴器播放音樂)_第4頁
單片機課程設計報告(利用蜂鳴器播放音樂)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

成績 課程設計:電子設計題目名稱:音樂流水燈姓 名:戴錦超 學 號: 班 級:信科12-3班 完成時間:2014年10月23日 1設計的任務 設計內(nèi)容:動手焊接一個51單片機設計目標:利用單片機上的蜂鳴器以及二極管實現(xiàn)音樂播放以及根據(jù)音樂的節(jié)奏而規(guī)律性閃亮的二極管。并且通過程序調(diào)節(jié)音樂節(jié)奏的快慢。2 設計的過程2.1 基本結構1.STC89C52RC在本次的試驗中采用了STC89C52RC單片機,STC89C52RC單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單片機,指令代碼完全兼容傳統(tǒng)8051單片機,12時鐘/機器周期,工作電壓:5.5V3.3V(5V單片機)/3.8V2.0V(3V單片機),工作頻率范圍:040MHz,相當于普通8051的080MHz,實際工作頻率可達48MHz,用戶應用程序空間為8K字節(jié)。 (STC89C52RC引腳圖)STC89C52RC單片機的工作模式:(1) 典型功耗0.1A,可由外部中斷喚醒,中斷返回后,繼續(xù)執(zhí)行原程序(2) 空閑模式:典型功耗2mA(3) 正常工作模式:典型功耗4Ma7mA(4) 喚醒,適用于水表、氣表等電池供電系統(tǒng)及便攜設備2.蜂鳴器及其工作原理:蜂鳴器按其結構分主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。本實驗采用的是電磁式蜂鳴器。蜂鳴器按其是否帶有信號源又分為有源和無源兩種類型。有源蜂鳴器只需要在其供電端加上額定直流電壓,其內(nèi)部的震蕩器就可以產(chǎn)生固定頻率的信號,驅(qū)動蜂鳴器發(fā)出聲音。無源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號才可以驅(qū)動發(fā)出聲音。本實驗采用的是有源蜂鳴器。(蜂鳴器與單片機連接電路圖)2.2 軟件設計過程1. 蜂鳴器發(fā)聲原理本實驗由于采用有源蜂鳴器,只需將引腳端口P14清零,蜂鳴器即可發(fā)聲;P14置位,蜂鳴器停止發(fā)聲。采用置1置0的方法只能使蜂鳴器發(fā)聲或停止發(fā)聲,想要使蜂鳴器發(fā)出聲音,必須對蜂鳴器發(fā)出聲音的音頻和節(jié)拍進行控制。(音樂基礎音調(diào):不同音高的樂音是用C、D、E、F、G、A、B來表示,這7個字母就是音樂的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡譜的1、2、3、4、5、6、7,相當于漢字“多來米發(fā)梭拉西”的讀音,這是唱曲時樂音的發(fā)音,所以叫“音調(diào)”,即Tone。把C、D、E、F、G、A、B這一組音的距離分成12個等份,每一個等份叫一個“半音”。兩個音之間的距離有兩個“半音”,就叫“全音”。在鋼琴等鍵盤樂器上,CD、DE、FG、GA、AB兩音之間隔著一個黑鍵,他們之間的距離就是全音;EF、BC兩音之間沒有黑鍵相隔,它們之間的距離就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它們的左上角加上號或者b號的叫變化音。叫升記號,表示把音在原來的基礎上升高半音,b叫降記音,表示在原來的基礎上降低半音。例如高音DO的頻率(1046Hz)剛好是中音DO的頻率(523Hz)的一倍,中音DO的頻率(523Hz)剛好是低音DO頻率(266 Hz)的一倍;同樣的,高音RE的頻率(1175Hz)剛好是中音RE的頻率(587Hz)的一倍,中音RE的頻率(587Hz)剛好是低音RE頻率(294 Hz)的一倍。節(jié)拍:節(jié)拍是讓音樂具有旋律(固定的律動),而且可以調(diào)節(jié)各個音的快滿度?!肮?jié)拍”,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實0.5s,則1/4 拍為0.125s。至于1拍多少s,并沒有嚴格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘72下,有些人快一點,有些人慢一點,只要聽的悅耳就好。音持續(xù)時間的長短即時值,一般用拍數(shù)表示。休止符表示暫停發(fā)音。)1) 控制發(fā)聲頻率要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用定時器計時這半個周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復計時此半周期時間再對I/O反相,就可在I/O腳上得到此頻率的脈沖。利用STC89C52RC的內(nèi)部定時器使其工作在計數(shù)器模式MODE1下,改變計數(shù)值TH0及TL0從而產(chǎn)生不同頻率。此外結束符和休止符可以分別用代碼00H和FFH來表示,若查表結果為0x00,則表示曲子終了;若查表結果為0xff,則產(chǎn)生相應的停頓效果。以標準音高A為例,A的頻率是440Hz,周期T=1/440=2272us。在占空比為50%的情況下,導通時間=斷開時間=半周期t=2272us/2=1136us,利用P34端口的位操作,經(jīng)過不斷地反相變換即可得到標準音高A的音頻脈沖。端口導通時間與斷開時的時間利用定時器實現(xiàn)。具體的方法是將單片機定時器的中斷觸發(fā)時間設為半周期t,這樣每隔半周期端口反相,輸出連續(xù)的對應音高的頻率。設晶振的頻率為f0,中斷觸發(fā)時間(半周期)為t,定時器工作在模式1時計數(shù)器的初值為THL,高8位為THL,低8位為TL。時鐘周期即為1/f0,定時器每一次累加用去一個機器周期,一個機器周期包含12個時鐘周期,即定時器每次加一所用時間是12/f0。定時器在模式1下計時采用16位數(shù),最大計數(shù)為216-1(65535),再次加一(65536)溢出觸發(fā)中斷。根據(jù)以上分析可得如下關系:音頻對應定時器初值的高8位TH=THL/(28)=(65536-t*f/12)/256;音頻對應定時器初值的低8位TL=THL%(28)=(65536-t*f/12)%256;附:八度12音階定時器初值表(只含自然音)低音音名頻率Hz晶振12MHz中音音名頻率Hz晶振12MHz高音音名頻率Hz晶振12MHzDo2620xF885Do5230xFC43Do10460xFE21Re2940xF95ARe5870xFCADRe11750xFE56Mi3300xFA13Mi6590xFD0AMi13180xFE85Fa3490xFA68Fa6980xFD34Fa13970xFE9ASo3920xFB04So7840xFD82So15680xFEC1La4400xFB90La8800xFDC8La17600xFEE4Si4940xFC0CSi9880xFE06Si19760xFF032)控制發(fā)聲節(jié)拍每個音符的節(jié)拍可通過延時一定的時間來實現(xiàn),在具體實現(xiàn)時需要有一個基本的帶參延時程序,用于主函數(shù)根據(jù)不同的音符調(diào)用不同的時延。若以十六分之一音符的時長為基本延時時間,則十六分音符只需調(diào)用一次延時程序,八分音符則需調(diào)用兩次延時程序,以此類推。*簡譜編碼將簡譜中的每個音符進行編碼,每個音符用一個unsigned char字符類型表示,簡譜可用一個unsigned char字符數(shù)組表示。字符的前四位表示音頻,可以表示0-f共十六個音符。本實驗中采用了中音區(qū)和高音區(qū)。中音do-si分別編碼為17,高音do-si分別編碼為8E,停頓編為0。字符的后四位表示節(jié)拍,節(jié)拍以十六分音符為單位(在本程序中為165ms),一拍即四分音符等于4個十六分音符,編為4,其它的播放時間以此類推。以0xff作為曲譜的結束標志。程序從數(shù)組中取出一個數(shù),然后分離出高4位得到音調(diào) ,將值賦給定時器0,得到音調(diào);接著分離出該數(shù)的低4位,得到節(jié)拍。本實驗中播放音樂使用簡譜如下:將其編碼成:uchar code sb=/定義送別簡譜0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,0x64,0x84,0x88,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00;2.3 程序流圖及說明(主程序流程圖)程序代碼:#include #define uchar unsigned char#define uint unsigned intuint a=0;/全局變量控制速度變換sbit fm=P14;/蜂鳴器控制端口sbit int0=P32;sbit int1=P33;uchar timeh,timel;/用于存放定時器的高8位和低8位uchar code sb=/定義送別簡譜0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,0x64,0x84,0x88,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00,0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0xf2,0x18,0x00,0x00;/適合12M的晶振定時器初值表,高低8位分開uchar code chuzhi= 0xff,0xff,/占位 0xFC,0x43,/中央C調(diào)1-7 0xFC,0xad, 0xFd,0x0a, 0xFD,0x34, 0xFD,0x82, 0xFD,0xc8, 0xFE,0x06, 0xFe,0x21,/高音 0xFe,0x56, 0xFe,0x85, 0xFe,0x9a, 0xFe,0xc1, 0xFe,0xe4, 0xFf,0x03, 0xFc,0x0c /0xF8,0x18,/高八度1-7 ;void timer0() interrupt 1 /定時器0中斷服務程序TH0=timeh;/將timeh賦給計時器的高8位TL0=timel; /將timel賦給計時器的低8位fm=fm; /定時器每次到時將蜂鳴器反相void delay(uint z)/延時165MS,即十六分音符uint y;for(z;z0;z-) for(y=19000-a;y0;y-);/大致時間void delay1(uint z)/延時1MSuint y;for(z;z0;z-) for(y=112;y0;y-);/大致時間void main()uint temp;/存放簡譜數(shù)組中的每一個音符的臨時變量uint lightTemp;/存放音符uchar i=0;uchar jp;/jp用于取出temp中的高8位和低8位IT0=1;/INT0IT1=1; /INT1TMOD=0x01;/設置定時器T0工作于方式1IE=0x87; /允許T0中斷while(1)temp=sbi;if(temp=0xff)break;jp=temp/16; /取數(shù)的高4位,音頻數(shù)值lightTemp=(1=0;i-)for(j=110;j=0;j-)void INT0_svr(void) interrupt 0 delay_ms(10);if(int0=0)a+=2000;if(a18000)a=0;void INT1_svr(void) interrupt 2delay_ms(10);if(int1=0)a-=2000;if(a=0)a=0;3 運行結果或者測試結果 測試結果:利用蜂鳴器實現(xiàn)了播放音樂的功能,并有節(jié)奏的閃滅二極管,可以進行速度的變換。達到了預期的目標,測試成功。4 遇到的問題及解決的方法在設計的過程中主要遇到以下問題:1.計算機與單片機的連接不上問題計算機與單片機的連接需要在電腦端安裝相應的USB轉串的驅(qū)動,由于我組沒有使用實驗室windows xp系統(tǒng),而使用的是個人計算機windows 7系統(tǒng),所以需要針對win 7 的驅(qū)動。后來聯(lián)網(wǎng)搜索下載相應的驅(qū)動之后解決了這一問題。2.如何使蜂鳴器發(fā)出聲音而非Be-Be聲為了解決這個問題,我們深入研究了蜂鳴器發(fā)聲原理與樂譜相關的知識。通過學習相關知識發(fā)現(xiàn),不同的音符對應不同的音高,音高取決于發(fā)聲頻率。所以可以通過構造不同頻率的方波來使蜂鳴器發(fā)出不同頻率的聲音,具體實現(xiàn)時利用定時器計時,定時器每一次累加消耗一個機器周期,即12個時鐘周期。本實驗采用晶振頻率為12MHz,即定時器每一次累加消耗1us,通過設置定時器初值設定蜂鳴器取法的時間間隔,從而產(chǎn)生相應的音頻。每個音符不但有頻率屬性,還有節(jié)

溫馨提示

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

評論

0/150

提交評論