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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  課 程 設(shè) 計(jì)</p><p>  課程名稱(chēng) 單片機(jī)原理與應(yīng)用 </p><p>  課題名稱(chēng) 音樂(lè)提示定時(shí)器 </p><p>  專(zhuān) 業(yè) 自 動(dòng) 化 </p><p>  班 級(jí) </p&

2、gt;<p>  學(xué) 號(hào) </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章 音樂(lè)基礎(chǔ)知識(shí)8</p><p>  2.1 音樂(lè)基礎(chǔ)8</p><p>  2.2 音頻脈沖和音樂(lè)節(jié)拍的實(shí)現(xiàn)8</p><p>  第3章 總體方案設(shè)計(jì)11</p><p>  3.1設(shè)計(jì)任務(wù)與要求11<

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

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

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

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

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

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

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

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

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

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

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

15、延時(shí)設(shè)為0.2s,則1拍的時(shí)間為0.8s,依次類(lèi)推,可以求出其余節(jié)拍的值,節(jié)拍的延時(shí)時(shí)間與音樂(lè)的曲調(diào)值有相對(duì)應(yīng)的關(guān)系,下面為不同曲調(diào)下的1/4和1/8節(jié)拍的時(shí)間設(shè)定,如下表2-2所示。</p><p>  表2-2 不同曲調(diào)下1/4和1/8節(jié)拍的延時(shí)表</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è)計(jì)</p><p>  3.1設(shè)計(jì)任務(wù)與要求</p><p><b>  3.1.1設(shè)計(jì)任務(wù)</b></p><p>  設(shè)計(jì)一定時(shí)音樂(lè)發(fā)生器:</p><p> ?。?)用單片機(jī)作為開(kāi)發(fā)工具,能自定義倒計(jì)時(shí)時(shí)間、能儲(chǔ)存樂(lè)曲;</p&g

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

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

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

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

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

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

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

26、通用8位中央處理器(CPU)和Flash存儲(chǔ)單元,功能強(qiáng)大AT89C52單片機(jī)適合于許多較為復(fù)雜控制應(yīng)用場(chǎ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、可重擦寫(xiě)Flash閃速存儲(chǔ)器</p><p><b>  1000次擦寫(xiě)周期</b></p><p>  全靜態(tài)操作:0Hz—24MHz</p><p><b>  三級(jí)加密程序存儲(chǔ)器</b></p><p>  256×8字節(jié)內(nèi)部RAM</p><p>  32個(gè)

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

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

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

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

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

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

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

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

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

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

38、有:初始化模塊、按鍵判斷模塊、數(shù)碼管顯示模塊、延時(shí)模塊組成。程序設(shè)計(jì)的流程圖如下圖5-1所示。</p><p><b>  N</b></p><p><b>  Y</b></p><p>  圖5-1 軟件設(shè)計(jì)的流程圖</p><p>  5.2各子程序設(shè)計(jì) </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è)定定時(shí)器的工作方式</p><p>  TH0=(65536-50000)

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

43、t;/p><p>  //TR0=1;//啟動(dòng)定時(shí)器0</p><p>  ET1=1;//開(kāi)定時(shí)中斷</p><p>  TR1=0;//啟動(dòng)定時(shí)器0</p><p><b>  }</b></p><p>  uchar code tabledu[]= //不帶小數(shù)點(diǎn)的數(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ù)點(diǎn)的

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>  初始化程序是用來(lái)對(duì)各定義的變量初始化的

46、,每一次主程序執(zhí)行之前都要先執(zhí)行初始化程序以保證變量的值為初值。</p><p>  5.2.2 延時(shí)子程序</p><p><b>  /*延時(shí)函數(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++)//對(duì)于12MHz的時(shí)鐘,延時(shí)為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í)函數(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) //延時(shí)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>  這個(gè)延時(shí)程序設(shè)計(jì)是在硬件調(diào)試過(guò)程中更改數(shù)據(jù)得來(lái)的,不同的硬件延時(shí)應(yīng)選擇適合的延時(shí)時(shí)間。延時(shí)程序延時(shí)時(shí)間計(jì)算式:1T+1T+((2T*

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

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

54、 //松手延時(shí)去抖</p><p>  if(key1==1) //確實(shí)是松手了</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>  這里只是按鍵選擇程序,實(shí)際上轉(zhuǎn)移到各自的處理程序中就有按鍵的消抖處理和對(duì)應(yīng)按鍵信號(hào)所要執(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>  上面是時(shí)鐘顯示對(duì)應(yīng)數(shù)碼管顯示函數(shù)的代碼,對(duì)段選P0口和位選P2口的處理就可以實(shí)現(xiàn)要顯示的分值。</p><p>  5.2.5音樂(lè)鈴聲之程序</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;//賦值定時(shí)器時(shí)間,決定頻率</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> ?。?)打開(kāi)電路

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

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

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

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

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

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

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

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

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

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

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

82、t;<p>  北京郵電大學(xué)出版社,1996 </p><p>  [10] 夏繼強(qiáng).《單片機(jī)實(shí)驗(yàn)與實(shí)踐教程》.北京航空航天大學(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; //儲(chǔ)存定時(shí)器的定時(shí)常數(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ù)點(diǎn)的數(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ù)點(diǎn)的數(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時(shí)間是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í)函數(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++)//對(duì)于12MHz的時(shí)鐘,延時(shí)為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í)函數(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) //延時(shí)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è)定定時(shí)器的工作方式</p><p>  TH0=(65536-50000)/256;//定時(shí)50ms</p

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

124、  //TR0=1;//啟動(dòng)定時(shí)器0</p><p>  ET1=1;//開(kāi)定時(shí)中斷</p><p>  TR1=0;//啟動(dòng)定時(shí)器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時(shí),</p><p><b>  {</b></p><p>  t1=0;//清零,從新開(kāi)始計(jì)算</p><p>  if(miao==0&&fen!=0)//當(dāng)?shù)绞?分時(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()//掃描選擇定時(shí)的大小</p><p><b>  {</b></p><p>  if(key1==0) //有按鍵按下</p><p>

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

132、delay(5); //松手延時(shí)去抖</p><p>  if(key1==1) //確實(shí)是松手了</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); //延時(shí)一下去抖</p><p>  if(key2==0)//確實(shí)是有按鍵按下</p><p><b>  {</b></p><p>  while(key2!=1);//松手有效</p><p>  delay(5);

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論