音樂提示定時器--課程設(shè)計_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計</p><p>  課程名稱 單片機原理與應(yīng)用 </p><p>  課題名稱 音樂提示定時器 </p><p>  專 業(yè) 自 動 化 </p><p>  班 級 </p&

2、gt;<p>  學(xué) 號 </p><p>  姓 名 </p><p>  指導(dǎo)教師 </p><p>  2013 年 5 月 20 日</p><p><b>  目 錄</b></p><

3、p><b>  第1章 緒論7</b></p><p>  第2章 音樂基礎(chǔ)知識8</p><p>  2.1 音樂基礎(chǔ)8</p><p>  2.2 音頻脈沖和音樂節(jié)拍的實現(xiàn)8</p><p>  第3章 總體方案設(shè)計11</p><p>  3.1設(shè)計任務(wù)與要求11<

4、;/p><p>  3.2總體系統(tǒng)框圖11</p><p>  3.3 系統(tǒng)組成12</p><p>  第4章 系統(tǒng)硬件設(shè)計13</p><p>  4.1控制電路設(shè)計13</p><p>  4.2 AT89C52單片機介紹14</p><p>  4.3 發(fā)聲驅(qū)動電路17<

5、/p><p>  4.4 顯示電路17</p><p>  4.5 控制電路18</p><p>  第5章 軟件設(shè)計19</p><p>  5.1主程序設(shè)計19</p><p>  5.2各子程序設(shè)計20</p><p>  第6章 硬件系統(tǒng)的制作與調(diào)試25</p>

6、<p>  6.1 系統(tǒng)調(diào)試方法25</p><p>  6.2 定時設(shè)置與時鐘顯示26</p><p><b>  結(jié) 論28</b></p><p><b>  參考文獻29</b></p><p>  附錄一-源程序30</p><p>  附

7、錄二-實驗原理圖42</p><p><b>  第1章 緒論</b></p><p>  現(xiàn)在各種各樣的音樂播放器呈現(xiàn)在我們面前,外觀越來越精美,功能越來越多,體積越來越小,重量也越來越小、價格越來越便宜。同時,隨著當(dāng)代手機行業(yè)的快速發(fā)展,許多手機廠商為了能夠吸引廣大的客戶受到消費者的青睞,致此他們開始研究在手機上實現(xiàn)音樂和視頻的播放,因此現(xiàn)在的手機都能夠輕松的播

8、放音樂了。這樣人們就更很容易攜帶,隨時隨地都可以聽,以便來緩解人們的疲勞、壓抑、愉快人們的心情等,甚至有時還可以借著音樂來抒發(fā)自己的感情,傳達我們對朋友的祝福。因此,在不知不覺中它成為了人們生活的一樣必需品,無論到哪里、無論什么時候都可以聽到我們想聽的音樂。</p><p>  通過控制單片機定時器的定時時間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動蜂鳴器發(fā)出不同音節(jié)的聲音。用軟件延時來控制發(fā)音時間的長短,控制節(jié)拍。把

9、樂譜中的音符和相應(yīng)的節(jié)拍變換為定時常數(shù)和延時常數(shù),作為數(shù)據(jù)表格存放在存儲器中,由程序查表得到定時常數(shù)和延時常數(shù),分別用來控制定時器產(chǎn)生的脈沖頻率和發(fā)出該音頻脈沖的持續(xù)時間。</p><p>  在實際中參照單片機相關(guān)資料,就可容易的利用單片機設(shè)計出一個音樂發(fā)生器。在設(shè)計過程中人們還可考慮用多種方法進行實現(xiàn),這樣不但很好的發(fā)揮了人們的創(chuàng)新精神,還提高了動手能力、綜合分析能力及專業(yè)知識運用能力。</p>

10、<p>  第2章 音樂基礎(chǔ)知識</p><p><b>  2.1 音樂基礎(chǔ)</b></p><p>  音作為一種物理現(xiàn)象,是由于物體振動而產(chǎn)生的,振動產(chǎn)生的聲波作用于人耳,聽覺系統(tǒng)將神經(jīng)沖動傳達給大腦,進而產(chǎn)生聽覺。人耳能聽到的聲音頻率大約在11—20000Hz,而音樂使用的音一般在27—4100Hz。</p><p>  樂

11、音體系中各音級的名稱叫做音名,被廣泛采用的是C D E F G A B (do re mi fa so la si則多用于歌唱,稱為唱名)。樂音體系中音高關(guān)系的最小計量單位叫做半音,兩個半音構(gòu)成一個全音。樂音中有幾十個高低不同的音,但是最基本只有這七個音,其他高、低音名都是在這個基礎(chǔ)上變化出來的。</p><p>  樂譜表上用來表示正在進行的音的長短的符號,叫做音符。不同的音符代表不同的長度。音符有以下幾種:全

