2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、<p>  畢業設計說明書(論文)</p><p>  設計(論文)題目: 單片機音樂發生器 </p><p>  專 業: 應用電子 </p><p>  班 級: 應電G09-3 </p><p>  學 號: &

2、lt;/p><p>  姓 名: </p><p>  指導教師: </p><p>  2011年4月20日</p><p><b>  目錄</b></p><p><b>  摘 要1&l

3、t;/b></p><p><b>  緒 論2</b></p><p>  1.1研究的目的和意義2</p><p>  1.2國內外研究的現狀及發展趨勢2</p><p>  1.2.1國內外研究的現狀2</p><p>  1.3音樂發生器的擴展3</p>&l

4、t;p>  第1章 設計方案4</p><p>  1.1 設計方案論證4</p><p>  1.1.1 方案一4</p><p>  1.1.2 方案二4</p><p>  1.1.3 方案三5</p><p>  1.1.3 方案比較6</p><p>  第2章 硬件

5、設計7</p><p>  2.1 電路組成及工作原理7</p><p>  2.1.1 電路組成7</p><p>  2.1.2 電路工作原理7</p><p>  2.2 AT89C51的簡介8</p><p>  2.2.1 AT89C51功能概述8</p><p>  2.

6、2.2 AT89C51的管腳圖9</p><p>  2.2.3 AT89C5 單片機的引腳介紹9</p><p>  2.2.4 晶振電路10</p><p>  2.3 揚聲器電路10</p><p>  2.4 顯示電路11</p><p>  2.5 更換歌曲電路11</p><

7、p>  2.6 復位電路12</p><p>  2.7 程序存儲器外部擴展電路12</p><p>  第3章 軟件系統設計13</p><p>  3.1 軟件流程設計13</p><p>  第4章 系統調試14</p><p>  4.1 常用調試工具14</p><p&g

8、t;  4.1.1 Keil C 軟件14</p><p>  4.1.2 PROTEUS軟件15</p><p>  4.2 系統調試及性能分析15</p><p><b>  心得體會16</b></p><p><b>  參考文獻17</b></p><p>

9、;<b>  附 錄18</b></p><p>  附錄1 音樂發生器電路原理圖18</p><p>  附錄2 元件明細表19</p><p>  附錄3 源程序代碼20</p><p><b>  摘 要</b></p><p>  近年來隨著科技的飛速發展,單

10、片機的應用正在不斷地走向深入,同時帶動傳統控制檢測日新月異更新。在實時檢測和自動控制的單片機應用系統中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構,以及針對具體應用對象特點的軟件結合,加以完善。</p><p>  當今,利用單片機控制音樂播放多不勝舉,音樂芯片也相當之多,而利用單片機存儲音樂,控制播放最為廣泛。它有功能多﹑價格優﹑外圍電路簡單的特點,很受音樂愛好者及音樂芯

11、片制造商的青昧。本文中,用單片機芯片及少數外圍電路控制音樂播放。</p><p>  本設計是以單片機AT89C51為核心數據處理器件,由數碼管顯示調整歌曲的曲號和播放中,顯示歌曲的曲號,四個數據輸入按鍵組成七功能分別是對歌曲曲號進行加一設置、對歌曲曲號進行減一設置、對歌曲曲號進行復位、對在播放中的歌曲進行暫停;元件以低耗、高能、耐用、精確、易于操作等為優先考慮因素。采用獨立式輸入按鈕,用作對歌曲播放的設置,通過

12、按鍵將單片機I/0 口的電平拉低,單片機檢測到I/O口電平為0時,在下一曲按鈕中,自動將歌曲的編號加一;在播放/暫停按鈕中,自動將歌曲暫停、播放;在上一曲按鈕中自動將歌曲的編號減一。當播放歌曲時,會在數碼管上顯示該歌曲的序號。在顯示時使用的是由一個七段數碼管顯示,在本設計中根據實際情況采用的是動態顯示方法?并通過查表法,將其在數碼管上顯示出來,P1口低7位為字選段輸入端。通過查表將字型碼送給7段數碼管顯示數字。軟件去抖動功能,如果“開始

13、鍵”按下就向下執行,否者跳到開始。AT89C51單片機的內存較小,就用了一個74LS373鎖存器和27512外部擴展芯片對該單片機進行了內存的擴充,增大了它的存儲空間,讓他可以存儲足夠多的歌曲。</p><p>  該音樂發生器的論文詳細介紹了其硬件結構和設計方法,整個設計簡單實用,功能完整。</p><p><b>  結論</b></p><p

