電子琴課程設(shè)計(jì)_第1頁(yè)
電子琴課程設(shè)計(jì)_第2頁(yè)
電子琴課程設(shè)計(jì)_第3頁(yè)
電子琴課程設(shè)計(jì)_第4頁(yè)
電子琴課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(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、真誠(chéng)為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請(qǐng)指正。河南理工大學(xué)單片機(jī)應(yīng)用與仿真訓(xùn)練設(shè)計(jì)報(bào)告模擬電子琴發(fā)聲控制系統(tǒng)姓 名: 周 鵬 鄧 旭 學(xué) 號(hào):310808030330 310808030310專業(yè)班級(jí): 電信0803班 指導(dǎo)老師: 高如新 蘇 珊 所在學(xué)院: 電氣工程與自動(dòng)化學(xué)院 2011年11月 26 日摘要本設(shè)計(jì)是基于AT89S52單片機(jī)的電子琴的電路設(shè)計(jì)方法而制作。該方法利用單片機(jī)定時(shí)器來(lái)產(chǎn)生固定頻率的方波信號(hào)以推動(dòng)喇叭發(fā)出旋律。并使用LED顯示器來(lái)顯示音階輸入的相關(guān)消息,然后通過(guò)按下鍵盤(pán)組中的相對(duì)按鍵使喇叭發(fā)出相對(duì)音階單音,并自動(dòng)存儲(chǔ)所輸入的單音,之后再一起自動(dòng)演奏出來(lái),從而實(shí)現(xiàn)具有

2、存儲(chǔ)功能的電子琴系統(tǒng)。本設(shè)計(jì)實(shí)現(xiàn)的功能是利用蜂鳴器作為發(fā)聲部件,兩個(gè)數(shù)碼管作為顯示部件,設(shè)置11個(gè)按鍵,實(shí)現(xiàn)高音、中音、低音的1、2、3、4、5、6、7的發(fā)音,并存儲(chǔ)一首歌的內(nèi)容,可以實(shí)現(xiàn)自動(dòng)播放。它具有7個(gè)音階的鍵盤(pán),分別為DO、RE、MI、FA、SO、LA、SI。每個(gè)音階都對(duì)應(yīng)著不同的頻率,這樣,我們就可以利用不同的頻率組合構(gòu)成我們想要的音樂(lè)。對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣的方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。用戶可以根據(jù)樂(lè)譜在鍵盤(pán)上進(jìn)行演奏,音樂(lè)發(fā)生器會(huì)根據(jù)用戶的彈奏,通過(guò)揚(yáng)聲器將音樂(lè)播放出來(lái)。介紹了一種

3、基于AT89S52單片機(jī)的電子琴的電路設(shè)計(jì)方法。該方法利用單片機(jī)定時(shí)器來(lái)產(chǎn)生固定頻率的方波信號(hào)以推動(dòng)喇叭發(fā)出旋律。然后通過(guò)按下鍵盤(pán)組中的相對(duì)按鍵使喇叭發(fā)出相對(duì)音階單音,并自動(dòng)存儲(chǔ)所輸入的單音,之后再一起自動(dòng)演奏出來(lái),從而實(shí)現(xiàn)具有存儲(chǔ)功能的電子琴系統(tǒng)。關(guān)鍵詞:?jiǎn)纹瑱C(jī)、電子琴、音階、頻率目錄摘要21、概述41.1電子琴概述41.2電子琴系統(tǒng)原理41.3設(shè)計(jì)任務(wù)及要求42、系統(tǒng)總體方案及硬件設(shè)計(jì)52.1 系統(tǒng)硬件組成52.11 AT89S52簡(jiǎn)介52.12 音樂(lè)播放部分82.13電子琴?gòu)椬嗖糠?2.2 具體發(fā)音原理82.3 各部分電路圖102.31 晶振102.32 復(fù)位電路102.33 按鍵112