12、音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分音符。此外,還有附點音符,它就是指帶附點的音符,所謂附點就是記在音符右邊的小圓點,表示增加前面音符時值的一半。音持續(xù)的長短即時值,一般用拍數(shù)表示,休止符表示暫停發(fā)音。</p><p>  一首音樂就是由許多不同的音符組成的,而每一個音符對應(yīng)著不同的頻率,這樣就可以利用不同的頻率的組合,加以拍數(shù)對應(yīng)的延時來構(gòu)成不同的音樂。</p>

13、<p>  2.2 音頻脈沖和音樂節(jié)拍的實現(xiàn)</p><p>  2.2.1 音頻脈沖的產(chǎn)生</p><p>  音樂的產(chǎn)生需要不同頻率的音頻脈沖,對于單片機而言,可以利用它的定時/計數(shù)器產(chǎn)生這樣的方波頻率信號。在本設(shè)計中,單片機工作在12MHz時鐘頻率下,其時鐘周期為1us,因此可以利用AT89C52的內(nèi)部定時/計數(shù)器T0,使其工作模式為1,根據(jù)對應(yīng)音符的不同頻率求出計數(shù)器的初

14、值T(即是TH0和TL0的值),則TH0=T/256,TL0=T%256。</p><p>  C調(diào)各音符頻率與計數(shù)值T的對照如下表2-1所示。</p><p>  2.2.2 音樂節(jié)拍的產(chǎn)生</p><p>  節(jié)拍是指音樂持續(xù)的長短,是除音符之外音樂的另一關(guān)鍵組成部分,在單片機系統(tǒng)中可以通過延時來實現(xiàn)。</p><p>  如果1/4拍的

15、延時設(shè)為0.2s,則1拍的時間為0.8s,依次類推,可以求出其余節(jié)拍的值,節(jié)拍的延時時間與音樂的曲調(diào)值有相對應(yīng)的關(guān)系,下面為不同曲調(diào)下的1/4和1/8節(jié)拍的時間設(shè)定,如下表2-2所示。</p><p>  表2-2 不同曲調(diào)下1/4和1/8節(jié)拍的延時表</p><p>  2.2.3 “天空之城”曲譜</p><p>  67|1. 7 1 3 |7 - - 3

16、 |6. 5 6 1 |5 - - 33| 4. 3 41. |3 - 3111|7. #4 4 7|7 - - 67| 1. 7 1 3 |7 - - 3 |6. 5 6 1 |5 - - 33|  4 17. 1 |2 31 1- |1766 7 #5 |6- - 12|  3. 2 3 5 |2 - - 5 |1. 7 1 3 |3 - - 0 | 671171 2 |1. 55 - |4 3

17、 2. 1 |3 - - 3 | </p><p>  6 - 5 - |321 - - |2. 1 2 5 |3 - - 3 | 6 - 5 - |321 - - |2. 1 2 7 |6 - - 67|</p><p>  1. 7 1 3 |7 - - 3 |6. 5 6 1 |5 - - 33| 4 17. 1 |2 31 1- |1766 7 #5 |6-

18、- ||</p><p>  第3章 總體方案設(shè)計</p><p>  3.1設(shè)計任務(wù)與要求</p><p><b>  3.1.1設(shè)計任務(wù)</b></p><p>  設(shè)計一定時音樂發(fā)生器:</p><p> ?。?)用單片機作為開發(fā)工具,能自定義倒計時時間、能儲存樂曲;</p&g

19、t;<p> ?。?)能按鍵選擇倒計時時間,每按一次加1鍵樂倒計時時間按照5min10min、20min、30min、60min依次倒計時;</p><p>  (3)用LED數(shù)碼管顯示倒計時時間;</p><p> ?。?)能進行仿真音樂發(fā)生器。</p><p>  3.1.2 設(shè)計要求</p><p>  方案合理、正確,系

20、統(tǒng)穩(wěn)定、可靠。</p><p>  軟件設(shè)計要求盡可能精練、簡短和運行可靠。</p><p>  硬件電路要求簡單明了,以節(jié)約成本。</p><p><b>  3.2總體系統(tǒng)框圖</b></p><p>  本系統(tǒng)的設(shè)計是以80C51單片機為核心,配以一定的外圍電路和軟件,實現(xiàn)比賽計分器的功能。利用了8個8段共陰級數(shù)碼

21、管顯示器.其中甲乙兩個分值各用3個數(shù)碼管顯示分值,另外兩個顯示分隔符。采用動態(tài)顯示輸出倒計時時間,本系統(tǒng)中使用的是獨立的鍵盤。狀態(tài)切換時候用不同的發(fā)光二極管的對應(yīng)顯示切換到了不同的分值。系統(tǒng)設(shè)計方案的硬件電路設(shè)計框圖如圖2-1所示。</p><p>  圖2-1 硬件電路設(shè)計</p><p><b>  3.3 系統(tǒng)組成</b></p><p>

