單片機的音樂盒設計C程序推薦_第1頁
單片機的音樂盒設計C程序推薦_第2頁
單片機的音樂盒設計C程序推薦_第3頁
單片機的音樂盒設計C程序推薦_第4頁
單片機的音樂盒設計C程序推薦_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 單片機音樂盒1概述本設計是以AT89C51芯片的電路為基礎,外部加上放音設備,以此來實現音樂演奏控制器的硬件電路,通過軟件程序來控制單片機內部的定時器使其演奏出優美動聽的音樂。用戶可以按照自己的喜好選擇音樂并將其轉化成機器碼存入單片機的存儲器中。對于不同型號的單片機只需要相應的改變一下地址即可。該軟、硬件系統具有很好的通用性,很高的實際使用價值,為廣大的單片機和音樂愛好者提供了很好的借鑒。1.1 課題意義音樂盒的起源,可追溯至中世紀歐洲文藝復興時期。當時為使教會的鐘塔報時,而將大小的鐘表裝上機械裝置,被稱為“可發出聲音的組鐘”。音樂盒有著300多年的發展歷史,是人類文明發展的歷史見證。傳統的

2、音樂盒多是機械音樂盒,其工作原理是通過齒輪帶動一個帶有鐵釘的鐵桶轉動,鐵桶上的鐵釘撞擊鐵片制成的琴鍵,從而發出聲音。但是,機械式的音樂盒體積比較大,比較笨重,且發音單調。水、灰塵等外在因素,容易使內部金屬發音條變形,從而造成發音跑調。另外,機械音樂盒放音時為了讓音色穩定,必須放平不能動搖,而且價格昂貴,不能實現大批量生產。本文設計的音樂盒,是基于單片機設計制作的電子式音樂盒。與傳統的機械式音樂盒相比更小巧,音質更優美且能演奏和弦音樂。電子式音樂盒動力來源是電池,制作工藝簡單,可進行批量生產,所以價格便宜。基于單片機制作的電子式音樂盒,控制功能強大,可根據需要選歌,使用方便。根據存儲容量的大小,

3、可以盡可能多的存儲歌曲。另外,可以設計彩燈外觀效果,使音樂盒的功能更加豐富。1.2設計方案設計一個基于AT89C51系列單片機的音樂盒,利用按鍵切換演奏出不同的樂曲。蜂鳴器發出某個音調,與之相對應的LED亮起。使用兩個按鍵,一個用來切換歌曲,另一個切換八路LED的變化花樣。1.3研究內容1)電路有兩種工作模式:演奏音樂模式和花樣燈模式。演奏音樂模式:演奏完整的一首的歌曲,八路LED隨著音樂變化。花樣燈模式:八路LED變化出各種花樣,蜂鳴器隨著發出“嘀嘀”聲2)按下按鍵1進入演奏音樂模式,再按切換歌曲,共兩首歌曲。3)按下按鍵2進入花樣燈模式,再按切換LED花樣,共三種花樣。此電路的程序只占用了

4、1K左右,可編制更多的音樂和LED花樣,使系統的功能更加強大。2 系統總體方案介紹2.1 系統組成框圖音樂盒的系統結構以AT89C51單片機位控制核心,加上2個按鍵、時鐘復位電路、蜂鳴器、LED模塊組成。單片機負責接收按鍵的輸入,根據輸入控制音樂播放曲目和音樂花樣燈的顯示樣式以及蜂鳴器發音。系統組成框圖如圖2.1所示。圖2.1 系統組成框圖2.2 音樂盒的功能結構圖音樂盒的功能結構如圖2.2所示。Key1負責切換播放歌曲,播放歌曲共2首,分別是揮著翅膀的女孩和寂寞沙洲冷。Key2負責切換LED顯示花樣,顯示花樣共3種,第一種順序顯示,第二種由兩邊向中間移動然后向兩邊移動,第三種循環顯示。圖2.

5、2 音樂盒功能結構圖3硬件設計3.1 總體設計框圖圖3.1總體設計框圖3.2各部分硬件設計及其原理3.3 硬件電路圖及功能總體硬件電路實現功能如下,如圖3.4所示1) 電路中用P3.2、P3.3控制按鍵。2) P1.0P1.7控制LED。3) P2.3控制蜂鳴器。4) 電路為12MHZ晶振頻率工作,起振電路中C1、C2均為30PF。圖3.4 硬件電路圖4軟件設計在本程序中設置了兩個標志count1和count2,分別初始化為1和0。按鍵1使得count1在1和2之間切換,按鍵2使得count2在14之間切換。程序檢測count1的值,count1等于1時播放第一首歌曲,等于2時播放第二首。另一

