版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、廣西科技大學課程設計說明書單片機課程設計報告題目:利用蜂鳴器實現(xiàn)音樂播放功能 班 別: 姓 名: 指導教師: 柯寶中 日期:2016年10月10日一、課程設計目標1、培養(yǎng)綜合運用知識和獨立開展實踐創(chuàng)新的能力;2、學習和掌握單片機中常用接口電路的應用和設計技術,充分認識理論知識對應用技術的指導性作用,進一步加強理論知識與應用相結合的實踐和鍛煉。通過這次設計實踐能夠進一步加深對專業(yè)知識和理論知識學習的認識和理解,使自己的設計水平和對所學的知識的應用能力以及分析問題解決問題的能力得到全面提高。二、研究方法及手段應用1、將任務分成若干模塊,查閱相關論文資料,分模塊調試和完成任務;2、通過單片機進行實際
2、調試,實現(xiàn)預期的功能。三、課程設計預期效果1、完成實驗環(huán)境搭建;2、實現(xiàn)歌曲播放及歌名顯示。四、實驗原理與設計1、蜂鳴器及其工作原理:蜂鳴器按其結構分主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。本實驗采用的是電磁式蜂鳴器。蜂鳴器按其是否帶有信號源又分為有源和無源兩種類型。有源蜂鳴器只需要在其供電端加上額定直流電壓,其內部的震蕩器就可以產生固定頻率的信號,驅動蜂鳴器發(fā)出聲音。無源蜂鳴器可以理解成與喇叭一樣,需要在
3、其供電端上加上高低不斷變化的電信號才可以驅動發(fā)出聲音。本實驗采用的是有源蜂鳴器。 2、 蜂鳴器發(fā)聲原理本實驗由于采用有源蜂鳴器,只需將引腳端口P34清零,蜂鳴器即可發(fā)聲;P34置位,蜂鳴器停止發(fā)聲。采用置1置0的方法只能使蜂鳴器發(fā)聲或停止發(fā)聲,想要使蜂鳴器發(fā)出聲音,必須對蜂鳴器發(fā)出聲音的音頻和節(jié)拍進行控制。音調:不同音高的樂音是用C、D、E、F、G、A、B來表示,這7個字母就是音樂的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡譜的1、2、3、4、5、6、7,相當于漢字“多來米發(fā)梭拉西”的讀音,這是唱曲時樂音的發(fā)音,所以叫“音調”,即Tone。把C、D、E、F、G、A
4、、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的頻率(
5、1175Hz)剛好是中音RE的頻率(587Hz)的一倍,中音RE的頻率(587Hz)剛好是低音RE頻率(294 Hz)的一倍。節(jié)拍:節(jié)拍是讓音樂具有旋律(固定的律動),而且可以調節(jié)各個音的快滿度。“節(jié)拍”,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實0.5s,則1/4 拍為0.125s。至于1拍多少s,并沒有嚴格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘72下,有些人快一點,有些人慢一點,只要聽的悅耳就好。音持續(xù)時間的長短即時值,一般用拍數(shù)表示。休止符表示暫停發(fā)音。)控制發(fā)聲頻率:要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半
6、周期的時間。利用定時器計時這半個周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復計時此半周期時間再對I/O反相,就可在I/O腳上得到此頻率的脈沖。利用STC89C52RC的內部定時器使其工作在計數(shù)器模式MODE1下,改變計數(shù)值TH0及TL0從而產生不同頻率。此外結束符和休止符可以分別用代碼00H和FFH來表示,若查表結果為0x00,則表示曲子終了;若查表結果為0xff,則產生相應的停頓效果。以標準音高A為例,A的頻率是440Hz,周期T=1/440=2272us。在占空比為50%的情況下,導通時間=斷開時間=半周期t=2272us/2=1136us,利用P34端口的位操作,經過不斷地反
7、相變換即可得到標準音高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/
8、(28)=(65536-t*f/12)/256;音頻對應定時器初值的低8位TL=THL%(28)=(65536-t*f/12)%256;附:八度12音階定時器初值表(只含自然音)低音音名頻率Hz晶振12MHz晶振11.0592MHz中音音名頻率Hz晶振12MHz晶振11.0592MHz高音音名頻率Hz晶振12MHz晶振11.0592MHzDo2620xF8850xF91BDo5230xFC430xFC8EDo10460xFE210xFE47Re2940xF95A0xF9DFRe5870xFCAD0xFCEDRe11750xFE560xFE76Mi3300xFA130xFA8AMi6590xFD
9、0A0xFD43Mi13180xFE850xFEA1Fa3490xFA680xFAD8Fa6980xFD340xFD6AFa13970xFE9A0xFEC7So3920xFB040xFB68So7840xFD820xFDB3So15680xFEC10xFED9La4400xFB900xFBE9La8800xFDC80xFDF3La17600xFEE40xFEF9Si4940xFC0C0xFC5BSi9880xFE060xFE2DSi19760xFF030xFF16*簡譜編碼將簡譜中的每個音符進行編碼,每個音符用一個unsigned char字符類型表示,簡譜可用一個unsigned char字
10、符數(shù)組表示。字符的前四位表示音頻,可以表示0-f共十六個音符。本實驗中采用了中音區(qū)和高音區(qū)。中音do-si分別編碼為17,高音do-si分別編碼為8E,停頓編為0。字符的后四位表示節(jié)拍,節(jié)拍以十六分音符為單位(在本程序中為165ms),一拍即四分音符等于4個十六分音符,編為4,其它的播放時間以此類推。以0xff作為曲譜的結束標志。程序從數(shù)組中取出一個數(shù),然后分離出高4位得到音調 ,將值賦給定時器0,得到音調;接著分離出該數(shù)的低4位,得到節(jié)拍。3、程序流程圖及說明五、程序設計#include <reg51.h> /包含所選單片機的定義頭文件sbit SPEAKER = P27; /定
11、義音樂輸出口#define uchar unsigned charsbit LCD_RS = P20; sbit LCD_RW = P21;sbit LCD_EN = P22;sbit led = P10;typedef struct /定義音符結構unsigned int mFreq;/發(fā)聲頻率(對應的定時器初值)unsigned int mDelay; /發(fā)聲時值CNote;unsigned char ReloadH; /定義定時器T1重裝值unsigned char ReloadL;uchar code cdis1 = "Now playing: " uchar co
12、de cdis2 = " Guo ge "/*函數(shù):T1_ISR()功能:定時器T1中斷服務函數(shù),產生音樂振蕩頻率*/void T1_ISR() interrupt 3TR1 = 0;TH1 = ReloadH;TL1 = ReloadL;TR1 = 1;SPEAKER = !SPEAKER; /音樂聲頻的半個波/*函數(shù):Delay()功能:延時0.00165.536s參數(shù):t>0時,延時(t*0.001)s t=0時,延時65.536s*/void Delay(unsigned int t)doTH0 = 0xFC;/定時器賦初值,定時1msTL0 = 0x66+1
13、7;TR0 = 1;/啟動定時器while ( !TF0 );/等待定時器溢出TR0 = 0;/關閉定時器TF0 = 0;/清除溢出標志 while ( -t != 0 );/循環(huán)t次/*函數(shù):Sound()功能:演奏一個音符參數(shù):*note,音符指針,指向要演奏的音符*/void Sound(CNote *note) /利用定時器T1發(fā)出音符的頻率if ( note->mFreq != 0 )ReloadH = (unsigned char)(note->mFreq >> 8);ReloadL = (unsigned char)(note->mFreq);TH1
14、 = 0xFF;TL1 = 0xF0;TR1 = 1;Delay(note->mDelay); /發(fā)聲延時TR1 = 0; /停止發(fā)聲TF1 = 0;SPEAKER = 1;Delay(5); /*函數(shù):Play()功能:演奏一段樂曲參數(shù):music,要演奏的樂曲*/void delay1(int ms) uchar t; while(ms-) for(t = 0; t < 120; t+); void Play(CNote music)unsigned int n = 0;while(1)if ( musicn.mDelay = 0 ) break;Sound(&(mus
15、icn);n+;/* 定義音符表 */ 音頻變量名 定時器初值 音頻率值 音名 #define A 0xEFA3 / 110.000Hz A#define As 0xF08E / 116.541Hz A#define B 0xF16C / 123.471Hz B#define c 0xF23D / 130.813Hz c#define cs 0xF303 / 138.591Hz c#define d 0xF3BE / 146.832Hz d#define ds 0xF46E / 155.563Hz d#define e 0xF514 / 164.814Hz e#define f 0xF5B1
16、/ 174.614Hz #define fs 0xF645 / 184.997Hz f#define g 0xF6D1 / 195.998Hz g#define gs 0xF755 / 207.652Hz g#define a 0xF7D1 / 220.000Hz a#define as 0xF847 / 233.082Hz a#define b 0xF8B6 / 246.942Hz b#define c1 0xF91F / 261.626Hz c1 (中央C)#define c1s 0xF982 / 277.183Hz c1#define d1 0xF9DF / 293.665Hz d1#d
17、efine d1s 0xFA37 / 311.127Hz d1#define e1 0xFA8A / 329.628Hz e1#define f1 0xFAD9 / 349.228Hz f1#define f1s 0xFB23 / 369.994Hz f1#define g1 0xFB68 / 391.995Hz g1#define g1s 0xFBAA / 415.305Hz g1#define a1 0xFBE9 / 440.000Hz a1(標準音)#define a1s 0xFC24 / 466.164Hz a1#define b1 0xFC5B / 493.883Hz b1#defi
18、ne c2 0xFC8F / 523.251Hz c2#define c2s 0xFCC1 / 554.365Hz c2#define d2 0xFCEF / 587.330Hz d2#define d2s 0xFD1B / 622.254Hz d2#define e2 0xFD45 / 659.255Hz e2#define f2 0xFD6C / 698.456Hz f2#define f2s 0xFD91 / 739.989Hz f2#define g2 0xFDB4 / 783.991Hz g2#define g2s 0xFDD5 / 830.609Hz g2#define a2 0x
19、FDF4 / 880.000Hz a2#define a2s 0xFE12 / 932.328Hz a2#define b2 0xFE2D / 987.767Hz b2#define c3 0xFE48 / 1046.500Hz c3#define c3s 0xFE60 / 1108.730Hz c3#define d3 0xFE78 / 1174.660Hz d3#define d3s 0xFE8E / 1244.510Hz d3# #define e3 0xFEA3 / 1318.510Hz e3#define f3 0xFEB6 / 1396.910Hz f3#define f3s 0x
20、FEC9 / 1479.980Hz f3#define g3 0xFEDA / 1567.980Hz g3#define g3s 0xFEEB / 1661.220Hz g3#define a3 0xFEFA / 1760.000Hz a3#define a3s 0xFF09 / 1864.660Hz a3# #define b3 0xFF17 / 1975.530Hz b3/定義發(fā)聲時值/T*4全音符,T*2二分音符,T四分音符,T/2八分音符,T/4十六分音符#define T625code CNote MusicTab =0,T/2,d2,T/2,g2,T+T/2,g2,T/2,g2,T
21、/2,g2,T/2,d2,T/3,e2,T/3,f2s,T/3,g2,T,g2,T,0,T/2,b2,T/2,g2,T/2,a2,T/4,b2,T/4,d3,T,d3,T,b2,T/2+T/4,b2,T/4,g2,T/2,b2,T/2,d3,T/2+T/4,b2,T/4,a2,T,a2,2*T,e3,T,d3,T,a2,T,b2,T,d3,T/2,b2,T/2,0,T/2,d3,T/2,b2,T/2,a2,T/4,b2,T/4,g2,T,b2,T,0,T,d2,T/2+T/4,e2,T/4,g2,T/4,g2,T/4,b2,T/2+T/4,b2,T/4,d3,T/2,d3,T/2,a2,T/2
22、,a2,T/4,a2,T/4,e2,T,a2,T+T/2,d2,T/2,g2,T+T/2,g2,T/2,b2,T+T/2,b2,T/2,d3,2*T,g2,T/2+T/4,b2,T/4,d3,T/2,d3,T/2,e3,T,d3,T,b3,T/2+T/4,g2,T/4,d3,T/3,d3,T/3,d3,T/3,b2,T/2,0,T/2,g2,T/2,0,T/2,d2,T,g2,T,b2,T/2+T/4,g2,T/4,d3,T/3,d3,T/3,d3,T/3,b2,T/2,0,T/2,g2,T/2,0,T/2,d2,T,g2,T,d2,T,g2,T,d2,T,g2,T,g2,T,0,T,0,0;
23、bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delay1(1); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /* * 寫指令或數(shù)據(jù)* start=0, 寫入命令; start=1, 寫入數(shù)據(jù)*/void lcd_write(bit start, uchar in_data) uchar Hdata,Ldata;while(lcd_busy(); Hdata=in_data&0xf0; /取高四位 Ldata=(in_data<&
24、lt;4)&0xf0; /取低四位 if(start=0) LCD_RS = 0; /寫入命令 else LCD_RS = 1; /寫入數(shù)據(jù)LCD_RW = 0; LCD_EN = 0;delay1(1);P0 = Hdata; /發(fā)送高四位 LCD_EN = 1; delay1(1); LCD_EN = 0;delay1(1);P0 = Ldata; /發(fā)送低四位 LCD_EN = 1; delay1(1); LCD_EN = 0;delay1(1);/* LCD初始化設定 */void lcd_init() delay1(15); lcd_write(0,0x28); /16*2顯
25、示,5*7點陣,4位數(shù)據(jù) delay1(5); lcd_write(0,0x28); delay1(5); lcd_write(0,0x28); delay1(5); lcd_write(0,0x0c); /顯示開,關光標 delay1(5); lcd_write(0,0x06); /移動光標 delay1(5); lcd_write(0,0x01); /清除LCD的顯示內容 delay1(25); /延時/* 設定顯示位置 */void lcd_pos(uchar pos) lcd_write(0,pos|0x80); /數(shù)據(jù)指針=80+地址變量void main() /主程序 uchar m; lcd_init(); /LCD1602初始化lcd_pos(0x00); /設置顯示位置為第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外研版八年級歷史上冊月考試卷含答案
- 2025年粵教新版九年級歷史下冊階段測試試卷
- 2025年人教版選修6歷史下冊階段測試試卷含答案
- 2025年湘教新版選修2地理上冊月考試卷含答案
- 2025年粵教版九年級科學上冊階段測試試卷含答案
- 2025年冀教版九年級生物上冊階段測試試卷含答案
- 2025年滬教版八年級地理下冊階段測試試卷
- 2025年度跨境電商農產品進出口代理服務合同范本4篇
- 二零二五年度企業(yè)年會禮品贊助合作合同協(xié)議書4篇
- 二零二五年度南海區(qū)勞動就業(yè)服務中心農村勞動力轉移就業(yè)合同4篇
- 中華人民共和國保守國家秘密法實施條例培訓課件
- 管道坡口技術培訓
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 皮膚儲存新技術及臨床應用
- 外研版七年級英語上冊《閱讀理解》專項練習題(含答案)
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫必考題
- 上海市復旦大學附中2024屆高考沖刺模擬數(shù)學試題含解析
- 幼兒園公開課:大班健康《國王生病了》課件
- 小學六年級說明文閱讀題與答案大全
- 人教pep小學六年級上冊英語閱讀理解練習題大全含答案
評論
0/150
提交評論