單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)_第1頁
單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)_第2頁
單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)_第3頁
單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)_第4頁
單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、-1. 基于單片機(jī)音樂倒數(shù)定時(shí)器的設(shè)計(jì)報(bào)告2. 【摘要】計(jì)時(shí)器在單片機(jī)模塊中是比較常見的模塊,計(jì)時(shí)器是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)的計(jì)時(shí)裝置,與機(jī)械師中相比具有更高的準(zhǔn)確性與直觀性,且無機(jī)械裝置,具有更長的使用壽命,因此得到了廣泛的使用。本設(shè)計(jì)采用AT89C51單片機(jī)對定時(shí)器的設(shè)計(jì)來實(shí)現(xiàn)一個(gè)簡單的多功能的音樂倒計(jì)時(shí)報(bào)警器,通過三個(gè)按鍵可設(shè)定任意時(shí)間的倒計(jì)時(shí)報(bào)警器來滿足用戶的簡單要求,如燒開水,煮面等簡單問題。3. 【關(guān)鍵詞】定時(shí)計(jì)數(shù)器;音樂代碼;1602液晶顯示. z-4. 目錄5. 引言16. 一、設(shè)計(jì)要求27. 二、設(shè)計(jì)目的28. 三、設(shè)計(jì)的具體實(shí)現(xiàn)28.1. 1系統(tǒng)概述28.1.1. 1.1

2、總體方案論證28.1.2. 1.2 單片機(jī)選擇方案38.2. 2單元電路設(shè)計(jì)48.2.1. 2.1控制電路68.2.2. 2.2控制程序88.3. 3軟件程設(shè)計(jì)和調(diào)試78.3.1. 3.1延時(shí)時(shí)間的計(jì)算78.3.2. 3.2工作方式設(shè)計(jì)88.3.3. 3.3有定時(shí)器產(chǎn)生各種頻率的聲音88.3.4. 3.4程序說明89. 四、結(jié)論和展望1410. 五、心得和體會1411. 六、參考文獻(xiàn)1512. 引言12.1. 隨著電子技術(shù)的飛速開展,各類分立電子元件及其所構(gòu)成的相關(guān)功能單元,已逐步被功能更強(qiáng)大、性能更穩(wěn)定、使用更方便的集成芯片所取代。由集成芯片和一些外圍電路構(gòu)成的各種自動控制、自動報(bào)警、自動顯

3、示電路普及各種電子產(chǎn)品和設(shè)備。數(shù)字系統(tǒng)和數(shù)字設(shè)備已廣泛應(yīng)用于各個(gè)領(lǐng)域,更新?lián)Q代速度可謂日新月異。12.2. 計(jì)時(shí)器在單片機(jī)模塊中是比較常見的模塊,計(jì)時(shí)器是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)的計(jì)時(shí)裝置,與機(jī)械師中相比具有更高的準(zhǔn)確性與直觀性,且無機(jī)械裝置,具有更長的使用壽命,因此得到了廣泛的使用,本次設(shè)計(jì)的任意時(shí)間倒計(jì)時(shí)器,是基于單片機(jī)的根底,日常生活中相關(guān)的設(shè)備是很多的,諸如定時(shí)報(bào)警、報(bào)時(shí)自動打鈴、時(shí)間程序自動控制、定時(shí)播送、自動閉路燈等都是以計(jì)時(shí)器為根底的。12.3. 通過對基于單片機(jī)控制的倒數(shù)計(jì)時(shí)器的設(shè)計(jì)過程中,讓自己對單片機(jī)有進(jìn)一步的了解,激發(fā)興趣,做到主動探索和學(xué)習(xí)。13. 設(shè)計(jì)要求13.1. 利

