項(xiàng)目9 簡(jiǎn)易音樂盒課件_第1頁(yè)
項(xiàng)目9 簡(jiǎn)易音樂盒課件_第2頁(yè)
項(xiàng)目9 簡(jiǎn)易音樂盒課件_第3頁(yè)
項(xiàng)目9 簡(jiǎn)易音樂盒課件_第4頁(yè)
項(xiàng)目9 簡(jiǎn)易音樂盒課件_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 簡(jiǎn)易音樂盒簡(jiǎn)易音樂盒項(xiàng)目9用用5151單片機(jī)演奏出不同的單片機(jī)演奏出不同的“音調(diào)音調(diào)”和和“節(jié)拍節(jié)拍”: :中音中音do-sido-si及高音及高音dodo共共8 8個(gè)音調(diào),按順序中音個(gè)音調(diào),按順序中音duoduo演奏演奏1/41/4拍,中音拍,中音rere演奏演奏1/21/2拍,中音拍,中音mimi演奏演奏3/43/4拍,中音拍,中音fafa演奏演奏1 1拍,中音拍,中音soso演奏演奏1 1又又1/41/4拍,中音拍,中音lala演奏演奏1 1又又1/21/2拍,中音拍,中音sisi演奏演奏1 1又又3/43/4拍,高音拍,高音dodo演奏演奏2 2拍。拍。 任務(wù)任務(wù)1 1音階就是人們通

2、常唱出的音階就是人們通常唱出的1、2、3、4、6、7( do-re-mi-fa-so-la-si),它是),它是7個(gè)頻率之間滿足某種數(shù)學(xué)關(guān)系由低到高排個(gè)頻率之間滿足某種數(shù)學(xué)關(guān)系由低到高排列的自然音,一但確定某一個(gè)音比如列的自然音,一但確定某一個(gè)音比如1(do)的頻率,其他)的頻率,其他音的頻率也就確定了,若由音的頻率也就確定了,若由12個(gè)音組成,還可產(chǎn)生半音階;個(gè)音組成,還可產(chǎn)生半音階;而音調(diào)是指聲音的高低,由聲音的頻率來(lái)決定,確定某一個(gè)而音調(diào)是指聲音的高低,由聲音的頻率來(lái)決定,確定某一個(gè)音比如音比如1(do)的頻率,就確定了音調(diào)。通過(guò)改變單片機(jī)輸)的頻率,就確定了音調(diào)。通過(guò)改變單片機(jī)輸出脈沖

3、高低電平的保持時(shí)間和頻率就可以得到音階和調(diào)節(jié)不出脈沖高低電平的保持時(shí)間和頻率就可以得到音階和調(diào)節(jié)不同的音調(diào)。同的音調(diào)。音階與音調(diào)音階與音調(diào)動(dòng)手做動(dòng)手做1畫出硬件電路圖畫出硬件電路圖 由由P1.0口控制一個(gè)口控制一個(gè)LM386功率放大器,經(jīng)功率放大器控制發(fā)聲器件蜂鳴功率放大器,經(jīng)功率放大器控制發(fā)聲器件蜂鳴器。器。 當(dāng)當(dāng)P1.0口輸出為低電平時(shí),功率放大器導(dǎo)通,蜂鳴器得電;當(dāng)口輸出為低電平時(shí),功率放大器導(dǎo)通,蜂鳴器得電;當(dāng)P1.0口輸出為高電平時(shí),功率放大器截止,蜂鳴器斷電口輸出為高電平時(shí),功率放大器截止,蜂鳴器斷電,電路如圖所示。電路如圖所示。 動(dòng)手做動(dòng)手做程序分析程序分析音調(diào)的確定音調(diào)的確定(

4、1(1)要產(chǎn)生音頻脈沖,只要算出某一音頻的周期()要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/1/頻率),然后將此周期除以頻率),然后將此周期除以2 2,即為,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)這半個(gè)周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的電平反半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)這半個(gè)周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的電平反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)脈沖的電平反相,就可在相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)脈沖的電平反相,就可在I/OI/O腳上得到此頻率的脈沖。腳上得到此頻率的脈沖。(2(2)利用)利用AT89C51AT89C51的內(nèi)部定時(shí)器的內(nèi)部定時(shí)器T0T0使其工作在計(jì)數(shù)器模式方式使其工作在計(jì)數(shù)器