14、>  1.1研究的目的和意義</p><p>  音樂電聲的一個重要內容就是電子音樂。電子琴的出現,開辟了音樂的一個新天地。但是自從電子合成器問世以來,電子音樂就又進入了一個更高的階段。 目前,由于電子音樂的普及,電子合成器(合成器實際上是一臺聲音的頻率合成儀,可以制作各種聲音,改變各種音色)可以解決相當一部分的歌唱及舞廳的伴奏問題??梢允孪戎谱靼樽嘁魳坊虮尘耙魳?,而不需要樂隊,或者部分代替樂隊。由于音樂合

15、成器制作和修改方便,成本低,音樂豐滿,所以市場需求量很大,因此,世界許多國家的廠商都不斷地在發展并推出新的型號,每年都要更新換代。當前的發展趨勢是不斷的采用先進技術,例如有的合成器有“跟隨”功能,即經預置,每一個音后可以跟隨一個二度或三度音,“重疊”功能,輕奏或重奏時可以發不同音調或音色;另外,合成器還向輕便、使用操作方便等方向發展。電腦音樂也許不會成為今后音樂的主流,但它在整個人類音樂史上的地位已經不容置疑地確立了,相信它會越來越深入

16、地浸透到音樂創作和欣賞的領域中,并且將在一定程度上影響人們對音樂的理解和詮釋。用單片機制作的音樂發生器也會越來越多,這將必然成為一種趨勢。</p><p>  1.2國內外研究的現狀及發展趨勢 </p><p>  1.2.1國內外研究的現狀</p><p>  隨著以法、德、意為代表的歐洲和以美國為代表的電子音樂、計算機音樂早期的大力發展,國際上許多國家紛紛開始引

17、入電子音樂研究與創作。因此,電子音樂創作作為音樂科技領域發展的重要標志,在風格上也體現出比以往任何時代都鮮明的個性化特征。六十年代,美國物理學家Robert Moog 研制出了小型實用的電子合成器。從此,首先在歐美地區,合成器作為新型的樂器被音樂家尤其是流行音樂家所采用并飛快的流行開來。由于美國雄厚的經濟和科技基礎,在早期計算機音樂獲得巨大成功后,越來越多的音樂家和科學家步入到計算機音樂的研究與開發的領域中來,他們一起工作、共同開展研究

18、,許多新產品和新設計不斷涌現。</p><p>  1.3音樂發生器的擴展</p><p>  熟練的運用89C51單片機定時器產生固定頻率的方波信號,推動喇叭發出旋律,按下單鍵可以演奏預先設置的歌曲旋律,最重要的是自己還可以通過程序設計輸入自己喜歡的歌曲來演奏中,本設計采用簡易音階編碼直覺式輸入法方便設計音樂旋律,可以擴充其功能如下:</p><p>  設計三個

19、按鍵操作來更改歌曲的序號;</p><p>  可以按照歌曲的序號來播放歌曲;</p><p>  可以顯示播放中歌曲的序號;</p><p><b>  可以存儲多首歌曲;</b></p><p><b>  第1章 設計方案</b></p><p>  1.1 設計方案論

20、證</p><p><b>  1.1.1 方案一</b></p><p>  利用AT89C51和LM386(音頻功放) 組成的音樂播放器</p><p><b> ?。?)功能特色。</b></p><p>  LM386(音頻功放)來實現音樂的播放。</p><p>&

21、lt;b> ?。?)硬件設計。</b></p><p>  電路以AT89C51為主控制器,LM386(音頻功放)來實現的。晶振采用12MHz,音樂信號由P3.0口輸出,經喇叭發聲而播放歌曲,框架圖如圖1-1所示。</p><p><b> ?。?)軟件設計。</b></p><p>  程序中根據每個音符對應頻率由定時器T0

22、產生。為了程序調用方便,每個音符都對應一個編碼,占用一個字節。</p><p><b>  1.1.2 方案二</b></p><p>  利用AT89C51、74LS373鎖存器和27512外部擴展組成的音樂播放器</p><p><b> ?。?)功能特色</b></p><p>  對內存進行

23、了擴展,可以播放三首以上的歌曲。</p><p><b> ?。?)硬件設計</b></p><p>  電路以AT89C51為主控制器,74LS373和27512進行外部程序存儲器的擴展,播放/暫停鍵為播放/暫停歌曲,下一曲鍵和上一曲鍵分別為調整歌曲的下一曲和上一曲選擇鍵的按鈕。晶振采用12MHz,音樂信號由P3.0口輸出,經喇叭發聲而播放歌曲如圖1-2所示框架圖。

