版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂提示定時器--單片機課程設(shè)計
- 音樂倒數(shù)定時器課程設(shè)計
- 音樂提示定時器單片機原理與應(yīng)用課程設(shè)計
- 基于單片機匯編編程的音樂提示定時器課程設(shè)計報告
- 30秒定時器課程設(shè)計報告
- 微機原理課程設(shè)計—— 定時器系統(tǒng)
- 可編程定時器課程設(shè)計--- 寬范圍可編程定時器
- 數(shù)顯定時器課程設(shè)計報告
- 單片機課程設(shè)計--秒表定時器
- 單片機課程設(shè)計--定時器實驗
- 單片機課程設(shè)計---加熱定時器
- 單片機課程設(shè)計智能定時器
- 數(shù)電實驗課程設(shè)計--數(shù)字定時器
- 30秒定時器 非常詳細(xì) 論文 課程設(shè)計
- 單片機經(jīng)典數(shù)字定時器課程設(shè)計
- 使用定時器延時單片機課程設(shè)計報告
- 電子定時器-單片機原理及應(yīng)用課程設(shè)計
- 課程設(shè)計說明書-洗衣機定時器
- arm課程設(shè)計報告--使用中斷定時器設(shè)計時鐘
- 基于單片機的9h定時器課程設(shè)計
評論
0/150
提交評論