6、方面根據count2的值來切換LED的花樣。count1和count2的值是互斥的,設置count1等于1、2時,count2同時設置為0;設置count2等于14時,count1也同時設置為0。4.1音調、節拍以及編碼的確定方法一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應幅度的諧波頻率,也就是說不能像電子琴那樣能奏出多種音色的聲音。因此單片機奏樂只需弄清楚兩個概念即可,也就是“音調”和節拍表示一個音符唱多長的時間。4.1.1 音調的確定不同音高的樂音是用C、D、E、F、G、A、B來表示,這7個字母就是音樂的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡譜的

7、1、2、3、4、5、6、7,相當于漢字“多來米發梭拉西”的讀音,這是唱曲時樂音的發音,所以叫“音調”,即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

8、)剛好是中音DO的頻率(523Hz)的一倍,中音DO的頻率(523Hz)剛好是低音DO頻率(266 Hz)的一倍;同樣的,高音RE的頻率(1175Hz)剛好是中音RE的頻率(587Hz)的一倍,中音RE的頻率(587Hz)剛好是低音RE頻率(294 Hz)的一倍。1)要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用定時器計時這半個周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復計時此半周期時間再對I/O反相,就可在I/O腳上得到此頻率的脈沖。2)利用AT89C51的內部定時器使其工作在計數器模式MODE1下,改變計數值TH0及TL0以產生不

9、同頻率的方法。此外結束符和休止符可以分別用代碼00H和FFH來表示,若查表結果為00H,則表示曲子終了;若查表結果為FFH,則產生相應的停頓效果。3)例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計數器計時956us/1us=956,在每次技術956次時將I/O反相,就可得到中音DO(523Hz)。計數脈沖值與頻率的關系公式如下:N=Fi2FrN:計算值;Fi:內部計時一次為1us,故其頻率為1MHz;4) 其計數值的求法如下:T=65536-N=65536-Fi2Fr例如:設K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。中音DO(523H

10、z)。高音的DO(1046Hz)的計算值T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627低音DO的T=65536-500000/523=64580低音DO的T=65536-500000/1047=650595) C調各音符頻率與計數值T的對照表如表4.1所示。表4.1 C調各音符頻率與計數值T的對照表低音頻率T參數中音頻率T參數高音頻率T參數Do2621908229Do523956115Do10465757Do2771805217Do554903108Do11095454Re2

11、941701204Re587852102Re11755151Re3111608193Re62280497Re12454848Mi3301515182Mi65975991Mi13184545Fa3491433172Fa69871686Fa13974343Fa3701351162Fa74067681Fa14804141So3921276153So78463877So15683838So4151205145So83160272So16613636La4401136136La88056868La17603434La4641078129La93253664La18653232Si4941012121Si

12、98850661Si197630304.1.2 節拍的確定若要構成音樂,光有音調是不夠的,還需要節拍,讓音樂具有旋律(固定的律動),而且可以調節各個音的快慢度。“節拍”,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實0.5s,則1/4 拍為0.125s。至于1拍多少s,并沒有嚴格規定,就像人的心跳一樣,大部分人的心跳是每分鐘72下,有些人快一點,有些人慢一點,只要聽的悅耳就好。音持續時間的長短即時值,一般用拍數表示。休止符表示暫停發音。一首音樂是由許多不同的音符組成的,而每個音符對應著不同頻率,這樣就可以利用不同的頻率的組合,加以與拍數對應的延時,構成音樂。了解音

13、樂的一些基礎知識,我們可知產生不同頻率的音頻脈沖即能產生音樂。對于單片機來說,產生不同頻率的脈沖是非常方便的,利用單片機的定時/計數器來產生這樣的方波頻率信號。因此,需要弄清楚音樂中的音符和對應的頻率,以及單片機定時計數的關系。表4.2節拍與節拍碼對照節拍碼節拍數節拍碼節拍數11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍42/1拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81拍A2又1/2拍A1又1/4拍C3拍C1又1/2拍F3又3/4拍每個音符使用1個字節,字節的高4位代表音符的高低,低4位代表音符的節拍,圖5.2為節拍碼的對照。如果1拍為0.4秒,1/4拍實