24、</p><p><b> ?。?)軟件設計</b></p><p>  程序中根據音選取的是C調三個8度內的音符,共16個音。每個音符對應頻率由定時器T0產生。為了程序調用方便,每個音符都對應一個編碼,占用一個字節。在程序中以查表的方式加載計數初值。當值為00H時表示空拍,與節拍碼配合完成節拍發音。節拍碼也占一個字節,其總時間長度等于基本時間乘以節拍碼的值。節拍碼值

25、為01H時,表示當前樂曲結束,為00H時,表示全部樂曲結束。為了編碼簡單,一般節拍碼高半字節表示整拍,低半字節表示分數,只要基本延時設定恰當即可并且在按開始按鈕后,可以播放歌曲。</p><p><b>  1.1.3 方案三</b></p><p><b> ?。?)功能特色</b></p><p>  本播放器是由4X

26、4組成的16個按鈕矩陣鍵盤,設計成16個音組成的聲音發生器并且能夠播放音樂。</p><p><b> ?。?)硬件設計</b></p><p>  電路以AT89C51為主控制器,下一曲、上一曲分別為上一曲、下一曲選擇鍵的按鈕并且采用利用4X4組成的16個按鈕矩陣鍵盤來每按一個鍵,發出一個音。晶振采用12MHz,音樂信號由P3.0口輸出,經喇叭發聲而播放歌曲,如圖1

27、-3所示。</p><p><b> ?。?)軟件設計</b></p><p>  程序中音選取的是C調三個8度內的音符,共16個音。每個音符對應頻率由定時器T0產生。為了程序調用方便,每個音符都對應一個編碼,占用一個字節。在程序中以查表的方式加載計數初值,為了編碼簡單,一般節拍高半字節表示整拍,低半字節表示分數,只要基本延時設定恰當即可,為了及時響應鍵盤操作,鍵掃描

28、指令安排在基本延時時間子程序中,按鍵每按下一次,樂曲數目計數器R5加"1"或減"1",根據R5的內容轉向不同的樂曲并且在按下開始按鈕后,就開始播放歌曲。</p><p>  1.1.3 方案比較</p><p>  從以上三種方案,方案三只能利用按鍵發音,可以發出16個音并且只能播放三首歌曲,而方案二進行了內存的擴充而可以播放三首以上的歌曲,在播放的

29、過程中,方案二可以隨時的暫停播放歌曲的進度,而方案一不具有該功能。方案二從實現的功能上優于方案一、三,方案二在使用上及其功能的實現上都較方案三簡潔,并且由于單片機具有優越的高集成電路性,使其工作速度更快、效率更高。另外AT89C51單片機采用12MHz的晶振,提高了信號的測量精度,并且使該系統可以通過軟件改進來擴張功能。</p><p>  通過方案對比,最終選擇方案二,音樂發生器電路原理圖見附錄1所示。<

30、/p><p><b>  第2章 硬件設計</b></p><p>  2.1 電路組成及工作原理</p><p>  2.1.1 電路組成</p><p>  音樂發生器的電路設計方框圖如圖2-1所示,電路原理圖見附錄1所示,主要由單片機控制系統、調整歌曲序號、顯示歌曲序號、內存外部擴充電路、復位電路等組成。</p&

31、gt;<p>  單片機AT89C51是本系統的核心,它主要負責控制各個部分協調工作。在其外圍接上:復位電路、數碼管、按鈕及揚聲器。元件為:晶振X1、電容、電阻、與非門、非門、數碼管、揚聲器、四個按鍵、74LS373鎖存器、27512外部程序存儲器擴展。其中,四個按鍵分別是上一曲、下一曲、暫停/播放、復位。P1.0-P1.6是位選口,P3.2、P3.6、P3.7共同為上、下歌曲的調整口,實現對歌曲的調整操作,并且加減調整歌

32、曲的曲號,P3.3口為歌曲的暫停/播放按鈕,可對播放中的歌曲進行暫停/播放,P3.0為蜂鳴器的控制口。</p><p>  2.1.2 電路工作原理 </p><p>  本音樂發生器是用單片機來設計制作完成,其功能的實現主要通過軟件編程來完成, AT89C51單片機片內帶有4KB和外部程序存儲器擴展的256K的內存,并且允許在系統內改寫或用編程器編程。該音樂發生器的效率較高,其誤差主要由

33、晶振自身的誤差所造成。存儲歌曲是采用的外部擴展,更改歌曲號是通過下一曲和上一曲來實現的,按鍵將單片機I/0 口的電平拉低,單片機檢測到I/O口電平為0時,自動改變顯示的數,實現更改的功能。顯示是使用一個的七段共陰極數碼管顯示,設計中根據實際情況采用的是動態顯示方法,其中通過查表將字型碼送給7段數碼管顯示的數字。當播放歌曲時,會在數碼管上顯示該歌曲的編號提示現在正在播放的歌曲的序號。軟件去抖動,如果“開始鍵”按下就向下執行,否者跳到開始。