4、用單片機(jī)結(jié)合LCD顯示器設(shè)計(jì)一個(gè)倒數(shù)計(jì)時(shí)器,可以放在家中使用,例如煮方便面、煮開水或小睡片刻等,做一小段時(shí)間計(jì)時(shí)。當(dāng)?shù)箶?shù)計(jì)時(shí)為0時(shí),則發(fā)出一段音樂,通知倒數(shù)終了,該做重要的事情了。13.2. 具體要求:13.3. 文字型LCD16*2顯示目前倒數(shù)的時(shí)間;顯示格式為“COUNT DOWN時(shí)時(shí): 分分:秒秒;具有3個(gè)按鍵操作來設(shè)置現(xiàn)在想要倒數(shù)的時(shí)間;一旦按鍵后則開場倒數(shù)計(jì)時(shí),當(dāng)計(jì)時(shí)為零則發(fā)出一陣音樂聲響,程序開場執(zhí)行,顯示器顯示“0009,按下操作鍵S1S3動作如下:操作鍵S1,可調(diào)整倒數(shù)時(shí)間時(shí)分秒;操作鍵S2,設(shè)置倒數(shù)計(jì)時(shí)時(shí)間為上升,顯示“增加;操作鍵S3,設(shè)置倒數(shù)計(jì)時(shí)時(shí)間為下降,顯示“減少;R

5、ESET按下后顯示如下:13.3.1. COUNT DOWN 13.3.2. 00:00:09ß倒數(shù)時(shí)間14. 操作鍵S2:增加倒數(shù)計(jì)時(shí),操作鍵S3,減少倒數(shù)計(jì)時(shí),操作鍵S1按第四下設(shè)置完成。一旦按鍵后則開場倒數(shù)計(jì)時(shí),當(dāng)計(jì)時(shí)為0時(shí)則發(fā)出一段音樂。 15. 設(shè)計(jì)目的15.1. 通過該設(shè)計(jì)能提高學(xué)生分析解決問題的能力。15.2. 了解模擬電路及數(shù)字電路的相關(guān)知識。15.3. 學(xué)習(xí)單片機(jī)定時(shí)器時(shí)間計(jì)時(shí)處理、按鍵掃描、LCD顯示及音樂旋律演奏的設(shè)計(jì)方法。16. 設(shè)計(jì)的具體實(shí)現(xiàn)16.1.1. 系統(tǒng)概述16.2. 總體方案論證16.3. 要實(shí)現(xiàn)音樂倒數(shù)定時(shí)器可以用兩種方案實(shí)現(xiàn)。17. 方案一:利

6、用PROG-110可編程控制器17.1. PROG-110 可編程器,是一種用?數(shù)字簡碼?控制的產(chǎn)品,它的特點(diǎn)是:自帶一套用于輸入數(shù)碼的按鍵和顯示程序的數(shù)碼管,只要我們現(xiàn)場輸入一列2位數(shù)碼,編制的程序即能完成,即編,即用。每一種?數(shù)字簡碼?控制器,它都自帶一套系統(tǒng)軟件,每一套系統(tǒng)軟件都有一套相對應(yīng)的指令表,配套的指令表說明,只要輸入什么樣的數(shù),程序?qū)⑷プ鍪裁词?,輸入一列?shù),它就會按次序去完成你要求它做的所有的事。17.2. 但是首先PROG-110模塊總共只有6個(gè)I/O端口,這就必須擴(kuò)展模塊端口,用兩部以上模塊串聯(lián),但花錢要多;其次是程序過長,PROG-110模塊的E2PROM存儲器24C01

7、只可輸入128步程序;第三是受PROG-110模塊跳轉(zhuǎn)指令步數(shù)的限制。18. 方案二:利用單片機(jī)、LCD顯示器和壓電喇叭18.1. 單片機(jī)具有性能高、速度快、體積小、價(jià)格低、穩(wěn)定可靠、應(yīng)用廣泛、通用性強(qiáng)等突出優(yōu)點(diǎn)。它在硬件構(gòu)造、指令系統(tǒng)、I/O端口、功率消耗及可靠性等方面均有其獨(dú)特之處,其最顯著的特點(diǎn)之一就是具有非常有效的控制功能。而LCD顯示器具有體積小、重量輕、工作電壓低、功耗極低、顯示容豐富、穩(wěn)定可靠、本錢低、控制驅(qū)動方便、接口簡單易用、模塊化構(gòu)造緊湊等特點(diǎn)。18.2. 綜上所述,按照設(shè)計(jì)要求我選擇第二種方案,即利用單片機(jī)和LCD顯示器來實(shí)現(xiàn)定時(shí)倒數(shù),通過壓電喇叭來發(fā)出音樂。18.3.