22、;  系統(tǒng)由硬件部分和軟件部分組成。硬件電路由復(fù)位按鍵、80C51單片機、獨立鍵盤,8個數(shù)碼管等組成。</p><p>  軟件部分主程序主要由鍵盤識別、鍵值處理、8位8段共陰極LED顯示器掃描顯示子程序組成。軟件設(shè)計主要有四個部分:信息輸入、信息處理、顯示輸出。信息輸入時采用鍵盤來實現(xiàn),所以需要檢測鍵盤有無按鍵的子程序;信息處理需要對用戶通過鍵盤輸入的不同信息進行辨別并執(zhí)行相應(yīng)的處理;顯示輸出采用動態(tài)輸出,從而

23、達到設(shè)計的目的。</p><p>  第4章 系統(tǒng)硬件設(shè)計</p><p><b>  4.1控制電路設(shè)計</b></p><p>  4.1.1 控制電路設(shè)置</p><p>  如圖3-1所示,按鈕與單片機的RST引腳相連,當(dāng)每次按下該按鈕后,系統(tǒng)將通過軟件實現(xiàn)對計分實現(xiàn)清零功能。這里我選擇的是使用電平復(fù)位。跳冒是

24、插在1、2端口。復(fù)位電路圖如下圖3-1所示。</p><p>  圖3-1 復(fù)位硬件電路圖</p><p>  4.1.2 工作原理</p><p>  利用單片機AT89C52直接來產(chǎn)生音頻脈沖來驅(qū)動喇叭來完成音樂的播放 。利用了該單片機的內(nèi)部定時器/計數(shù)器T0來定進行定時,同時利用定時器/計數(shù)器T1用業(yè)計數(shù),并同時利用了該單片機的P2口的P2.0來作為音頻脈沖的

25、輸出端。</p><p>  4.2 AT89C52單片機介紹 </p><p>  AT89C52是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和藹可親256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及8052產(chǎn)品引腳兼容,片內(nèi)置

26、通用8位中央處理器(CPU)和Flash存儲單元,功能強大AT89C52單片機適合于許多較為復(fù)雜控制應(yīng)用場合,如圖4-2所示。</p><p>  圖4-2 AT89C52引腳圖</p><p><b>  1、主要性能參數(shù)</b></p><p>  與MCS-51產(chǎn)品指令和引腳完全兼容</p><p>  8k字節(jié)

27、可重擦寫Flash閃速存儲器</p><p><b>  1000次擦寫周期</b></p><p>  全靜態(tài)操作:0Hz—24MHz</p><p><b>  三級加密程序存儲器</b></p><p>  256×8字節(jié)內(nèi)部RAM</p><p>  32個

28、可編程I/O口線</p><p>  3個16位定時/計數(shù)器</p><p><b>  8個中斷源</b></p><p>  可編程串行UART通道低功耗空閑和掉電模式</p><p><b>  2、引腳功能</b></p><p><b>  Vcc:電源電

29、壓</b></p><p><b>  GND:接地</b></p><p>  P0口:P0口是一個8位雙向I/O接口,也即地址/數(shù)據(jù)總線復(fù)用口。在訪問外部數(shù)據(jù)存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用。</p><p>  P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4

30、個TTL邏輯門電路,對端口寫“1”通過內(nèi)部的上拉電阻把端口拉到高電平時,此時可作輸入口。</p><p>  P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。在訪問外部存儲器時,P2口送出高8位地址數(shù)據(jù)。</p><p>  P3口:P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表4-1所示。</

31、p><p>  表4-1 P3口的第二功能表</p><p>  RST:復(fù)位信號輸入端。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。</p><p>  /PROG:地址鎖存有效信號輸出端。當(dāng)訪問片外部存儲器時,ALE(地址鎖存允許)輸出脈沖用于位鎖存低8地址</p><p> ?。撼绦虼鎯υ试S輸出端。是片外程序存儲器的

32、讀選通信號。</p><p>  /Vpp:行內(nèi)部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp,這必須是該器件是使用12V編程電壓Vpp。</p><p>  XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。通過XTAL1、XTAL2外接晶振后,即可構(gòu)成自激振蕩

33、器,驅(qū)動內(nèi)部時鐘發(fā)生器向主機提供時鐘信號。</p><p>  在AT89C52片內(nèi)存儲器中,80H-FFH共128個單元為特殊功能寄存器(SFR),其中包括B寄存器、累加器、程序狀態(tài)寄存器(PSW)、定時/計數(shù)器控制、中斷優(yōu)級控制寄存器(IP)、P3口鎖存寄存器、中斷允許控制寄存器(IE)、串行口控制寄存器等。它們可運用來設(shè)置片內(nèi)電路的運行方式,記錄電路的運行狀態(tài),MCS-51單片機對特殊功能寄存器采取與片內(nèi)R

34、AM統(tǒng)一編址的方法,可按字節(jié)地址直接尋址。</p><p>  4.3 發(fā)聲驅(qū)動電路</p><p>  主要是采用一個三極管來驅(qū)動揚聲器來產(chǎn)生音樂。在單片機的P2口上的P2.0的端子上連接發(fā)聲驅(qū)動電路,其中要先連接一個10k的電阻主要是用業(yè)限制電流過大,然后連接一個三極管來驅(qū)動揚聲器以致放出的音質(zhì)較好,再連接揚聲器,因為用到一個揚聲器所以就可以不能區(qū)分它的正負(fù)極性了,它的電路框圖如4-3