5、模式方式1 1下,改變計(jì)數(shù)值下,改變計(jì)數(shù)值TH0TH0及及TL0TL0以產(chǎn)生不同頻率的方法。以產(chǎn)生不同頻率的方法。此外結(jié)束符和休止符可以分別用代碼此外結(jié)束符和休止符可以分別用代碼00H00H和和FFHFFH來(lái)表示,若查表結(jié)果為來(lái)表示,若查表結(jié)果為00H00H,則表示曲子終,則表示曲子終了;若查表結(jié)果為了;若查表結(jié)果為FFHFFH,則產(chǎn)生相應(yīng)的停頓效果。,則產(chǎn)生相應(yīng)的停頓效果。(3(3)例如頻率為)例如頻率為523Hz523Hz,其周期,其周期T=1/523=1912usT=1/523=1912us,因此只要令計(jì)數(shù)器計(jì)時(shí),因此只要令計(jì)數(shù)器計(jì)時(shí)956us/1us=956956us/1us=956,

6、在每次計(jì)數(shù),在每次計(jì)數(shù)956956次時(shí)將脈沖的電平反相,就可得到中音次時(shí)將脈沖的電平反相,就可得到中音DODO(523Hz523Hz)。)。 計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:N=FiN=Fi/ /2 2/ /FrFr N N:計(jì)算值;:計(jì)算值; FiFi:采用:采用12MHz12MHz的晶振則內(nèi)部計(jì)時(shí)一次為的晶振則內(nèi)部計(jì)時(shí)一次為1us1us,故其頻率為,故其頻率為1MHz1MHz FrFr:該音調(diào)對(duì)應(yīng)的頻率;:該音調(diào)對(duì)應(yīng)的頻率;(4(4)其計(jì)數(shù)值的求法如下:)其計(jì)數(shù)值的求法如下:T=65536-N=65536-FiT=65536-N=65536-Fi/ /2 2

7、/ /FrFr低音頻率脈沖T值中音頻率脈沖T值高音頻率脈沖T值Do2621908F88CDo523956FC44Do1046478FE22Do2771805F8F3Do554902FC7ADo1109450FE3ERe2941700F95CRe587851FCADRe1175425FE57Re3111607F9B9Re622803FCDDRe1245401FE6FMi3301515FA15Mi659758FD0AMi1318379FE85Fa3491432FA68Fa698716FD34Fa1397357FE9BFa3701351FAB9Fa740675FD5DFa1480337FEAFSo3

8、921275FB05So784637FD83So1568318FEC2So4151204FB4CSo831601FDA7So1661301FED3La4401136FB90La880568FDC8La1760284FEE4La4641077FBCBLa932536FDE8La1865268FEF4Si4941012FC0CSi988506FE06Si1976253FF03節(jié)拍的確定節(jié)拍的確定節(jié)拍碼節(jié)拍數(shù)11/4拍22/4拍33/4拍41拍51又1/4拍61又1/2拍82拍A2又1/2拍C3拍F3又3/4拍如果1拍為0.4秒,1/4拍則為0.1秒,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間。假設(shè)1/4拍

9、為1DELAY,則1拍應(yīng)為4DELAY,以此類推。所以只要求得1/4拍的DELAY時(shí)間,其余的節(jié)拍就是它的倍數(shù)。編碼的確定編碼的確定 在給每個(gè)音符編碼時(shí),使用在給每個(gè)音符編碼時(shí),使用1 1個(gè)字節(jié),字節(jié)的高個(gè)字節(jié),字節(jié)的高4 4位位代表音符的高低,低代表音符的高低,低4 4位代表音符的節(jié)拍,中音的位代表音符的節(jié)拍,中音的do re do re mi fa so la simi fa so la si分別編碼為分別編碼為1-71-7,高音,高音dodo編為編為8,8,高音高音rere編為編為9 9,停頓編為,停頓編為0 0。播放長(zhǎng)度以。播放長(zhǎng)度以1/41/4拍為單位(在本程拍為單位(在本程序中為即

10、序中為即1/41/4拍拍=165ms=165ms),一拍即等于),一拍即等于4 4個(gè)個(gè)1/41/4拍,編為拍,編為4,4,其它的播放時(shí)間以此類推。音調(diào)作為編碼的高其它的播放時(shí)間以此類推。音調(diào)作為編碼的高4 4位,而位,而播放時(shí)間作為低播放時(shí)間作為低4 4位,如此音調(diào)和節(jié)拍就構(gòu)成了一個(gè)編位,如此音調(diào)和節(jié)拍就構(gòu)成了一個(gè)編碼。以碼。以0 xff0 xff作為曲譜的結(jié)束標(biāo)志。作為曲譜的結(jié)束標(biāo)志。舉例舉例1 1:音調(diào):音調(diào)do,do,發(fā)音長(zhǎng)度為兩拍,將其編碼為發(fā)音長(zhǎng)度為兩拍,將其編碼為0 x180 x18。舉例舉例2 2:音調(diào):音調(diào)re,re,發(fā)音長(zhǎng)度為半拍,將其編碼為發(fā)音長(zhǎng)度為半拍,將其編碼為0 x2