8、單片機(jī)選擇方案18.4. 采用8051單片機(jī)18.5. 8051單片機(jī)部包含一個(gè)8位CPU、一個(gè)片振蕩器及時(shí)鐘電路、ROM程序存儲器、RAM數(shù)據(jù)存儲器、兩個(gè)16位定時(shí)器/計(jì)數(shù)器、可分別尋址64KB的程序存儲器空間和64KB的數(shù)據(jù)存儲器空間、32條可編程的I/O口線(4個(gè)8位并行I/O端口)、一個(gè)可編程全雙工串行口、具有5個(gè)中斷源和2個(gè)優(yōu)先級的中斷構(gòu)造??梢杂行?shí)現(xiàn)本次設(shè)計(jì)中要求的各項(xiàng)功能。18.6. 具體的設(shè)計(jì)流程可見圖1:主程序開場初始化變量及LCD接口初始化定時(shí)器LCD閃動表示程序開場執(zhí)行LCD掃描顯示器更新倒數(shù)時(shí)間數(shù)據(jù),檢查鬧鈴時(shí)間是否到了是否按K1,K2,K3鍵S1:調(diào)整倒數(shù)時(shí)間S2:

9、倒數(shù)計(jì)時(shí)時(shí)間加S3:倒數(shù)計(jì)時(shí)時(shí)間減YN19. 圖1設(shè)計(jì)流程圖19.1.1. 單元電路設(shè)計(jì)19.1.2. 2.1控制電路19.2. 倒數(shù)計(jì)數(shù)器的控制電路可以見附圖,其中主要分為以下幾局部19.2.1.1. 單片機(jī)805119.3. 8051 根本資料如下:20. 圖2 8051引腳圖20.1. 8051主要使用引腳功能說明如下:21. 8051的引腳40接+5V電源,引腳20接電源地線。22. 傳統(tǒng)8051工作時(shí)鐘的最高為12MHz。23. EA引腳低電平動作用來存取外部程序ROM控制。24. EA接地,由外部程序ROM來執(zhí)行程序。25. EA接高電平,由部ROM來執(zhí)行程序。26. 開機(jī)時(shí)必須參

10、加芯片重置信號。RESET27. RESET信號高電平動作,高電平時(shí)產(chǎn)生芯片重置。28. RESET信號低電平時(shí),由程序ROM地址0開場執(zhí)行程序。28.1. 在本次設(shè)計(jì)中采用的8051外接電路如圖3所示:28.2. 圖3 8051外接電路圖28.3. 8051系列的單片機(jī)的時(shí)鐘方式分為部方式和外部方式。部方式就是在單片機(jī)的引腳18、19外接晶振,就夠成了自激振蕩器在單片機(jī)部產(chǎn)生時(shí)鐘脈沖信號。外部時(shí)鐘方式是把外部已經(jīng)有的時(shí)鐘信號引入到單片機(jī)部。時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的根底。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號