35、圖所示。</p><p>  圖4-3 發(fā)聲驅(qū)動電路</p><p><b>  4.4 顯示電路</b></p><p>  顯示部分主要是由一個共陰極的八段數(shù)碼管和八個限流電阻共同來組成的。它們接在AT89C52單片機P1口上,用一組電阻都為220、330或100來對P1口輸出的電壓進行分流,從而來確定了八段數(shù)碼管擁有正常的電壓,不會因電

36、流過大而被燒壞。這樣數(shù)碼管就可以正常顯示所播放的歌曲的曲目數(shù)了,具體的顯示器電路圖如圖4-4所示。</p><p>  圖 4-4 顯示電路</p><p><b>  4.5 控制電路</b></p><p>  這部分電路主要是用來控制歌曲的播放/暫停及選擇。采用了三個按鈕來進行控制來實現(xiàn)歌曲播放的上一曲、下一曲及開始/暫停的功能,同時還接

37、一個上拉電阻,它的阻值一般是5.1k、4.7k、10k三個阻值,共同實現(xiàn)了音樂播放歌曲的控制。如圖4-5所示。</p><p>  圖4-5 控制電路圖</p><p>  第5章 軟件設(shè)計</p><p><b>  5.1主程序設(shè)計</b></p><p>  本系統(tǒng)軟件設(shè)計采用單片機C語言設(shè)計,主要的語言模塊

38、有:初始化模塊、按鍵判斷模塊、數(shù)碼管顯示模塊、延時模塊組成。程序設(shè)計的流程圖如下圖5-1所示。</p><p><b>  N</b></p><p><b>  Y</b></p><p>  圖5-1 軟件設(shè)計的流程圖</p><p>  5.2各子程序設(shè)計 </p><p

39、>  5.2.1 初始化子程序</p><p>  sbit key1=P3^4;</p><p>  sbit key2=P3^5;</p><p>  sbit key3=P3^6;</p><p>  sbit key4=P3^7;</p><p>  sbit dula=P2^6;</p>

40、<p>  sbit wela=P2^7;</p><p>  sbit beep=P1^2; //將beep位定義為P1.2</p><p>  void init()</p><p><b>  {</b></p><p><b>  fen=5;</b></p>

41、<p><b>  miao=0;</b></p><p><b>  num2=1;</b></p><p><b>  flag=0;</b></p><p>  TMOD=0X11;//設(shè)定定時器的工作方式</p><p>  TH0=(65536-50000)

42、/256;//定時50ms</p><p>  TL0=(65536-50000)%256;</p><p>  TH1=(65536-50000)/256;</p><p>  TL1=(65536-50000)%256;</p><p>  EA=1;//開總中斷</p><p>  ET0=1;//開定時中斷&l

43、t;/p><p>  //TR0=1;//啟動定時器0</p><p>  ET1=1;//開定時中斷</p><p>  TR1=0;//啟動定時器0</p><p><b>  }</b></p><p>  uchar code tabledu[]= //不帶小數(shù)點的數(shù)碼管段</p&g

44、t;<p>  {0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71};</p><p>  uchar code tabledu1[]= //帶小數(shù)點的

45、數(shù)碼管段</p><p>  {0xbf,0x86,0xdb,0xcf,</p><p>  0xe6,0xed,0xfd,0x87,</p><p>  0xff,0xef,0xf7,0xfc,</p><p>  0x39,0x5e,0x79,0x71};</p><p>  初始化程序是用來對各定義的變量初始化的

46、,每一次主程序執(zhí)行之前都要先執(zhí)行初始化程序以保證變量的值為初值。</p><p>  5.2.2 延時子程序</p><p><b>  /*延時函數(shù)*/</b></p><p>  /*void delay(unsigned char time)</p><p><b>  {</b></p

47、><p>  unsigned char t1;</p><p>  unsigned long t2;</p><p>  for(t1=0;t1<time;t1++) // t or time</p><p><b>  {</b></p><p>  for(t2=0;t2<80

48、00;t2++)//對于12MHz的時鐘,延時為125ms(1/4節(jié)拍)</p><p><b>  {}</b></p><p><b>  }</b></p><p><b>  }*/</b></p><p>  void dingshi_display(uchar fe

49、n,uchar miao);//125ms延時函數(shù)</p><p>  void delay_125()</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=124;x>0;x--)</p><

50、p>  for(y=125;y>0;y--);</p><p><b>  }</b></p><p>  void delay(uint z) //延時1ms函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b>&l