14、0.1秒,只要設定延遲時間就可求得節拍的時間。假設1/4拍為1DELAY,則1拍應為4DELAY,以此類推。所以只要求得1/4拍的DELAY時間,其余的節拍就是它的倍數,如圖5.3為1/4和1/8節拍的時間設定。表4.3 1/4和1/8節拍的時間設定曲調值DELAY曲調值DELAY調4/4125毫秒調4/462毫秒調3/4187毫秒調3/494毫秒調2/4250毫秒調2/4125毫秒4.1.3 編碼do re mi fa so la si分別編碼為17,重音do編為8,重音re編為9,停頓編為0。播放長度以十六分音符為單位(在本程序中為165ms),一拍即四分音符等于4個十六分音符,編為4,其

15、它的播放時間以此類推。音調作為編碼的高4位,而播放時間作為低4位,如此音調和節拍就構成了一個編碼。以0xff作為曲譜的結束標志。舉例1:音調do,發音長度為兩拍,即二分音符,將其編碼為0x18。舉例2:音調re,發音長度為半拍,即八分音符,將其編碼為0x22歌曲播放的設計。先將歌曲的簡譜進行編碼,儲存在一個數據類型為unsigned char 的數組中。程序從數組中取出一個數,然后分離出高4位得到音調,接著找出相應的值賦給定時器0,使之定時操作蜂鳴器,得出相應的音調;接著分離出該數的低4位,得到延時時間,接著調用軟件延時。表4.4 簡譜對應的簡譜碼、T值、節拍數簡譜發音簡譜碼T值節拍碼節拍數5

16、低音SO16426011/4拍6低音LA26440022/4拍7低音TI36452433/4拍1中音DO46458041拍2中音RE56468451又1/4拍3中音MI66477761又1/2拍4中音FA76482082拍5中音SO864898A2又1/2拍6中音LA964968C3拍7中音TIA65030F3又3/4拍1高音DOB650582高音REC651103高音MID651574高音FAE651785高音SOF652174.2 軟件程序設計4.2.1 程序流程圖及相應代碼塊主程序流程圖圖4.1 主程序流程圖主程序代碼:main()uchar x;count1=0;/流水燈無花樣 cou

17、nt2=1;/唱第一首歌 P34=0;/選取矩陣鍵盤的一列 EA=1;/開總中斷EX0=1;/開外部中斷0 IT0=1;/外部中斷0下降沿觸發方式 EX1=1;/開外部中斷1 IT1=1;/外部中斷1下降沿觸發方式 TMOD=0x01;/定時器0工作在方式1 TH0=0;TL0=0;ET0=1;while(1)if(count1!=0) /音樂停止,花樣燈開始按照花樣閃爍switch(count1) case 1:for(x=0;x<14;x+)duan=1;P1=huayang1x;beep();delay1(300);duan=0;if(count1!=1)break;break;c

18、ase 2:for(x=0;x<14;x+)duan=1;P1=huayang2x;beep();delay1(300);duan=0;if(count1!=2)break;break;case 3:for(x=0;x<16;x+)duan=1;P1=huayang3x;beep();delay1(300);duan=0;if(count1!=3)break;break;elsesong();delay1(1000);播放音樂子程序流程圖圖4.2 播放音樂子程序流程圖播放音樂子程序代碼:void song()uint temp;uchar jp;/jp是簡譜i=0;while(1)

19、if(count2=0)break;if(count2=1)/選曲 temp=qnzli; / 播放千年之戀if(count2=2)temp=jmszli; / 播放寂寞沙洲冷if(temp=0xff)/結束標志break;jp=temp/16; /取數的高4位duan=1;P1=yinyuejp;duan=0;if(jp!=0)timeh=cuzhijp*2;timel=cuzhijp*2+1;elseTR0=0;fm=1;/關蜂鳴器delay(temp%16); /取數的低4位TR0=0; /唱完一個音停10MSfm=1;delay1(10); TR0=1; i+;TR0=0;fm=1;延

20、時程序代碼:void delay(uint z)/延時165MS,即十六分音符uint x,y;for(x=z;x>0;x-) for(y=19000;y>0;y-);void delay1(uint z)/延時1MSuint x,y;for(x=z;x>0;x-) for(y=112;y>0;y-);4.2.2 程序源代碼(見附錄A)5調試5.1 檢查硬件連接在PROTUES檢查各硬件管腳是否連接正確,線路邏輯是否正確,例如:晶振電路的連接,復位電路是否設計正確。5.2 檢查軟件系統1根據系統的原理結構檢查各流程圖是否正確,再根據流程圖來檢查程序是否也正確。2將所有程