11、,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間。28.4. 用一個(gè)12MHz晶振和兩個(gè)30Pf瓷片電容組成,為單片機(jī)提供標(biāo)準(zhǔn)時(shí)鐘,其中兩個(gè)瓷片電容可以增加電路的穩(wěn)定性,可以抗噪聲增加穩(wěn)定性,不容易死機(jī)。28.5. 在8051中之所以采用高性能的振蕩電路,因?yàn)椋?8.5.1.1.1. 單片機(jī)電子鐘的計(jì)時(shí)脈沖基準(zhǔn)是由外部晶振的頻率經(jīng)過12分頻后提供,采用部的定時(shí)/計(jì)數(shù)器來實(shí)現(xiàn)計(jì)時(shí)功能。所以,外接晶振頻率準(zhǔn)確度直接影響電子鐘計(jì)時(shí)的準(zhǔn)確性。 28.5.1.1.2. 單片機(jī)電子鐘利用部定時(shí)/計(jì)數(shù)器溢出產(chǎn)生中斷12M晶振一般為50ms再乘以相應(yīng)的

12、倍率來實(shí)現(xiàn)秒、分、時(shí)的轉(zhuǎn)換。大家都知道從定時(shí)/計(jì)數(shù)器產(chǎn)生中斷請求到響 應(yīng)中斷需要3-8個(gè)機(jī)器周期,定時(shí)中斷子程序中的數(shù)據(jù)入棧和重裝定時(shí)/計(jì)數(shù)器的初值還需要占用數(shù)個(gè)機(jī)器周期,還有從中斷入口轉(zhuǎn)到中斷子程序也要占用一定的機(jī)器周期。28.5.1.2. 復(fù)位電路28.6. 圖4 單片機(jī)復(fù)位電路28.7. 本次設(shè)計(jì)使用的倒數(shù)計(jì)時(shí)LCD控制,使用的是16字*2行設(shè)計(jì)。圖4中為4位控制電路,以8051 P0的6調(diào)輸出控制線來實(shí)現(xiàn)控制,P0還有提升電阻以增強(qiáng)其驅(qū)動能力,控制信號如下:R/W=0,LCD執(zhí)行寫入的動作,RS存放器選擇控制線。EN啟用控制線。VO亮度調(diào)整控制引腳。D0D7雙向的數(shù)據(jù)總線。必須在有亮度

13、照明的地方,才能看見時(shí)間,假設(shè)使用LCD,選擇有背光顯示的模塊,則在夜晚或黑暗的場合也可以使用,有背光顯示的LCD模塊在引腳上,與無背光顯示的模塊兼容,指示價(jià)格較貴,一般顯示的背光顏色為黃光,與手機(jī)的背光顏色相似。28.7.1.1. 按鍵控制28.8. 按鍵控制室控制程序執(zhí)行時(shí)數(shù)據(jù)的輸入或是特殊功能的設(shè)置及操作,使用8051端口2的4條輸入口,由程序來控制,平時(shí)輸入端為高電平,當(dāng)有按鍵按下則相對位會呈現(xiàn)低電平,進(jìn)過輪流掃描判斷輸入端是否為低電平,便可知道按下的是哪一個(gè)按鈕。28.8.1.1. 音樂喇叭28.9. 8051端口1的第3位是壓電喇叭的驅(qū)動位,持續(xù)送出工作脈沖可以推動喇叭發(fā)出嗶的聲響

14、,當(dāng)工作頻率越高時(shí),聲音越清脆,工作頻率低時(shí),聲音則較消沉。28.9.1.1. 電源輸入28.10. J1為+5V電源輸入,當(dāng)電源參加時(shí)電源指示燈LED將亮起,用哪個(gè)以指示電源供給正常,定時(shí)器在倒數(shù)時(shí)間到后壓電喇叭會發(fā)出音樂旋律,并啟動繼電器使其狀態(tài)為ON,控制繼電器的ON/OFF狀態(tài),可以直接控制家電開關(guān)。28.10.1. 2.2控制程序28.11. 本課程設(shè)計(jì)中,可以學(xué)習(xí)利用單片機(jī)定時(shí)器設(shè)計(jì)時(shí)間計(jì)時(shí)處理,其時(shí)分秒控制,定時(shí)器0計(jì)時(shí)中斷程序每個(gè)5ms中斷一次當(dāng)做一個(gè)計(jì)數(shù),每中斷一次則計(jì)數(shù)加1,當(dāng)計(jì)數(shù)200次時(shí),表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了,假設(shè)計(jì)