51、t;/p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  這個延時程序設(shè)計是在硬件調(diào)試過程中更改數(shù)據(jù)得來的,不同的硬件延時應(yīng)選擇適合的延時時間。延時程序延時時間計算式:1T+1T+((2T*

52、300 +2T)*10+2T。</p><p>  5.2.3 鍵掃描程序</p><p>  uchar key1_scan()//掃描選擇定時的大小</p><p><b>  {</b></p><p>  if(key1==0) //有按鍵按下</p><p><b>  {

53、</b></p><p>  delay(5); //延時一下去抖</p><p>  if(key1==0)//確實是有按鍵按下</p><p><b>  {</b></p><p>  while(key1!=1);//松手有效</p><p>  delay(5);

54、 //松手延時去抖</p><p>  if(key1==1) //確實是松手了</p><p><b>  num++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return n

55、um;</p><p><b>  }</b></p><p>  這里只是按鍵選擇程序,實際上轉(zhuǎn)移到各自的處理程序中就有按鍵的消抖處理和對應(yīng)按鍵信號所要執(zhí)行的處理程序。</p><p>  5.2.4 數(shù)碼管顯示之程序</p><p>  void dingshi_display(uchar fen,uchar m

56、iao)</p><p><b>  {</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><

57、b>  P0=0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[fen/10];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></

58、p><p><b>  wela=1;</b></p><p><b>  P0=0xfe;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><

59、b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x00;</b></p><p><b>  dula=1;</b&g

60、t;</p><p>  P0=tabledu1[fen%10];</p><p>  dula=0; </p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfd;&l

61、t;/b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p>&

62、lt;p><b>  wela=0;</b></p><p><b>  P0=0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[miao/10];</p><p><b>  dula=0;<

63、;/b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfb;</b></p><p><b>  wela=0;</b></p>&l

64、t;p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><b>  P0=

65、0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[miao%10];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p>&l

66、t;p><b>  wela=1;</b></p><p><b>  P0=0xf7;</b></p><p><b>  wela=0;</b></p><p>  delay(1);</p><p><b>  }</b></p&g