34、采用延時程序進行對歌曲的播放。</p><p>  2.2 AT89C51的簡介</p><p>  2.2.1 AT89C51功能概述</p><p>  自從1971年微型計算機問世以來,隨著大規模集成電路技術的進一步發展,導致微型計算機正向兩個主要方向發展:一是高速度、高性能、大容量的高檔微型機及其系列化向大、中型計算機的挑戰;另一個是穩定可靠、小而廉、能適應

35、各種控制領域需要的單片機。</p><p>  MCS—51系列是Intel公司在1980年推出的高檔8位單片機,具有性能價格比高、品種多、兼容性強、開發用的仿真機較完善等優點,所以在國際上和國內的占有率相當高。它擁有8位微處理器和控制器,內含一個一位布爾運算處理器,可直接對數據的位進行操作和運算,特別適用于邏輯控制。內部含有4KB的程序ROM并且在外部擴展了256K的存儲空間,2個16位的計數/定時器。本次采用

36、的是AT89C51單片機,其電路如2-2所示,它的中斷功能比較強,有5個中斷源,即外部中斷2個,定時器中斷2個,串行中斷1個,有2個中斷優先級。中斷控制電路主要包括用于中斷控制的四個寄存器:定時器控制寄存器TCON,串行口控制寄存器SCON,中斷允許控制寄存器IE,中斷優先級控制寄存器IP等。內部時鐘振蕩器,全雙工方式的串行接口(UART),兩極中斷優先權的6個中斷源/5個中斷矢量的中斷邏輯。哈佛結構的存儲器組織,支持高達64K為單周期

37、指令,支持六種尋址方式。最高時鐘振蕩頻率可達12MHZ,大部分指令執行時間為1µs,乘、除指令為4µs。</p><p>  2.2.2 AT89C51的管腳圖</p><p>  MCS-51系列單片機采用40引腳雙列直插式封裝(DIP),其引腳排列和邏輯符號如圖2-3所示,4個并行口共有32根引腳,可分別作地址線、數據線和I/O線;2根電源線;2根時鐘振蕩電路引腳和

38、4根控制線。</p><p>  2.2.3 AT89C5 單片機的引腳介紹</p><p>  AT89C51單片機是高性能單片機,因為受引腳數目的限制,所以有許多引腳具有第二功能,各引腳功能說明如下:</p><p> ?。?)輸入/輸出口線</p><p>  A. 口8位雙向口線</p><p>  B.

39、 口8位雙向口線</p><p>  C. 口8位雙向口線</p><p>  D. 口8位雙向口線</p><p> ?。?)ALE地址鎖存控制信號</p><p>  在系統擴展時,ALE用于控制把口輸出的底8位地址送入鎖存器鎖存起來,以實現低位地址和數據的分時傳送。此外由于ALE是以六分之一晶振頻率的固定頻率輸出的正脈沖,因此

40、可作為外部時鐘或外部定時脈沖使用。</p><p> ?。?)外部程序存儲器讀選通信號</p><p>  在讀外部ROM時有效(低電平),以實現外部ROM單元的讀操作。</p><p> ?。?)訪問程序存儲器控制信號</p><p>  當信號為低電平時,對ROM的讀操作限定在外部程序存儲器;而當信號為高電平時,對ROM的讀操作是從內部程

41、序存儲器開始,并可延續至外部程序存儲器。</p><p> ?。?)RST 復位信號</p><p>  當輸入的復位信號延續2個機器周期以上高電平時即為有效,用以完成單片機的復位操作。</p><p> ?。?)XTAL1和XTAL2外接晶體引線端</p><p>  當使用芯片內部時鐘時,這兩個引線端用于外接石英晶體和微調電容;當使用外部

42、時鐘時,用于接外部時鐘脈沖信號。</p><p> ?。?)電源、地線GND</p><p>  VCC、GND。VCC一般接+5V電源,GND接地。</p><p><b>  2.4 晶振電路</b></p><p>  MCS-51片內有一個高增益的反相放大器,其輸入端為引腳XTAL1和輸出端為引腳為XTAL2,用

43、于外接石英晶體振蕩器和微調電容,構成穩定的的自激振蕩器,其發出的脈沖直接送入內部的時鐘電路,如圖2-3所示。電容C1和C2對頻率有微調作用,電容一般取20pF左右。晶體振蕩頻率范圍是1.2MHz~12MHz,一般情況下,選用振蕩頻率為12MHz的石英晶體。振蕩脈沖信號經過內部時鐘發生器進行二分頻之后,才成為單片機的時鐘信號。</p><p><b>  2.3 揚聲器電路</b></p