15、數(shù)到了則將相關(guān)變量去除為0。單片機(jī)定時(shí)器負(fù)責(zé)定時(shí)的技術(shù),不會因?yàn)榘讣幚矶袛鄷r(shí)間描述的增加,時(shí),分,秒數(shù)據(jù)是存在變量并寫入LCD而顯示相關(guān)時(shí)間的。28.12. 在主控程序循環(huán)中主要工作為掃描是否有按鍵,假設(shè)有按鍵則做相應(yīng)的功能處理,同時(shí)也檢查所倒數(shù)的時(shí)間是否為0,假設(shè)為0表示倒數(shù)的時(shí)間終了,應(yīng)該執(zhí)行想對應(yīng)的工作了,圖為主程序控制工作流程。時(shí)間計(jì)時(shí)處理程序時(shí)等過了1s 后,則更新時(shí)間數(shù)據(jù),將最新剩余倒數(shù)的分秒的時(shí)間數(shù)據(jù)轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù),并顯示在LCD上。程序中如何判斷是否已過了1s.可以設(shè)一舊秒數(shù)變量,當(dāng)新舊秒數(shù)變量不一樣時(shí),則表示已過了1s,要做相關(guān)程序處理了。倒數(shù)計(jì)時(shí)鬧鈴的動作利用時(shí)間計(jì)時(shí)處

16、理來做秒數(shù)倒數(shù),當(dāng)所設(shè)置的時(shí)間為0,壓電喇叭則不斷發(fā)出音樂聲,LED持續(xù)閃動,啟動繼電器,有繼電器可以控制家電開啟或關(guān)閉。28.13. 音樂聲的產(chǎn)生也是有定時(shí)器來產(chǎn)生固定頻率的方波信號推動壓電喇叭,發(fā)出旋律。而定時(shí)器原先已利用設(shè)計(jì)時(shí)間計(jì)時(shí)處理了,怎么能在設(shè)計(jì)來做音樂旋律的控制.在此設(shè)計(jì)定義一個(gè)音樂演奏標(biāo)志,假設(shè)音樂演奏標(biāo)志為0則執(zhí)行中斷程序中計(jì)時(shí)程序的局部程序,假設(shè)音樂演奏標(biāo)志為1則執(zhí)行音樂發(fā)生控制程序。因此只要適當(dāng)?shù)倪\(yùn)用程序設(shè)計(jì)技巧,計(jì)時(shí)中斷程序中可以做許多種不同的工作,而這些工作是需要特定一段時(shí)間久必須要被觸發(fā)而被執(zhí)行的程序。28.14. 倒數(shù)計(jì)數(shù)器控制程序文件名為DSDS.ASM。注意:

17、在程序中128行有以下的指令:28.15. SINCLUDE (DSDS1.ASM); 加載程序一起來匯編及編譯28.16. 表示在主程序DSDS.ASM中還會自動加載另一程序DSDS1.ASM程序一起進(jìn)來匯編及編譯,只是為了方便程序編譯用,一些測試正確的程序代碼可以分別存檔好方便管理,此外整個(gè)程序源代碼長度也不至于太長,不方便編輯。DSDS1.ASM主要的程序代碼功能為以定時(shí)器演奏歌曲旋律的控制。28.16.1. 軟件程設(shè)計(jì)和調(diào)試28.16.2. 3.1延時(shí)時(shí)間的計(jì)算28.17. 假設(shè)我們想設(shè)計(jì)程序執(zhí)行55ms時(shí)間延時(shí),程序可以設(shè)計(jì)如下28.18. /延時(shí)28.19. void delay(

18、uint z)28.20. 28.20.1. uint *,y;28.20.2. for(*=z;*>0;*-)28.20.2.1. for(y=110;y>0;y-);28.21. 28.22. 如果執(zhí)行18次此子程序,則延時(shí)時(shí)間約為1s28.22.1. 3.2工作方式設(shè)計(jì)28.23. 本次設(shè)計(jì)中采用的定時(shí)器模式0來設(shè)計(jì),在此方式中T0、T0可以進(jìn)展13位的計(jì)時(shí),其值保存在兩個(gè)8位的定時(shí)存放器中。28.24. 對于其中任一定時(shí)器,工作時(shí)鐘可以由部或是外部來提供,由C/T位來決定做定時(shí)器還是計(jì)數(shù)器。定時(shí)器的時(shí)鐘為系統(tǒng)工作時(shí)鐘除以12.此次試驗(yàn)中采用12MHz石英震蕩器則產(chǎn)生55ms