11、20 x22。 /程序:ex5_1_1.c/功能:簡(jiǎn)單音調(diào)和節(jié)拍的演奏程序#include #define uchar unsigned char#define uint unsigned intsbit fm=P10; /蜂鳴器輸出的IO口uchar timeh,timel,i; /timeh,timel為定時(shí)器高低4位,i為演奏音符個(gè)數(shù)/-簡(jiǎn)譜-/1-7代表中音dosi,8代表高音douchar code yinyue=0 x11,0 x22,0 x33,0 x44,0 x55,0 x66,0 x77,0 x88,0 xff;/-簡(jiǎn)譜音調(diào)對(duì)應(yīng)的定時(shí)器初值-uchar code cuzhi=

12、 0 xff,0 xff, /占位符0 xFC,0 x44,0 xFC,0 xAD,0 xFD,0 x0A,0 xFD,0 x34,0 xFD,0 x83,0 xFD,0 xC8,0 xFE,0 x06, /中音dosi的T計(jì)數(shù)初值0 xFE,0 x22; /高音do的T計(jì)數(shù)初值void delay1(uint z); /延時(shí)1ms子程序void delay(uint z); /延時(shí)165ms,即1/4拍子程序void song(); /演奏子程序main()EA=1; /開總中斷開總中斷ET0=1; /開定時(shí)器開定時(shí)器0TMOD=0 x01; /定時(shí)器定時(shí)器0工作在方式工作在方式1TH0=0

13、;TL0=0;TR0=1;while(1) song();delay1(1000); void timer0() interrupt 1 /定時(shí)器定時(shí)器0溢出中斷子程序用于產(chǎn)生各種音調(diào)溢出中斷子程序用于產(chǎn)生各種音調(diào)TH0=timeh;TL0=timel;fm=fm; /產(chǎn)生方波產(chǎn)生方波void delay(uint z) /延時(shí)延時(shí)165ms,即即1/4拍拍uint x,y;for(x=z;x0;x-) for(y=19000;y0;y-);void delay1(uint z) /延時(shí)延時(shí)1msuint x,y;for(x=z;x0;x-) for(y=112;y0;y-);void son

14、g()uint temp;uchar jp; /jp是簡(jiǎn)譜是簡(jiǎn)譜18的變量的變量i=0;while(1)temp=yinyuei; if(temp=0 xff) break; /到曲終則跳出循環(huán)到曲終則跳出循環(huán) jp=temp/16; /取數(shù)的高取數(shù)的高4位作為音調(diào)位作為音調(diào)if(jp!=0)timeh=cuzhijp*2; /取取T的高的高4位值位值timel=cuzhijp*2+1; /取取T的低的低4位值位值elseTR0=0;fm=1; /關(guān)蜂鳴器關(guān)蜂鳴器delay(temp%16); /取數(shù)的低取數(shù)的低4位作為節(jié)拍位作為節(jié)拍TR0=0; /唱完一個(gè)音停唱完一個(gè)音停10msfm=1;d

15、elay1(10); TR0=1; i+;TR0=0;fm=1;動(dòng)手做動(dòng)手做3proteus仿真仿真從PROTEUS中選取如下元器件:(1)AT89C51,單片機(jī);(2)RES、RX8,電阻、排阻;(3)CAP、CAP-ELEC,電容、電解電容;(4)POT-LOG,電位器;(5)LM386,攻放;(6)SPEAKER,揚(yáng)聲器。放置元器件、電源和地,設(shè)置參數(shù),連線,最后進(jìn)行電氣規(guī)則檢查,將目標(biāo)代碼文件ex5_1_1.hex加載到AT89C51單片機(jī)中,電路仿真。 任務(wù)任務(wù)2 2設(shè)計(jì)出一個(gè)能演奏出一首完整樂曲的音樂盒 數(shù)組分為一維、二維、三維和多維數(shù)組等,常用的是一維、數(shù)組分為一維、二維、三維和