4、.34 發(fā)音113、軟件設(shè)計(jì)123.1流程圖123.2 主程序代碼134、Proteus軟件仿真135、課程設(shè)計(jì)體會(huì)13參考文獻(xiàn)14附錄1 源程序代碼15附錄2 仿真圖231 概述1.1 電子琴概述電子琴又稱作電子鍵盤(pán),屬于電子樂(lè)器(區(qū)別于電聲樂(lè)器),發(fā)音音量可以自由調(diào)節(jié)。音域較寬,和聲豐富,甚至可以演奏出一個(gè)管弦樂(lè)隊(duì)的效果,表現(xiàn)力極其豐富。它還可模仿多種音色,甚至可以奏出常規(guī)樂(lè)器所無(wú)法發(fā)出的聲音(如合唱聲,風(fēng)雨聲,宇宙聲等)。另外,電子琴在獨(dú)奏時(shí),還可隨意配上類似打擊樂(lè)音響的節(jié)拍伴奏,適合于演奏節(jié)奏性較強(qiáng)的現(xiàn)代音樂(lè)。AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可

5、編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。本文利用AT89C51 單片機(jī)的強(qiáng)大功能,通過(guò)軟件產(chǎn)生不同頻率的聲音信號(hào),經(jīng)相應(yīng)的放大電路后,在揚(yáng)聲器中發(fā)出8個(gè)音節(jié)??梢詮椬喑霾煌那?。1.2 電子琴系統(tǒng)原理由于一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)

6、來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。只要向若將不同的音節(jié)與一定的節(jié)拍組合在一起形成一定的曲調(diào),因此只要一單片機(jī)I0口,通過(guò)軟件,控制其輸出不同頻率的信號(hào),就可以產(chǎn)生8個(gè)基本音節(jié)。將音節(jié)以一定的節(jié)拍進(jìn)行組合,便可以產(chǎn)生歌曲。樂(lè)曲中每一音符對(duì)應(yīng)著確定的頻率。如果單片機(jī)某個(gè)口線輸出“高低”電平的頻率和某個(gè)音符的頻率一樣,那么將此口線接上喇叭就可以發(fā)出此音。1.3 設(shè)計(jì)任務(wù)及要求本系統(tǒng)分為兩個(gè)部分,一個(gè)是音樂(lè)播放,另一個(gè)就是電子琴?gòu)椬唷Mㄟ^(guò)開(kāi) 控制播放音樂(lè)或者進(jìn)行電子琴?gòu)椬?。本系統(tǒng)利用蜂鳴器作為發(fā)聲

7、部件,當(dāng)播放音樂(lè)時(shí),彈奏按鍵無(wú)效;當(dāng)進(jìn)行彈奏時(shí),設(shè)置10個(gè)按鍵,實(shí)現(xiàn)高音、中音、低音的1、2、3、4、5、6、7的發(fā)音,兩個(gè)數(shù)碼管作為顯示部件,顯示輸入的信息。2 系統(tǒng)總體方案及硬件設(shè)計(jì)2.1硬件組成2.11 AT89S52簡(jiǎn)介1.概述 AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上, 圖2-2 AT89S52單片機(jī) 擁有靈巧的8 位CPU 和 在系統(tǒng)可編程Flash,使得AT89

8、S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。2.主要性能與MCS-51單片機(jī)產(chǎn)品兼容; 8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器; 1000次擦寫(xiě)周期; 全靜態(tài)操作:0Hz-33MHz; 三級(jí)加密程序存儲(chǔ)器; 32個(gè)可編程I/O口線; 三個(gè)16位定時(shí)器/計(jì)數(shù)器; 六個(gè)中斷源; 全雙工UART串行通道; 低功耗空閑和掉電模式; 掉電后中斷可喚醒; 看門(mén)狗定時(shí)器; 雙數(shù)據(jù)指針; 掉電標(biāo)識(shí)符 。3.管腳說(shuō)明 P0 口:P0口是一個(gè)8位漏極開(kāi)路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏 輯電平。對(duì)P0端口寫(xiě)“1”時(shí),引腳用作高阻抗輸入。 當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)