19、的計(jì)數(shù)時(shí)間脈沖寬度。本次實(shí)驗(yàn)的定時(shí)器計(jì)時(shí)時(shí)間為1s,因此定時(shí)器0需計(jì)數(shù)5000次,其定時(shí)器初值的加載可以計(jì)算如下:28.25. TH0=(65536-5000)/25628.26. TL1=(65536-5000)%25628.27. 執(zhí)行后的結(jié)果為,產(chǎn)生的脈沖寬度為28.28. T=55ms28.28.1. 3.3有定時(shí)器產(chǎn)生各種頻率的聲音28.29. 我們可以設(shè)定發(fā)音的頻率來改變聲音產(chǎn)生音樂,計(jì)時(shí)時(shí)間長短也是按照發(fā)音的頻率而定的。由頻率值推得定時(shí)器計(jì)數(shù)初值由下關(guān)系式得到:28.30. T=1/f(us) ;方波寬度28.31. Co=(int)t/2 ;定時(shí)器所得計(jì)數(shù)的次數(shù)28.32. T

20、H0=(65536-5000)/256;計(jì)數(shù)初值底字節(jié)28.33. TL1=(65536-5000)%256;計(jì)數(shù)初值高字節(jié)28.34. 軟件的編譯和調(diào)試使用的是KEIL軟件,文件格式是C。28.34.1. 3.4程序說明29. *include<reg51.h>30. *define uchar unsigned char31. *define uint unsigned int32. sbit lcde=P10;33. sbit lcdrs=P11;34. sbit lcdw=P12;35. sbit speaker=P13;36. sbit s1=P30;37. sbit s

21、2=P31;38. sbit s3=P32;39. sbit rd=P37;40. uchar code table=" count down !"41. uchar code table1=" 00:00:09"42. uchar count,s1num;43. static char miao=9,shi=0,fen=0;43.1.1.1. /生日快樂歌的音符頻率表,不同頻率由不同的延時(shí)來決定44. uchar code SONG_TONE=212,212,190,212,159,169,212,212,190,212,142,159,44.1.1.

22、1.1.1. 212,212,106,126,159,169,190,119,119,126,159,142,159,0;45. /uchar code SONG_TONE=212,212,190,212,159,169,0;45.1.1.1. /生日快樂歌節(jié)拍表,節(jié)拍決定每個(gè)音符的演奏長短46. uchar code SONG_LONG=9,3,12,12,12,24,9,3,12,12,12,24,46.1.1.1.1.1. 9,3,12,12,12,12,12,9,3,12,12,12,24,0;47. /uchar code SONG_LONG=9,3,12,12,12,24,0;48

23、. /延時(shí)49. void delay(uint z)50. 50.1. uint *,y;50.2. for(*=z;*>0;*-)50.2.1. for(y=110;y>0;y-);51. 52. void write_(uchar *)53. P2=*;53.1. lcdrs=0;53.2. lcdw=0;53.3. lcde=1;53.4. delay(2);53.5. lcde=0;53.6. lcdw=0;54. 55. void write_date(uchar *)56. 56.1. lcdrs=1;56.2. lcdw=0;56.3. P2=*;57. /dela