16、多維數(shù)組等,常用的是一維、二維和字符數(shù)組。二維和字符數(shù)組。 (1)一維數(shù)組的定義格式如下:)一維數(shù)組的定義格式如下: 類型說(shuō)明符類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式; 例如例如“char a5;”即定義字符數(shù)組即定義字符數(shù)組a,有,有5個(gè)元素。個(gè)元素。 (2)數(shù)組元素的一般形式為:)數(shù)組元素的一般形式為: 數(shù)組名數(shù)組名下標(biāo)下標(biāo) 例如:例如:tab5、numi+j、ai+都是合法的數(shù)組元素。都是合法的數(shù)組元素。 (3)數(shù)組初始化賦值的一般形式為:)數(shù)組初始化賦值的一般形式為: 類型說(shuō)明符類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式=值,值值,值值值; 例如:例如:int num10= 0

17、,1,2,3,4,5,6,7,8,9 ;/程序:ex5_1_2.c/功能:音樂盒程序#include #define uchar unsigned char#define uint unsigned intsbit fm=P10; /蜂鳴器連續(xù)的IO口uchar timeh,timel,i; /timeh,timel為定時(shí)器高低4位,i為演奏音符個(gè)數(shù)/-千年之戀簡(jiǎn)譜-/1-7代表中音dosi,8-E代表高音dosi uchar code qnzl=0 x12,0 x22,0 x34,0 x84,0 x74,0 x54,0 x38,0 x42,0 x32,0 x22,0 x42,0 x34,0

18、x84,0 x72,0 x82,0 x94,0 xA8,0 x08, /前奏0 x32,0 x31,0 x21,0 x32,0 x52,0 x32,0 x31,0 x21,0 x32,0 x62, /竹林的燈火 到過(guò)的沙漠0 x32,0 x31,0 x21,0 x32,0 x82,0 x71,0 x81,0 x71,0 x51,0 x32,0 x22, /七色的國(guó)度 不斷飄逸風(fēng)中0 x32,0 x31,0 x21,0 x32,0 x52,0 x32,0 x31,0 x21,0 x32,0 x62, /有一種神秘 灰色的旋渦 0 x32,0 x31,0 x21,0 x32,0 x83,0 x82

19、,0 x71,0 x72,0 x02, /將我卷入了迷霧中0 x63,0 xA1,0 xA2,0 x62,0 x92,0 x82,0 x52, /看不清的雙手 0 x31,0 x51,0 x63,0 x51,0 x63,0 x51,0 x63,0 x51,0 x62,0 x82,0 x7C,0 x02, /一朵花傳來(lái)誰(shuí)經(jīng)過(guò)的溫柔 0 x61,0 x71,0 x82,0 x71,0 x62,0 xA2,0 x71,0 x76, /穿越千年的傷痛 0 x61,0 x71,0 x82,0 x71,0 x62,0 x52,0 x31,0 x36, /只為求一個(gè)結(jié)果 0 x61,0 x71,0 x82,

20、0 x71,0 x62,0 xA3,0 x73,0 x62,0 x53, /你留下的輪廓 指引我 0 x42,0 x63,0 x83,0 x83,0 x91,0 x91, /黑夜中不寂寞 0 x61,0 x71,0 x82,0 x71,0 x62,0 x0A2,0 x71,0 x76, /穿越千年的哀愁 0 x61,0 x71,0 x82,0 x71,0 x62,0 x52,0 x31,0 x36, /是你在盡頭等我 0 x61,0 x71,0 x82,0 x71,0 x62,0 xA3,0 x73,0 x62,0 x53, /最美麗的感動(dòng) 會(huì)值得 0 x42,0 x82,0 x88,0 x0