44、><p>  本設計是采用蜂鳴器用來發出聲音,當你按下播放按鈕時,單片機就開始運行程序,蜂鳴器開始讀程序而播放你所要播放的歌曲,電路如圖2-4所示。</p><p><b>  2.4 顯示電路</b></p><p>  本設計顯示是采用一個七段共陰極LED顯示,當片選信號為0時,數碼就會點亮,主要是用來顯示播放中歌曲的序號、選擇歌曲來播放等信息

45、。其分別利用單片機的P1.0口至P1.7口與數碼管相連接,完成字段碼顯示歌曲的號數。數碼管的另一引腳接低電平(接地)。電路如圖2-5所示。</p><p>  2.5 更換歌曲電路</p><p>  采用3個按鈕作為更換歌曲按鍵,上一曲、下一曲和播放/暫停按鍵分別是歌曲的序號的加、減和對歌曲進行暫停/播放。利用三個上拉電阻和與非門、非門來實現歌曲的選擇和暫停,單片機的P3.2口至P3.7

46、口始終是高電平,當沒有按鍵按下時,就會一直的播放歌曲。電路如圖2-6所示。</p><p><b>  2.6 復位電路</b></p><p>  AT89C51的復位是由外部的復位電路來實現的。復位引腳RST通過一個施密特觸發器用來抑制噪聲,施密特觸發器的輸出電平由復位電路采樣一次,然后才能得到內部復位操作所需要的信號。</p><p> 

47、 本設計是采用上電自動復位,上電自動復位是通過外部復位電路的電容充電來實現的。只要Vcc的上升時間不超過1ms,就可以實現自動上電復位。時鐘頻率用12MHZ時C取20PF。</p><p>  2.7 程序存儲器外部擴展電路</p><p>  本設計是采用了一個74LS373鎖存器和一個27512程序存儲器外部擴展組成,其主要的功能就是為了在外部擴展單片機內存,使它有足夠的空間存放系統中

48、的程序,而達到使它實現所要得到的功能和應用的領域,其圖如圖2-8所示</p><p>  第3章 軟件系統設計</p><p>  3.1 軟件流程設計</p><p>  主要程序流程有:主程序、顯示子程序、發聲子程序、更改歌曲曲號子程序。軟件實現的基本原理是,當單片機P3.0口為0時,軟件去抖動功能,如果“開始鍵”按下就向下執行,否者跳到開始。主程序流程圖校驗鍵

49、,歌曲曲號顯示,發聲程序等功能子程序組成,系統完成初始化后循環檢查各個功能當用戶使用某個功能時,按下相應的按鈕(或開關)單片機進入相應的功能處理。主程序流程圖如圖3-1所示。而外來脈沖是通過按鍵產生的,因此實際上單步執行就是按一次鍵執行一條指令。</p><p><b>  第4章 系統調試</b></p><p>  調試是一個必不可少的環節,它將會驗證你的成果,是

50、否實現了所要完成的功能。系統調試仿真時先要使用Keil C編譯器,把所寫的程序進行編譯,同時在仿真器里設置生成HEX文件,編譯無錯誤時還要進行PROTEUS仿真,查看功能是否能夠實現。下面就將仿真將會用到的軟件進行簡單的介紹,并對仿真過程予以簡介。</p><p>  4.1 常用調試工具</p><p>  4.1.1 Keil C 軟件</p><p>  Ke

51、il C軟件是集成調試環境,集成了編緝器、編譯器、調試器,支持軟件模擬,支持項目管理功能強大的觀察窗口,支持所有的數據類型。樹狀結構顯示,一目了然,支持ASM(匯編)、C語言,多語言多模塊源程序混合調試,在線直接修改、編譯、調試源程序,錯誤指令定位。功能很強大。用于對程序的調試和編輯。</p><p>  Keil C軟件界面如圖4-1所示。</p><p>  4.1.2 PROTEUS

52、軟件</p><p>  系統仿真還用到了PROTEUS軟件,可通過仿真可以完全顯示出所設計系統的功能,對于程序的調試等有很大的幫助。</p><p>  首先要新建一個文檔是DNS型的找出需要的器件,可以使用搜索功能。接著把各個器件放到合適的位置都要放到藍色框內。然后根據自己的設計要求連線。把所有的元件都連接好,做出完整的電路圖。</p><p>  4.2 系統