24、y(5);57.1. lcde=1;57.2. delay(2);57.3. lcde=0;58. 59. void write_sfm(uchar add,uchar date)60. 60.1. uchar shi,ge;60.2. shi=date/10;60.3. ge=date%10;60.4. write_(0*80+0*40+add);60.5. write_date(0*30+shi);60.6. write_date(0*30+ge);61. 62. /播放函數(shù)63. void PlayMusic()64. uint i=0,j,k;64.1. while(SONG_LONG

25、i!=0|SONG_TONEi!=0)64.1.1. /播放各個(gè)音符,SONG_LONG為拍子長度64.1.1.1. for(j=0;j<SONG_LONGi*20;j+)64.1.1.1.1. 64.1.1.1.1.1. speaker=speaker;64.1.1.1.1.2. /SONG_TONE延時(shí)表決定了每個(gè)音符的頻率64.1.1.1.1.3. for(k=0;k<SONG_TONEi/3;k+);64.1.1.1.2. 64.1.1.2. delay(10);64.1.1.3. i+;64.1.2. 65. 66. void init()67. 67.1. uchar

26、num;67.2. write_(0*38);67.3. write_(0*0c);67.4. write_(0*06);67.5. write_(0*01);67.6. write_(0*80);67.7. for(num=0;num<15;num+)67.7.1. 67.7.1.1. write_date(tablenum);67.7.1.2. delay(5);67.7.2. 67.8. write_(0*80+0*40);67.9. for(num=0;num<12;num+)67.9.1. 67.9.1.1. write_date(table1num);67.9.1.2.

27、 delay(5);67.9.2. 67.10. TMOD=0*01;67.11. TH0=(65536-50000)/256;67.12. TL0=(65536-50000)%256;67.13. EA=1;67.14. ET0=1;67.15. TR0=1;68. 69. void keyscan()70. 71. /rd=0;71.1. if(s1=0)71.2. 71.2.1. delay(5);71.2.2. if(s1=0)71.2.3. s1num+;71.2.3.1. while(!s1);71.2.3.2. if(s1num=1)71.2.3.3. 71.2.3.3.1. T

28、R0=0;71.2.3.3.2. write_(0*80+0*40+10);71.2.3.3.3. write_(0*0f);71.2.3.4. 71.3. 71.3.1.1. if(s1num=2)71.3.1.2. 71.3.1.2.1. write_(0*80+0*40+7);71.3.1.3. 71.3.1.4. if(s1num=3)71.3.1.5. 71.3.1.5.1. write_(0*80+0*40+4);71.3.1.6. 71.3.1.7. if(s1num=4)71.3.1.8. 71.3.1.8.1. s1num=0;71.3.1.8.2. write_(0*0c)

29、;71.3.1.8.3. TR0=1;71.3.1.9. 71.3.2. 71.3.3. if(s1num!=0)71.3.4. 71.3.4.1. if(s2=0)71.3.4.2. 71.3.4.2.1. delay(5);71.3.4.2.2. if(s2=0)71.3.4.2.3. 71.3.4.2.3.1. while(!s2);71.3.4.2.3.2. if(s1num=1)71.3.4.2.3.3. 71.3.4.2.3.3.1. miao+;71.3.4.2.3.3.2. if(miao=60)71.3.4.2.3.3.2.1. miao=0;71.3.4.2.3.3.3.

30、write_sfm(10,miao);71.3.4.2.3.3.4. write_(0*80+0*40+10);71.3.4.2.3.4. 71.3.4.2.3.5. if(s1num=2)71.3.4.2.3.6. 71.3.4.2.3.6.1. fen+;71.3.4.2.3.6.2. if(fen=60)71.3.4.2.3.6.2.1. fen=0;71.3.4.2.3.6.3. write_sfm(7,fen);71.3.4.2.3.6.4. write_(0*80+0*40+7);71.3.4.2.3.7. 71.3.4.2.3.8. if(s1num=3)71.3.4.2.3.9