9、據(jù)復(fù)用。在這種模式下, P0不具有內(nèi)部上拉電阻。 在flash編程時(shí),P0口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn) 時(shí),需要外部上拉電阻。 P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動(dòng)4 個(gè) TTL 邏輯電平。對(duì)P1 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 此外,P1.0和P1.1分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和定時(shí)器/計(jì)數(shù)器2 的觸發(fā)輸入(P1.1/T2EX)。 在flash編程和校驗(yàn)時(shí),P1口接收低8位地址

10、字節(jié)。 引腳號(hào)第二功能: P1.0 T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出 P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制) P1.5 MOSI(在系統(tǒng)編程用) P1.6 MISO(在系統(tǒng)編程用) P1.7 SCK(在系統(tǒng)編程用) P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 。4 個(gè) TTL 邏輯電平。對(duì)P2 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOV

11、X DPTR) 時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用 8位地址(如MOVX RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。 在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。 P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p3 輸出緩沖器能驅(qū)動(dòng)4 個(gè) TTL 邏輯電平。對(duì)P3 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。 在flash編程和校驗(yàn)

12、時(shí),P3口也接收一些控制信號(hào)。 端口引腳 第二功能: P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INTO(外中斷0) P3.3 INT1(外中斷1) P3.4 TO(定時(shí)/計(jì)數(shù)器0) P3.5 T1(定時(shí)/計(jì)數(shù)器1) P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) 此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。 RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將是單片機(jī)復(fù)位。 ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般

13、情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。對(duì)FLASH存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。 PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89S52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩

14、個(gè)脈沖,在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。 EA/VPP:外部訪問(wèn)允許,欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器的指令。FLASH存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。 XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。 XTAL2:振蕩器反相放大器的輸出端。2.12 音樂(lè)播放部分樂(lè)音實(shí)際上是固定周期的信號(hào)。本系統(tǒng)是用AT89s52

15、 的定時(shí)器控制,在P3.6腳上輸出方波周期信號(hào),產(chǎn)生音樂(lè)。樂(lè)曲中,每一音符對(duì)應(yīng)著確定的頻率,我們將每一音符的時(shí)間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)?lè)曲中的所有常數(shù)排列成一個(gè)表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實(shí)現(xiàn)演奏效果。在輸出中我們用蜂鳴器及其驅(qū)動(dòng)電路實(shí)現(xiàn)發(fā)聲。2.13電子琴?gòu)椬嗖糠直鞠到y(tǒng)設(shè)置了10個(gè)按鍵,其中三個(gè)按鍵為高音、中音、低音的選擇按鍵,其余為發(fā)音按鍵,按下不同的按鍵產(chǎn)生不同的音符,通過(guò)按鍵時(shí)間的長(zhǎng)短控制發(fā)音的長(zhǎng)短,這樣彈奏人員可以隨心所欲的彈奏自己所喜愛(ài)的樂(lè)曲。電子琴?gòu)椬鄬?shí)際上就是把每個(gè)按鍵所對(duì)應(yīng)的值經(jīng)過(guò)處理后發(fā)給單片機(jī),再在單片機(jī)內(nèi)把數(shù)字當(dāng)作指針指向所對(duì)

16、應(yīng)的音符。我們運(yùn)用單片機(jī)的最小系統(tǒng),用P2口的低三位作高音、中音、低音的選擇按鍵的接口,用P1口的低七位作發(fā)音按鍵的接口。 2.2 具體發(fā)音原理一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把各個(gè)音階對(duì)應(yīng)頻率關(guān)系弄正確即可。若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將蜂鳴器端口反相,然后重復(fù)計(jì)時(shí)再反相。就可在該引腳上