53、調試及性能分析</p><p>  系統的調試開始是把偉福編譯生成的無錯誤后綴名為.HEX的文件加載到AT89C51單片機中,方法是雙擊單片機彈出一個對話框,在program file后選擇要添加文件,文件要求必須是HEX文件。然后可以點擊運行觀察現象,當出現錯誤時,大多都是軟件出了問題,經過不斷的改進調試。對按鍵檢測、加減歌曲序號與按鍵之間產生的不一致、歌曲調用子程序等軟件的修改后,系統基本實現了所要設計的功能

54、。</p><p>  在進行系統的測試過程中。當調節歌曲的序號時,程序是給了一個初始值“1”,假如調節歌曲的序號后,歌曲播放的就是顯示屏上顯示的歌曲序號的歌曲。如按下復位鍵后時間會回到初始時間,即從頭開始。數碼管也跟隨顯示歌曲的序號為“1”,同時蜂鳴器發出了聲響,為第一首歌曲。通過調試系統達到設計的任務要求。</p><p><b>  心得體會</b></p

55、><p>  本設計報告主要介紹了用單片機實現的音樂發生器的設計方法。系統介紹了該電路的硬件構成和軟件工作過程,系統以AT89C51為核心,主要采用中斷控制系統,結合所學的單片機的知識,實現系統的功能要求。設計中很好的使軟、硬件相結合,基本上達到了設計的要求。通過這次畢業設計,使我對單片機及其附屬電路有了一定的了解,對課本上的知識有了近一步的掌握,也深刻明白了自己的不足。</p><p>  

56、完成本次課程設計的過程,是一個從無到有的過程,經歷了興奮、自信、失落、奮發、所悟、完成幾個過程。課程設計時,仔細閱讀設計的題目和要求,以為沒什么困難的,所用的知識書上都有??墒钱斘覄邮珠_始做的時候,才發現其中的算法,設計是那么繁瑣。經過一天的努力,毫無結果。失落的心情油然而生。于是,再到圖書館和網上查找資料,在經過借鑒很多類似的資料,文獻后,總算是有點眉目了。埋頭苦干的過程是痛苦的,尤其是在思考算法和程序框架時,迷茫,煩躁,特別是當苦思

57、出來一個結果,又被自己推翻,心痛的無法言繪,在這不斷循環中,終于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知領域”的困難。但當課程設計完成時,那感覺是甜蜜的,沒有耕耘,哪來得收獲的喜悅,不懂付出怎么能知道回報的快樂,一分耕耘一分收獲,有付出才會有回報,就在這樣的痛與快樂的交換中,我學到了知識, 學到了做人的道理。</p><p>  通過這短短幾個月的制作,我感覺到自己從課本上學到的理論知識和實踐

58、仍有很大的差距。很多元器件根本不知道有什么功效,在仿真儀器中是什么代碼。有的知識,自己感覺已經掌握得差不多了,但是實際操作起來就有問題出現了。我遇到了不少問題,花費了很多的時間。這讓我重新反思我們的學習,深刻領悟到我們這個專業動手,實踐的重要性。理論不經過實踐考驗,是沒法實施的,就像我們編的程序,很多方面考慮的都不夠,幾乎沒有涉及到實際應用時的防范方法措施。</p><p>  這次的課程設計,讓我學到了很多書本

59、上學不到的東西,學到了實際應用時,是取用成本的最小化,做設計不僅要考慮大的方面,小的方面也必須做到完美。最大的收獲是:對按鍵,顯示器,單片機匯編語言的應用有了深刻的了解。</p><p><b>  參考文獻</b></p><p>  [1] 樊明龍.任麗靜編.單片機原理與應用[M].化學工業出版社,2005.</p><p>  [2] 徐

60、愛卿編.單片微型計算機應用和開發系統[M].北京航空航天大學出版社,1998.</p><p>  [3] 戴梅芳編.微型計算機技術及應用[M].清華大學出版社,1996.</p><p>  [4] 李廣弟,朱月秀,王秀山編.單片機基礎[M].北京航空航天大學出版社,2001.</p><p>  [5] 吳金戌編.8051單片機實踐與應用[M].清華大學出版社,

61、2003.</p><p><b>  附 錄</b></p><p>  附錄1 音樂發生器電路原理圖</p><p><b>  附錄2 元件明細表</b></p><p><b>  附錄3 源程序代碼</b></p><p>  /*******

62、************************************************************</p><p>  SOUND PLAY FOR 51MCU</p><p>  /****************************說**********明*************************</p><p>  曲譜存貯格

63、式 unsigned char code MusicName{音高,音長,音高,音長...., 0,0};末尾:0,0 表示結束(Important)</p><p>  *******************************************************************/</p><p>  #ifndef __SOUNDPLAY_H_REVISION