31、. 71.3.4.2.3.9.1. shi+;71.3.4.2.3.9.2. if(shi=24)71.3.4.2.3.9.2.1. shi=0;71.3.4.2.3.9.3. write_sfm(4,shi);71.3.4.2.3.9.4. write_(0*80+0*40+4);71.3.4.2.3.10. 71.3.4.2.4. 71.3.4.3. 71.3.4.4. if(s3=0)71.3.4.5. 71.3.4.5.1. delay(5);71.3.4.5.2. if(s3=0)71.3.4.5.3. 71.3.4.5.3.1. while(!s3);71.3.4.5.3.2. i

32、f(s1num=1)71.3.4.5.3.3. 71.3.4.5.3.4. /*if(miao=0)71.3.4.5.3.4.1. 71.3.4.5.3.4.1.1. miao=59;71.3.4.5.3.4.1.2. write_sfm(10,miao);71.3.4.5.3.4.1.3. write_(0*80+0*40+10);71.3.4.5.3.4.2. */71.3.4.5.3.4.3. miao-;71.3.4.5.3.4.4. if(miao=-1)71.3.4.5.3.4.4.1. miao=59;71.3.4.5.3.4.5. write_sfm(10,miao);71.3

33、.4.5.3.4.6. write_(0*80+0*40+10);71.3.4.5.3.5. 71.3.4.5.3.6. if(s1num=2)71.3.4.5.3.7. 71.3.4.5.3.7.1. fen-;71.3.4.5.3.7.2. if(fen=-1)71.3.4.5.3.7.2.1. fen=59;71.3.4.5.3.7.3. write_sfm(7,fen);71.3.4.5.3.7.4. write_(0*80+0*40+7);71.3.4.5.3.8. 71.3.4.5.3.9. if(s1num=3)71.3.4.5.3.10. 71.3.4.5.3.10.1. sh

34、i-;71.3.4.5.3.10.2. if(shi=-1)71.3.4.5.3.10.2.1. shi=23;71.3.4.5.3.10.3. write_sfm(4,shi);71.3.4.5.3.10.4. write_(0*80+0*40+4);71.3.4.5.3.11. 71.3.4.5.4. 71.3.4.6. 71.3.5. 72. 73. void main()74. 74.1. init();74.2. while(1)74.3. 74.3.1. keyscan();74.3.2. if(miao=0&&fen=0&&shi=0)74.3.3

35、. TR0=0;74.3.3.1. PlayMusic();74.3.4. 74.4. 75. 76. void timer0() interrupt 177. 77.1. TH0=(65536-50000)/256;77.2. TL0=(65536-50000)%256;77.3. count+;78. if(count=18)78.1.1. 78.1.1.1. count=0;78.1.1.2. miao-;78.1.1.3. if(miao=-1)78.1.1.4. 78.1.1.4.1. miao=59;78.1.1.4.2. fen-;78.1.1.4.3. if(fen=-1)78

36、.1.1.4.4. 78.1.1.4.4.1. fen=59;78.1.1.4.4.2. shi-;78.1.1.4.4.3. if(shi=-1)78.1.1.4.4.4. 78.1.1.4.4.4.1. shi=23;78.1.1.4.4.5. 78.1.1.4.4.6. write_sfm(4,shi);78.1.1.4.5. 78.1.1.4.6. write_sfm(7,fen);78.1.1.5. 78.1.1.6. write_sfm(10,miao);78.1.2. 79. 80. 結(jié)論和展望80.1. 本次設(shè)計(jì)比較復(fù)雜,而且設(shè)計(jì)的根底知識很多,也很重要,對我們未來的工作和學(xué)習(xí)有著一定的奠基作用,是對單片機(jī)、數(shù)電、模電等知識的總結(jié)很歸納。80.2. 本次設(shè)計(jì)參考資料較多,而且由于沒有設(shè)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論