17、得到此頻率的脈沖實(shí)現(xiàn)發(fā)音。利用AT89S52的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)初值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T1/5231912s,因此只要令計(jì)數(shù)器計(jì)時(shí)956s/1s956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式是:Nfi2fr 式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值T的求法如下:T65536N65536fi2fr例如:設(shè)K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高

18、音DO(1046Hz)的計(jì)數(shù)值。T65536N65536fi2fr6553610000002fr65536500000/fr低音DO的T65536500000/26263628中音DO的T65536500000/52364580高音DO的T65536500000/104665058當(dāng)播放音樂(lè)時(shí),除了考慮音頻外,還要考慮到音樂(lè)的音拍。本系統(tǒng)中,用軟件延時(shí)來(lái)控制發(fā)音時(shí)間的長(zhǎng)短,控制節(jié)拍。下表是各調(diào)1/4節(jié)拍的時(shí)間表。節(jié)拍表曲調(diào)值DELAY調(diào)4/4125ms調(diào)3/4187ms調(diào)2/4250ms2.3各部分電路2.31晶振2.32 復(fù)位電路2.33按鍵2.34 發(fā)音3 軟件設(shè)計(jì)3.1流程圖3.2 主程

19、序代碼見(jiàn)附錄一 源程序代碼4、Proteus軟件仿真見(jiàn)附錄2 仿真圖5 課程設(shè)計(jì)體會(huì)通過(guò)此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)單片機(jī)方面的知識(shí),在設(shè)計(jì)過(guò)程中雖然遇到了一些問(wèn)題,但經(jīng)過(guò)一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺和經(jīng)驗(yàn)不足。實(shí)踐出真知,通過(guò)親自動(dòng)手制作,使我們掌握的知識(shí)不再是紙上談兵。過(guò)而能改,善莫大焉。在課程設(shè)計(jì)過(guò)程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測(cè)調(diào)試環(huán)節(jié),本身就是在踐行“過(guò)而能改,善莫大焉”的知行觀。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多問(wèn)題,最后在老師的指導(dǎo)下,終于游逆而解。在今后社會(huì)的發(fā)展和

20、學(xué)習(xí)實(shí)踐過(guò)程中,一定要不懈努力,不能遇到問(wèn)題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問(wèn)題所在,然后一一進(jìn)行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠(yuǎn)不可能收獲成功,收獲喜悅,也永遠(yuǎn)不可能得到社會(huì)及他人對(duì)你的認(rèn)可!課程設(shè)計(jì)誠(chéng)然是一門(mén)專業(yè)課,給我很多專業(yè)知識(shí)以及專業(yè)技能上的提升,同時(shí)又是一門(mén)講道課,一門(mén)辯思課,給了我許多道,給了我很多思,給了我莫大的空間。同時(shí),設(shè)計(jì)讓我感觸很深。使我對(duì)抽象的理論有了具體的認(rèn)識(shí)。通過(guò)這次課程設(shè)計(jì),我掌握了PROTUES、WAVE6000等軟件,用WAVE6000進(jìn)行程序的編譯,用PROTUES進(jìn)行軟硬件系統(tǒng)的仿真?;仡櫰鸫?/p>

21、課程設(shè)計(jì),至今我仍感慨頗多,從理論到實(shí)踐,在這段日子里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,但可喜的是最終都得到了解決。參考文獻(xiàn)1 余發(fā)山,王福忠單片機(jī)原理及應(yīng)用技術(shù)徐州:中國(guó)礦業(yè)大學(xué)出版社,2008年2 韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2004

22、.75-833 王守中51單片機(jī)開(kāi)發(fā)入門(mén)與典型實(shí)例北京:人民郵電出版社,2007.139-1494 周潤(rùn)景等. Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例.北京:電子工業(yè)出版社,2006.132-1395 王為青,邱文勛51單片機(jī)應(yīng)用開(kāi)發(fā)案例精選北京:人民郵電出版社,2007.61-65附錄1 源程序代碼#include #include #define SYSTEM_OSC 12000000/定義晶振頻率12000000HZ#define SOUND_SPACE 4/5 /定義普通音符演奏的長(zhǎng)度分率,/每4分音符間隔#define uchar unsigned char#defi