64、_FIRST__</p><p>  #define __SOUNDPLAY_H_REVISION_FIRST__</p><p>  //******************************************************************</p><p>  #define SYSTEM_OSC 12000000//定義晶振頻

65、率12000000HZ</p><p>  #define SOUND_SPACE 4/5 //定義普通音符演奏的長度分率,//每4分音符間隔</p><p>  sbit BeepIO=P3^0; //定義輸出管腳 </p><p>  sbitkey_int0=P3^3;</p><p>  sbit

66、key_add=P3^6;</p><p>  sbitkey_dec=P3^7;</p><p>  sbit key_led=P3^1;</p><p>  unsigned char code table[]={0x06,0x5b,0x4f};</p><p>  unsigned int code FreTab[12] =

67、 { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p>  unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在頻率表中的位置</p><p>  unsigned char code LengthTab[7]= { 1,2,4,8,

68、16,32,64 };unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定時器初值暫存 </p><p>  unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音長定時器初值暫存</p><p>  unsigned char cnt=0;</p><p>

69、;  unsigned char temp=0;</p><p>  unsigned char flag=1;</p><p>  void Delay1ms(unsigned int count); //初始化函數</p><p>  void InitialSound(void)</p><p>  {BeepIO

70、 = 0; //喇叭關閉</p><p>  Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;// 計算TL1應裝入的初值 (10ms的初裝值)</p><p>  Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;// 計算TH1應裝入的初值 <

71、/p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p>  TMOD |= 0x11;//設置定時器0、1的工作方式為工作方式1</p><p>  ET0 = 1;//開啟定時啤/計數中斷0</p><p>  ET

72、1 = 0;//開啟定時啤/計數中斷1</p><p>  TR0 = 0;//啟動定時計數器0</p><p>  TR1 = 0;//啟動定時計數器1</p><p>  EA = 1;</p><p><b>  EX0=1;</b></p><p&g

73、t;<b>  EX1=1;}</b></p><p>  //定時器0的中斷程序</p><p>  void BeepTimer0(void) interrupt 1//音符發生中斷</p><p>  {BeepIO = !BeepIO;</p><p>  TH0 = Sound_Temp_TH0;&l

74、t;/p><p>  TL0 = Sound_Temp_TL0; }</p><p><b>  //播放程序</b></p><p>  int Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)</p>

75、;<p>  {unsigned int NewFreTab[12]; //新的頻率表</p><p>  unsigned char i,j;</p><p>  unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;</p><p>  un

76、signed char Tone,Length,SL,SH,SM,SLen,XG,FD;</p><p>  for(i=0;i<12;i++) // 根據調號及升降八度來生成新的頻率表 </p><p>  {j = i + Signature;if(j > 11)</p><p>  {j = j-12;NewFreTab[i] = Fr

77、eTab[j]*2;}</p><p><b>  else</b></p><p>  NewFreTab[i] = FreTab[j];</p><p>  if(Octachord == 1)</p><p>  NewFreTab[i]>>=2;</p><p>  else

78、 if(Octachord == 3)</p><p>  NewFreTab[i]<<=2;}</p><p>  SoundLength = 0;</p><p>  while(Sound[SoundLength] != 0x00) //計算歌曲長度</p><p>  {SoundLength+=2;}<

79、;/p><p>  Point = 0;</p><p>  Tone = Sound[Point];</p><p>  Length = Sound[Point+1]; // 讀出第一個音符和它時時值</p><p>  LDiv0 = 12000/Speed;// 算出1分音符的長度(幾個10ms) </p&g

80、t;<p>  LDiv4 = LDiv0/4; // 算出4分音符的長度 </p><p>  LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最長間隔標準 </p><p>  TR0 = 0;</p><p>  TR1 = 1;</p><p>  while(Point

81、 < SoundLength)</p><p>  { if(cnt!=temp) //判斷有無中斷</p><p>  { return 0;//如果有則跳出此函數}</p><p>  if(flag==0)//暫停程序.......</p><p>  {flag=1;while(flag

82、==1)</p><p>  { Delay1ms(5); BeepIO=0;}</p><p>  flag=1;//暫停程序........} </p><p>  SL=Tone%10; //計算出音符 </p><p>  SM=Tone/10%10; //計算出高低音 </

83、p><p>  SH=Tone/100; //計算出是否升半 </p><p>  CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出對應音符的頻率 </p><p><b>  if(SL!=0)</b></p><p>  {if (SM==1) Current

84、Fre >>= 2; //低音 </p><p>  if (SM==3) CurrentFre <<= 2; //高音</p><p>  Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//計算計數器初值</p><p>  Sound_Temp_TH0