21、2,0 x74,0 x93,0 x89,0 xff; /用一生守候,最后結(jié)束標(biāo)志/-簡(jiǎn)譜音調(diào)對(duì)應(yīng)的定時(shí)器初值-uchar code cuzhi= 0 xff,0 xff, /占位符0 xFC,0 x44,0 xFC,0 xAD,0 xFD,0 x0A,0 xFD,0 x34,0 xFD,0 x83,0 xFD,0 xC8,0 xFE,0 x06, /中音dosi的T計(jì)數(shù)初值0 xFE,0 x22,0 xFE,0 x57,0 xFE,0 x85,0 xFE,0 x9B,0 xFE,0 xC2,0 xFE,0 xE4,0 xFF,0 x03; /高音dosi的T計(jì)數(shù)初值void delay1(ui

22、nt z); /延時(shí)1ms子程序void delay(uint z); /延時(shí)165ms,即1/4拍子程序void song(); /演奏子程序main()EA=1; /開總中斷ET0=1; /開定時(shí)器0TMOD=0 x01; /定時(shí)器0工作在方式1TH0=0;TL0=0;TR0=1;while(1) song();delay1(1000); void timer0() interrupt 1 /定時(shí)器0溢出中斷子程序用于產(chǎn)生各種音調(diào)TH0=timeh;TL0=timel;fm=fm; /產(chǎn)生方波void song()uint temp;uchar jp; /jp是簡(jiǎn)譜18的變量i=0;whi

23、le(1)temp=qnzli; if(temp=0 xff) break; /到曲終則跳出循環(huán) jp=temp/16; /取數(shù)的高4位作為音調(diào)if(jp!=0)timeh=cuzhijp*2; /取T的高4位值timel=cuzhijp*2+1; /取T的低4位值elseTR0=0;fm=1; /關(guān)蜂鳴器delay(temp%16); /取數(shù)的低4位作為節(jié)拍TR0=0; /唱完一個(gè)音停10msfm=1;delay1(10); TR0=1; i+;TR0=0;fm=1;void delay(uint z) /延時(shí)165ms,即1/4拍uint x,y;for(x=z;x0;x-) for(y=

24、19000;y0;y-);void delay1(uint z) /延時(shí)1msuint x,y;for(x=z;x0;x-) for(y=112;y0;y-);擴(kuò)展任務(wù):快樂點(diǎn)唱機(jī)的設(shè)計(jì) 擴(kuò)展任務(wù)擴(kuò)展任務(wù)畫出硬件電路圖畫出硬件電路圖/程序:ex5_1_3.c /功能:快樂點(diǎn)唱機(jī)#include #define uchar unsigned char#define uint unsigned intsbit fm=P10; /蜂鳴器輸出的IO口 sbit button=P20; /按鍵輸入的IO口uchar timeh,timel,i; /timeh,timel為定時(shí)器高低4位,i為演奏音符個(gè)數(shù)

25、bit flag; /flag歌曲標(biāo)志位,為0演奏前年之戀,為1演奏寂寞沙洲冷/-千年之戀簡(jiǎn)譜-uchar code qnzl=略; /見程序:ex5_1_2.c /-寂寞沙洲冷簡(jiǎn)譜-uchar code jmszl=略;/-簡(jiǎn)譜音調(diào)對(duì)應(yīng)的定時(shí)器初值-uchar code cuzhi= 0 xff,0 xff, /占位符0 xFC,0 x44,0 xFC,0 xAD,0 xFD,0 x0A,0 xFD,0 x34,0 xFD,0 x83,0 xFD,0 xC8,0 xFE,0 x06, /中音dosi的T計(jì)數(shù)初值0 xFE,0 x22,0 xFE,0 x57,0 xFE,0 x85,0 xFE

26、,0 x9B,0 xFE,0 xC2,0 xFE,0 xE4,0 xFF,0 x03; /高音do的T計(jì)數(shù)初值void delay1(uint z); /延時(shí)1ms子程序void delay(uint z); /延時(shí)165ms,即1/4拍子程序void song(); /演奏子程序 main()EA=1; /開總中斷ET0=1; /開定時(shí)器0TMOD=0 x01; /定時(shí)器0工作在方式1TH0=0;TL0=0;TR0=1;while(1) if(button=0)flag=0; /一曲演奏完判段按鍵的狀態(tài) else flag=1; /根據(jù)按鍵狀態(tài)設(shè)置flag標(biāo)志位song();delay1(1000); void timer0() interrupt 1 /定時(shí)器0溢出中斷子程序用于產(chǎn)生各種音調(diào)TH0

溫馨提示

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