23、ne uint unsigned int#define P_key P1sbit beep=P36;/蜂鳴器控制端口P10!Unsigned int code sy21=194,173,154,145,129,115,102,390,347,309,291,260,231,205,96, 86, 76, 72, 64, 56, 50;unsigned int code FreTab12= 262,277,294,311,330,349,369,392,415,440,466,494 ; /原始頻率表unsigned char code SignTab7 = 0,2,4,5,7,9,11 ; /

24、17在頻率表中的位置unsigned char code LengthTab7= 1,2,4,8,16,32,64 ; unsigned char Sound_Temp_TH0,Sound_Temp_TL0;/音符定時(shí)器初值暫存 unsigned char Sound_Temp_TH1,Sound_Temp_TL1;/音長(zhǎng)定時(shí)器初值暫存/曲譜存貯格式 unsigned char code MusicName音高,音長(zhǎng),音高,音長(zhǎng)., 0,0;末尾:0,0 表示結(jié)束(Important)unsigned char code Music_Girl= 25,3,25,14,26,4,31,103,2

25、7,4,26,3,23,14,22,4,21,2,23,3,32,3,32,14,27,4,26,14,23,4,25,12,25,2,25,3,25,14,26,4,31,103,27,4,26,3,25,14,26,4,23,2,16,3,26,3,26,14,25,4,25,14,23,4,22,12,22,2,23,3,23,14,22,4,25,3,25,4,23,4,22,3,23,14,22,4,21,103,22,4,23,103,25,4,27,14,26,4,25,3,26,12,26,2,31,3,31,14,26,4,31,103,31,4,26,13,25,14,23

26、,4,22,2,16,3,26,3,25,14,23,4,23,14,22,4,21,102,31,14,32,4,33,4,33,3,33,4,32,3,33,14,32,4,31,102,26,14,31,4,32,4,32,3,33,4,32,14,27,4,26,15,27,15,26,5,25,12,25,2,26,14,31,4,26,4,31,3,31,4,26,4,25,3,26,14,25,4,23,2,26,103,31,4,33,14,32,4,31,3,32,102,31,14,32,4,33,4,33,3,33,4,32,3,33,14,32,4,31,102,26,

27、14,31,4,32,103,33,4,32,14,27,4,26,15,27,15,26,5,25,12,25,2,26,14,31,4,31,4,26,4,31,3,31,4,26,4,25,3,26,14,25,4,23,2,26,13,33,3,32,14,31,14,26,3,31,12,31,2,26,13,33,3,32,14,31,14,26,3,31,102,31,14,32,4,26,13,33,3,32,14,31,14,36,3,31,12,31,2,0,0 ;void delay_us(uint i);/us級(jí)延時(shí)程序延時(shí)y(us) = 9.75*i + 17.44!

28、void delay_ms(uint t);/毫秒級(jí)延時(shí)函數(shù)!void didi(uint k,uint t1,uint t2);/蜂鳴器進(jìn)行響t1靜t2的k次動(dòng)作!void keyscan(void);/按鍵掃描動(dòng)作!void yindiao(uint i);/產(chǎn)生不同頻率聲音的函數(shù)!void music(uchar diao);/按鍵音優(yōu)化!void InitialSound(void);/自動(dòng)播放需要的定時(shí)器設(shè)置等!void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int

29、Speed);void BeepTimer0(void);/音符發(fā)生中斷/自動(dòng)播放函數(shù)!void main()didi(2,100,40);/兩聲提示!keyscan();void delay_us(uint i) while(i-);/us級(jí)延時(shí)程序延時(shí)y(us) = 9.75*i + 17.44!void delay_ms(uint t)/毫秒級(jí)延時(shí)函數(shù)!uint i,j;for(j=0;jt;j+)for(i=0;i110;i+);void didi(uint k,uint t1,uint t2)/蜂鳴器進(jìn)行響t1靜t2的k次動(dòng)作!uint i;for(i=0;ik;i+)beep=0;