67、t;<p>  上面是時鐘顯示對應(yīng)數(shù)碼管顯示函數(shù)的代碼,對段選P0口和位選P2口的處理就可以實現(xiàn)要顯示的分值。</p><p>  5.2.5音樂鈴聲之程序</p><p>  void song()</p><p><b>  {</b></p><p><b>  uint i;</b

68、></p><p><b>  uchar j;</b></p><p><b>  i=0;</b></p><p><b>  EX0=1;</b></p><p><b>  IT0=1;</b></p><p>  w

69、hile(f[i]!=0xff&&flag==0)</p><p><b>  {</b></p><p>  N=500000/f[i];</p><p>  Timer1_H=(65536-N)/256;</p><p>  Timer1_L=(65536-N)%256;</p><

70、;p>  TH1=Timer1_H;//賦值定時器時間,決定頻率</p><p>  TL1=Timer1_L;</p><p><b>  TR1=1;</b></p><p>  第6章 硬件系統(tǒng)的制作與調(diào)試</p><p>  6.1 系統(tǒng)調(diào)試方法</p><p> ?。?)打開電路

71、仿真的應(yīng)用程序ISIS Professional,在其中選擇該設(shè)計所需的的單片機或是元件,然后將其放置到要畫圖的區(qū)域中,你可以雙擊該元件改變它相應(yīng)的屬性及參數(shù)。</p><p>  2、用帶電氣性的連接線來連接各個元件,從而構(gòu)成了完整的電路圖并保存在為.DSN為后綴名的文件,放在你所需的地方。</p><p>  3、打開程序仿真或調(diào)試應(yīng)用程序Keil uVision2, 首先要建一個工程

72、,再將程序添加到該工程中,再保存。</p><p>  4、再進行程序的編譯與連接,檢查程序是否正確,如果不正確,則進行分析直到正確為止;如果正確,則可以生成.hex文件。</p><p>  5、點擊project菜單,選擇options for target項或是直接點擊常用工具欄中的圖標(biāo)打開對話框進行設(shè)置, 則就可以生成.hex文件了。</p><p>  6

73、、再打開電路仿真的應(yīng)用程序ISIS Professional,然后雙擊該電路圖中的主的單片機,同時彈出一個對話框,在對話框中進行選擇所生成的.hex文件,并還可以進行單片機的頻率設(shè)置,再單擊確定。仿真圖見-附錄二</p><p>  7、點擊運行檢查是否可以運行正確單片機語言程序是基于Keil uVision2編程軟件編寫的匯編程序。在keil內(nèi)建立工程后建立匯編文件,編寫MCS-51程序,進過不斷對程序的更改和

74、調(diào)試。最后生成我們想要的HEX文件,再用單片機程序下載軟件STC_ISP_V3.1進行對十六進制的可下載文件進行下載到單片機上,將運行結(jié)果和實驗現(xiàn)象與預(yù)定效果進行比較,再反過來對程序進行修改以達到要求。最后經(jīng)過不斷的改進就可以實現(xiàn)設(shè)計的目的。</p><p>  6.2 定時設(shè)置與時鐘顯示</p><p>  下圖5-1是進入系統(tǒng)所拍攝的硬件顯示圖,用它實現(xiàn)了定時音樂器的時間設(shè)定功能。&l

75、t;/p><p>  圖6-1 定時時間設(shè)置為5分鐘時的音樂效果圖</p><p>  圖6-2 正在倒計時工作的音樂器</p><p>  圖6-3 時鐘顯示為19:54:45</p><p><b>  結(jié) 論</b></p><p>  通過這次比較完整的單片機音樂發(fā)生器的設(shè)計,我擺脫了單純的

76、理論知識學(xué)習(xí)狀態(tài),和實際設(shè)計的結(jié)合鍛煉了我的綜合運用所學(xué)的專業(yè)基礎(chǔ)知識,同時也提高我查閱文獻資料、設(shè)計規(guī)范以及電腦畫圖等其他專業(yè)能力水平,而且通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗得到了豐富,并且意志品質(zhì)力。這是我們都希望看到的也正是我們進行畢業(yè)設(shè)計的目的所在。</p><p>  在此次設(shè)計中我學(xué)到了很多東西,包括對單片機的更進一步的認(rèn)識、一些關(guān)于音樂的基礎(chǔ)知識的了解

77、、匯編語言的應(yīng)用的學(xué)習(xí)等等。</p><p>  首先,在這次設(shè)計中,通過上網(wǎng)或、圖書館或是上書店翻閱相關(guān)的單片機資料,同時也在幫同學(xué)查看和解決一些問題(畢業(yè)設(shè)計中的硬件問題)時,更加清楚地認(rèn)識了單片機,讓在我原來的硬件基礎(chǔ)知識的基礎(chǔ)上又認(rèn)識了解幾款單片機(AT89S52)及它的原理。</p><p>  其次,就是在此次設(shè)計中關(guān)系到了音樂的一些基礎(chǔ)知識,音樂是由不同的音符組成,不同的音符

78、對應(yīng)著不同的頻率產(chǎn)生,產(chǎn)生有規(guī)律的頻率樂音。了解音樂的產(chǎn)生,音樂體系中中音高關(guān)系的最小計量單位及音符的定義,同時也知道了音符又分為了以下幾種:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分符。</p><p>  最后,讓我感受最大的是將理論和實踐相結(jié)是要解決很多問題經(jīng)過一定的挫折才能很好的完成任務(wù),因此在其過程中考慮問題時一定要謹(jǐn)慎、全面,出現(xiàn)問題時不應(yīng)該氣餒,要沉著思考或是向同學(xué)、老

79、師請求幫忙。</p><p>  感謝授我業(yè)、解我惑的老師。沒有你們的諄諄教導(dǎo),我就不可能具備扎實的道路與橋梁工程的專業(yè)知識。</p><p><b>  參考文獻</b></p><p>  [1] 樊明龍、任麗靜.《單片機原理與應(yīng)用》.化學(xué)工業(yè)出版社,2001</p><p>  [2] 謝嘉奎.《電子線路》.高等教

80、育出版社,2002</p><p>  [3] 馬家辰、孫玉德.《MCS-51單片機原理及接口技術(shù)》. </p><p>  哈爾濱工業(yè)大學(xué)出版社,2001[4] 李華.《MCS-51單片機接口技術(shù)與運用》.</p><p>  北京航天航空大學(xué)出版社,2003[5] 胡漢才.《單片機接口技術(shù)與運用》.清華大學(xué)出版社,2001</p><p&

81、gt;  [6] 何立民.《單片機高級教程》.北京航空航天大學(xué)出版社,2001 </p><p>  [7] 趙曉安.《MCS-51單片機原理及應(yīng)用》.天津大學(xué)出版社,2001.3 </p><p>  [8] 李廣第.《單片機基礎(chǔ)》.北京航空航天大學(xué)出版社,1999 </p><p>  [9] 徐惠民、安德寧.《單片微型計算機原理接口與應(yīng)用》. </p&g

82、t;<p>  北京郵電大學(xué)出版社,1996 </p><p>  [10] 夏繼強.《單片機實驗與實踐教程》.北京航空航天大學(xué)出版社,2001 </p><p><b>  附錄一-源程序</b></p><p>  #include <REG52.H></p><p>  #define u

83、int unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit key1=P3^4;</p><p>  sbit key2=P3^5;</p><p>  sbit key3=P3^6;</p><p>  sbit key4=P3^7;&l

84、t;/p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit beep=P1^2; //將beep位定義為P3.7</p><p>  uint N; //儲存定時器的定時常數(shù)</p><p>  uint Timer1_H,Timer1

85、_L;</p><p>  uchar hour,min,sec,num,fen,t2;</p><p>  uchar fen,miao,num,num1,flag,num2,t1,date;</p><p>  uchar key2_scan();</p><p>  uchar code tabledu[]= //不帶小數(shù)點的數(shù)碼管段

86、</p><p>  {0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71};</p><p>  uchar code tabledu1[]=

87、 //帶小數(shù)點的數(shù)碼管段</p><p>  {0xbf,0x86,0xdb,0xcf,</p><p>  0xe6,0xed,0xfd,0x87,</p><p>  0xff,0xef,0xf7,0xfc,</p><p>  0x39,0x5e,0x79,0x71};</p><p>  //以下是C調(diào)低音的音

88、頻宏定義</p><p>  #define L1 262 //將"L1"宏定義為低音"1"的頻率262Hz時間是1/262=3826/2 us 取半周期</p><p>  #define L2 286 //將"L2"宏定義為低音"2"的頻率286Hz</p><

89、p>  #define L3 311 //將"L3"宏定義為低音"3"的頻率311Hz</p><p>  #define L4 349 //將"L4"宏定義為低音"4"的頻率349Hz</p><p>  #define L5 392 //將"L5"宏定義為低

90、音"5"的頻率392Hz</p><p>  #define L6 440 //將"l_a"宏定義為低音"6"的頻率440Hz</p><p>  #define L7 494 //將"L7"宏定義為低音"7"的頻率494Hz</p><p>  //

91、以下是C調(diào)中音的音頻宏定義</p><p>  #define Z1 523 //將"Z1"宏定義為中音"1"的頻率523Hz</p><p>  #define Z2 587 //將"Z2"宏定義為中音"2"的頻率587Hz</p><p>  #define Z3

92、 659 //將"Z3"宏定義為中音"3"的頻率659Hz</p><p>  #define Z4 698 //將"Z4"宏定義為中音"4"的頻率698Hz</p><p>  #define Z5 784 //將"Z5"宏定義為中音"5"

93、的頻率784Hz</p><p>  #define Z6 880 //將"Z6"宏定義為中音"6"的頻率880Hz</p><p>  #define Z7 987 //將"Z7"宏定義為中音"7"的頻率523H </p><p>  //以下是C調(diào)高音的

94、音頻宏定義</p><p>  #define H1 1046 //將"H1"宏定義為高音"1"的頻率1046Hz</p><p>  #define H2 1174 //將"H2"宏定義為高音"2"的頻率1174Hz</p><p>  #define H3 1318

95、 //將"H3"宏定義為高音"3"的頻率1318Hz</p><p>  #define H4 1396 //將"H4"宏定義為高音"4"的頻率1396Hz</p><p>  #define H5 1567 //將"H5"宏定義為高音"5"的頻率1

96、567Hz</p><p>  #define H6 1760 //將"H6"宏定義為高音"6"的頻率1760Hz</p><p>  #define H7 1975 //將"H7"宏定義為高音"7"的頻率1975Hz</p><p>  uint code f[]= /

97、/音符表</p><p>  {/**/ Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,/**/Z6,Z5,Z6,H1,/**/Z5,0x00,Z3,Z3,/**/Z4,Z3,Z4,H1,/**/</p><p>  /**/Z3,0x00,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,0,Z6,Z7,/**/H1,Z7,H1,H3,/**/

98、Z7,0,Z3,Z3,/**/Z6,Z5,Z6,H1,/**/</p><p>  /**/Z5,0x00,Z3,/**/Z4,H1,Z7,Z7,H1,/**/H2,H2,H3,H1,0,/**/H1,Z7,Z6,Z6,Z7,Z5,/**/Z6,0,H1,H2,/**/H3,H2,H3,H5,/**/</p><p>  /**/H2,0,Z5,Z5,/**/H1,Z7,H1,Z3,/**

99、/H3,0,0,/**/Z6,Z7,H1,Z7,H2,H2,/**/H1,Z5,Z5,0,/**/H4,H3,H2,H1,/**/</p><p>  /**/H3,/**/H3,0,H3,/**/H6,H5,H5,/**/H3,H2,H1,0,H1,/**/H2,H1,H2,H2,H5,/**/H3,0,H3,/**/</p><p>  /**/H6,H5,/**/H3,H2,H1,0

100、,H1,/**/H2,H1,H2,H2,Z7,/**/Z6,0,Z6,Z7,/**/Z6,/**/0Xff</p><p><b>  };</b></p><p>  uint code jp[]=</p><p>  {/**/ 2,2,/**/6,2,4,4,/**/12,2,2,/**/6,2,4,4,/**/8,4,2,

101、2,/**/6,2,2,6,/**/</p><p>  /**/8,2,2,2,2,/**/6,2,4,4,/**/8,4,2,2,/**/6,2,4,4,/**/8,4,2,2,/**/6,2,4,4,/**/</p><p>  /**/12,2,2,/**/4,2,2,4,4,/**/2,2,2,4,4,/**/4,2,2,2,4,4,/**/8,4,2,2,/**/6,2,4,4

102、,/**/</p><p>  /**/8,2,4,4,/**/2,2,4,4,/**/8,4,4,/**/2,2,4,4,2,2,/**/6,2,4,4,/**/4,4,4,4,/**/</p><p>  /**/16,/**/8,4,4,/**/8,4,4,/**/2,2,4,2,2,/**/4,2,2,2,4,/**/8,4,4,/**/</p><p> 

103、 /**/8,8,/**/2,2,8,2,2,/**/4,2,2,2,4,/**/8,4,2,2,/**/16,</p><p><b>  };</b></p><p><b>  /*延時函數(shù)*/</b></p><p>  /*void delay(unsigned char time)</p><

104、;p><b>  {</b></p><p>  unsigned char t1;</p><p>  unsigned long t2;</p><p>  for(t1=0;t1<time;t1++) // t or time</p><p><b>  {</b></p

105、><p>  for(t2=0;t2<8000;t2++)//對于12MHz的時鐘,延時為125ms(1/4節(jié)拍)</p><p><b>  {}</b></p><p><b>  }</b></p><p><b>  }*/</b></p><p&

106、gt;  void dingshi_display(uchar fen,uchar miao); </p><p>  //延時函數(shù)125ms</p><p>  void delay_125()</p><p><b>  {</b></p><p><b>  ui

107、nt x,y;</b></p><p>  for(x=124;x>0;x--)</p><p>  for(y=125;y>0;y--);</p><p><b>  }</b></p><p>  void delay(uint z) //延時1ms的函數(shù)</p><p&

108、gt;<b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p>

109、<p>  void dingshi_display(uchar fen,uchar miao)</p><p><b>  {</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><

110、;b>  wela=0;</b></p><p><b>  P0=0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[fen/10];</p><p><b>  dula=0;</b></

111、p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfe;</b></p><p><b>  wela=0;</b></p><p><b

112、>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x00;</b&

113、gt;</p><p><b>  dula=1;</b></p><p>  P0=tabledu1[fen%10];</p><p>  dula=0; </p><p><b>  P0=0xff;</b></p><p><b>  wela=1;<

114、;/b></p><p><b>  P0=0xfd;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p>&

115、lt;p><b>  P0=0xff;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[m

116、iao/10];</p><p><b>  dula=0;</b></p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfb;</b></p>&

117、lt;p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  we

118、la=0;</b></p><p><b>  P0=0x00;</b></p><p><b>  dula=1;</b></p><p>  P0=tabledu[miao%10];</p><p><b>  dula=0;</b></p>&l

119、t;p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xf7;</b></p><p><b>  wela=0;</b></p><p>  delay(1);&l

120、t;/p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b><

121、/p><p><b>  hour=0;</b></p><p><b>  min=0;</b></p><p><b>  sec=0;</b></p><p><b>  fen=5;</b></p><p><b> 

122、 miao=0;</b></p><p><b>  num2=1;</b></p><p><b>  flag=0;</b></p><p>  TMOD=0X11;//設(shè)定定時器的工作方式</p><p>  TH0=(65536-50000)/256;//定時50ms</p

123、><p>  TL0=(65536-50000)%256;</p><p>  TH1=(65536-50000)/256;</p><p>  TL1=(65536-50000)%256;</p><p>  EA=1;//開總中斷</p><p>  ET0=1;//開定時中斷</p><p>

124、  //TR0=1;//啟動定時器0</p><p>  ET1=1;//開定時中斷</p><p>  TR1=0;//啟動定時器0</p><p><b>  }</b></p><p>  void time_1(void) interrupt 3 </p><p><b>  

125、{</b></p><p>  TR1=0; </p><p>  beep=~beep;</p><p>  TH1=Timer1_H;</p><p>  TL1=Timer1_L;</p><p>  TR1=1;</p><p><b>  }&l

126、t;/b></p><p>  void time0() interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  

127、t1++;</b></p><p>  if(t1==20) //當(dāng)?shù)绞?S時,</p><p><b>  {</b></p><p>  t1=0;//清零,從新開始計算</p><p>  if(miao==0&&fen!=0)//當(dāng)?shù)绞?分時,</p><p>

128、<b>  {</b></p><p>  miao=59;//秒鐘到最大值</p><p>  fen--;//分鐘減1</p><p><b>  }</b></p><p>  else if(miao==0&&fen==0)</p><p><

129、b>  {</b></p><p><b>  TR0=0; </b></p><p><b>  }</b></p><p><b>  else</b></p><p>  miao--;//秒鐘減1</p><p><b

130、>  }</b></p><p><b>  }</b></p><p>  uchar key1_scan()//掃描選擇定時的大小</p><p><b>  {</b></p><p>  if(key1==0) //有按鍵按下</p><p>

131、<b>  {</b></p><p>  delay(5); //延時一下去抖</p><p>  if(key1==0)//確實是有按鍵按下</p><p><b>  {</b></p><p>  while(key1!=1);//松手有效</p><p>  

132、delay(5); //松手延時去抖</p><p>  if(key1==1) //確實是松手了</p><p><b>  num++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

133、t;  return num;</p><p><b>  }</b></p><p>  void scan() //工作掃描</p><p><b>  {</b></p><p>  if(key2==0) //有按鍵按下</p><p><b> 

134、 {</b></p><p>  delay(5); //延時一下去抖</p><p>  if(key2==0)//確實是有按鍵按下</p><p><b>  {</b></p><p>  while(key2!=1);//松手有效</p><p>  delay(5);

溫馨提示

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

評論

0/150

提交評論