85、 = Temp_T/256; </p><p>  Sound_Temp_TL0 = Temp_T%256; </p><p>  TH0 = Sound_Temp_TH0; </p><p>  TL0 = Sound_Temp_TL0 + 12; //加12是對中斷延時的補償 }</p><p>  if(cnt!=temp)

86、 //判斷有無中斷</p><p>  { return 0; }</p><p>  {flag=1;while(flag==1){}</p><p>  flag=1;}//暫停程序........</p><p>  SLen=LengthTab[Length%10]; //算出是幾分音符</p&g

87、t;<p>  XG=Length/10%10; //算出音符類型(0普通1連音2頓音) </p><p>  FD=Length/100;</p><p>  LDiv=LDiv0/SLen; //算出連音音符演奏的長度(多少個10ms)</p><p>  if (FD==1) </p><p>  LDiv

88、=LDiv+LDiv/2;</p><p>  if(XG!=1)</p><p>  if(XG==0) //算出普通音符的演奏長度 </p><p>  if (SLen<=4);LDiv1=LDiv-LDiv4;</p><p><b>  else</b></p><p>

89、  LDiv1=LDiv*SOUND_SPACE;</p><p><b>  else</b></p><p>  LDiv1=LDiv/2; //算出頓音的演奏長度 </p><p><b>  else</b></p><p>  LDiv1=LDiv;</p><

90、;p>  if(SL==0) LDiv1=0;</p><p>  LDiv2=LDiv-LDiv1; //算出不發音的長度 </p><p>  if (SL!=0)</p><p><b>  {TR0=1;</b></p><p>  for(i=LDiv1;i>0;i--) //發規定

91、長度的音 </p><p>  {while(TF1==0);</p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p><b>  TF1=0;}}</b></p><p>  if(cnt!=temp)

92、 //判斷有無中斷 </p><p>  { return 0;}</p><p>  {flag=1;while(flag==1)</p><p><b>  {}</b></p><p>  flag=1; } </p><p>  if(LDiv2

93、!=0)</p><p>  {TR0=0; BeepIO=0;</p><p>  for(i=LDiv2;i>0;i--) //音符間的間隔</p><p>  {while(TF1==0);</p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 =

94、Sound_Temp_TL1;</p><p>  TF1=0;}}</p><p>  Point+=2; </p><p>  Tone=Sound[Point];</p><p>  Length=Sound[Point+1]; }</p><p>  BeepIO = 0;cnt++; }</

95、p><p><b>  #endif</b></p><p>  #include <reg51.h></p><p>  #include "SoundPlay.h"</p><p>  void Delay1ms(unsigned int count)</p><p&g

96、t;  {unsigned int i,j;</p><p>  for(i=0;i<count;i++)</p><p>  for(j=0;j<120;j++); }</p><p><b>  //揮著翅膀的女孩</b></p><p>  unsigned char code Music_fi

97、le[3][500]=</p><p>  { { 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,</p><p>  0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02, 0x16,0x03, 0x17,

98、0x03, 0x18,0x02, 0x18,0x03,</p><p>  0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,</p><p>  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,</p><p>  0x17,0x02, 0x17,

99、0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,</p><p>  0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,</p><p>  0x18,

100、0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,</p><p>  0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p

101、>  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,</p><p>  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p>  0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,</p

102、><p>  0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p>  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,

103、0x03,</p><p>  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p>  0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,

104、0x03, 0x1B,0x03,</p><p>  0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,</p><p>  0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x17,0x04, 0x18,0x0E, 0x18,

105、0x03, 0x17,0x04, 0x18,0x0E,</p><p>  0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,</p><p>  0x20,0x03, 0x21,

106、0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p>  0x15,

107、0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,</p><p>  0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p>  0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,</p><p

108、>  0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p>  0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,</p

109、><p>  0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,</p><p>  0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00},</p><p><b>  //同一首歌</b></p><p>  

110、{ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,</p><p>  0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,</p><p>  0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,</p>

111、<p>  0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,</p><p>  0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,</p><p>  0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03

112、,</p><p>  0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,</p><p>  0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,</p><p>  0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D

113、, 0x17,0x03,</p><p>  0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,</p><p>  0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,</p><p>  0x19,0x03, 0x1A,0x01, 0x1B,0x02

114、, 0x1B,0x03, 0x1B,0x03,</p><p>  0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,</p><p>  0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,</p><p>  0x10,0x03, 0x10,0x03

115、, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,</p><p>  0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,</p><p>  0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,</p><p>  0x16,0x03

116、, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,</p><p>  0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,</p><p>  0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,</p><p>

溫馨提示

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

評論

0/150

提交評論