30、delay_ms(t1);beep=1;delay_ms(t2);void keyscan(void)/按鍵掃描動(dòng)作!uchar tiaozheng=0;while(1)if(P2&0x01)=0x00)InitialSound();didi(2,80,40);InitialSound(); Play(Music_Girl,0,3,200);/Play(樂(lè)曲名,調(diào)號(hào),升降八度,演奏速度);else if(P_key&0xff)!=0xff)/此處內(nèi)部括號(hào)不能少,否則不能進(jìn)入下面。if(P2&0x04)=0)/0100 0000當(dāng)前H也按下了!tiaozheng=14;/進(jìn)入高音區(qū)!if(P_k

31、ey=0xfd)music(tiaozheng+0); /1111 1101if(P_key=0xfb)music(tiaozheng+1); /1111 1011if(P_key=0xf7)music(tiaozheng+2);if(P_key=0xef)music(tiaozheng+3);if(P_key=0xdf)music(tiaozheng+4);if(P_key=0xbf)music(tiaozheng+5);if(P_key=0x7f)music(tiaozheng+6);else if(P2&0x02)=0)/1000 0000當(dāng)前L也按下了!tiaozheng=7;/進(jìn)入低

32、音區(qū)!if(P_key=0xfd)music(tiaozheng+0);if(P_key=0xfb)music(tiaozheng+1);if(P_key=0xf7)music(tiaozheng+2);if(P_key=0xef)music(tiaozheng+3);if(P_key=0xdf)music(tiaozheng+4);if(P_key=0xbf)music(tiaozheng+5);if(P_key=0x7f)music(tiaozheng+6); else/是默認(rèn)的中音!tiaozheng=0;if(P_key=0xfd)music(tiaozheng+0);if(P_key

33、=0xfb)music(tiaozheng+1);if(P_key=0xf7)music(tiaozheng+2);if(P_key=0xef)music(tiaozheng+3);if(P_key=0xdf)music(tiaozheng+4);if(P_key=0xbf)music(tiaozheng+5);if(P_key=0x7f)music(tiaozheng+6);void yindiao(uint i)/產(chǎn)生不同頻率聲音的函數(shù)beep=0;delay_us(i);beep=1;delay_us(i);void music(uchar diao)/按鍵音優(yōu)化!uint i=0,ji

34、zhun=20;switch(diao) case 0:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 1:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 2:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 3:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 4:for(i=0;i(jizhun+(5*diao);i+)yindiao

35、(sydiao);break; case 5:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 6:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 7:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 8:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 9:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydi

36、ao);break; case 10:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 11:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 12:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 13:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 14:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydi

37、ao);break; case 15:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 16:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 17:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 18:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break; case 19:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydi

38、ao);break; case 20:for(i=0;i(jizhun+(5*diao);i+)yindiao(sydiao);break;default:break;void InitialSound(void)/自動(dòng)播放需要的定時(shí)器設(shè)置等!beep = 1;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;/ 計(jì)算TL1應(yīng)裝入的初值 (10ms的初裝值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;/ 計(jì)算TH1應(yīng)裝入的初值 TH1 = Sound_Temp_TH1;TL1 = Sound_

39、Temp_TL1;TMOD |= 0x11;/定時(shí)器0和定時(shí)器1都是方式1 16位計(jì)數(shù)。ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;IT0=0;EX0=1;EA = 1;/曲譜存貯格式 unsigned char code MusicName音高,音長(zhǎng),音高,音長(zhǎng)., 0,0;末尾:0,0 表示結(jié)束(Important)void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)unsigned int NewFreTab12;/新的頻率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,So

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論