21、序組織起來,在軟件環境下運行,檢查程序是否正確。通過對硬件和軟件系統的認真檢查,反復測試,如果沒有出現問題即可把源程序編譯成HEX文件裝載到單片機中,對硬件進行仿真。5.3 測試結果5.3.1總體運行圖圖5.1 系統總體運行圖5.3.2花樣燈3種花樣圖由于截圖只能看到靜態圖,不能看到整體圖樣,下面畫圖說明:圖5.2 花樣燈(1)第一種花樣燈顯示方式為:從D1移向D2,然后D1熄滅,再從D2移向D3,然后D2熄滅,以此類推,往復循環。圖5.2 第一種花樣(2)第二種花樣燈顯示方式為:從兩邊向中間移動,首先從D1移向D8,再從D8移向D2,以此類推,往復循環。具體如圖5.3。圖5.3 第2種花樣(

22、3)第三種花樣燈顯示方式為:從D1移向D2,然后D1熄滅,再從D2移向D3,然后D2熄滅,以此往復循環。與第一種方式的不同之處為:當D1移向D2時,D1不熄滅,再從D2移向D3時,D2也不熄滅,以此類推。圖5.4 第3中花樣附錄A 程序源代碼及注釋#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit duan=P26;sbit key1=P32;/按key1可切換花樣sbit key2=P33;/按key2可切換歌曲sbit fm=P37;/蜂鳴器連續的IO口sbit P34=P34;/

23、矩陣鍵盤的一列uchar code huayang1=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf;/花樣1uchar code huayang2=0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,0xef,0xfb,0xdf,0xfd,0xbf,0xfe;/花樣2uchar code huayang3=0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff;char c

24、ode huayang4= 0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0;uchar count1;/花樣標志uchar count2;/歌曲標志uchar timeh,timel,i;/-簡譜-/編程規則:字節高位是簡譜,低位是持續時間,/代表多少個十六分音符/1-7代表中央C調,8-E代表高八度,0代表停頓/最后的0是結束標志uchar code qnzl= /千年之戀0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,/前奏0x

25、32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/竹林的燈火 到過的沙漠 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,/七色的國度 不斷飄逸風中 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/有一種神秘 灰色的旋渦 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,/將我卷入了迷霧中 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,/看不清的雙手 0x31,0x51

26、,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,/一朵花傳來誰經過的溫柔 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,/穿越千年的傷痛 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/只為求一個結果 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,/你留下的輪廓 指引我 0x42,0x63,0x83,0x83,0x91,0x91,/黑夜中不寂寞 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,/穿

27、越千年的哀愁 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/是你在盡頭等我 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,/最美麗的感動 會值得 0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff/結束標志/用一生守候;uchar code jmszl= /寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,/自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,/白色油桐風中紛飛0x51,0x52,

28、0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,/落花似人有情 這個季節0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,/河畔的風放肆拼命地吹0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,/不斷撥弄離人的眼淚0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,/那樣濃烈的愛再也無法給0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,

29、0x26,/傷感一夜一夜0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,/當記憶的線纏繞過往支離破碎0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,/是慌亂占據了心扉 0x31,0x81,0x81,0x81,0x61,0x91,0x82,/有花兒伴著蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53,/孤雁可以雙飛0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,/夜深人靜獨徘徊0x32,0x61,0x51,0x51,0

30、x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,/當幸福戀人寄來紅色分享喜悅0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,/閉上雙眼難過頭也不敢回0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,/仍然撿盡寒枝不肯安歇微帶著后悔0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,/寂寞沙洲我該思念誰0xff;/-簡譜音調對應的定時器初值-/適合1

31、1.0592M的晶振uchar code cuzhi= 0xff,0xff,/占位 0xFC,0x8E,/中央C調1-7 0xFC,0xED, 0xFD,0x43, 0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D, 0xFE,0x47,/高八度1-7 0xFE,0x76, 0xFE,0xA1, 0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16 ;uchar yinyue=0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0;/將音調轉化為對應的LED樣式void del

32、ay1(uint z);/延時1MSvoid delay(uint z);/延時165MS,即十六分音符void song();void beep();/蜂鳴器叫一聲main()uchar x;count1=0;/流水燈無花樣count2=1;/唱第一首歌P34=0;/選取矩陣鍵盤的一列EA=1;/開總中斷EX0=1;/開外部中斷0IT0=1;/外部中斷0下降沿觸發方式EX1=1;/開外部中斷1IT1=1;/外部中斷1下降沿觸發方式TMOD=0x01;/定時器0工作在方式1TH0=0;TL0=0;ET0=1;while(1)if(count1!=0)switch(count1)case 1:for(x=0;x<14;x+)duan=1;P1=huayang1x;beep();delay1(300);duan=0;if(count1!=1)break;break;case 2:for(x=0;x<14;x+)duan=1;P1=huayang2x;beep();delay1(300);duan=0;if(count1!=2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論