電子音樂鬧鐘的設計與仿真_第1頁
電子音樂鬧鐘的設計與仿真_第2頁
電子音樂鬧鐘的設計與仿真_第3頁
電子音樂鬧鐘的設計與仿真_第4頁
電子音樂鬧鐘的設計與仿真_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、本科畢業設計題 目 電子音樂鬧鐘的設計與仿真 摘 要電子音樂鬧鐘在日常生活中具有很廣泛的應用。 本課題設計了一個基于單片機控制的電子音樂鬧鐘,從硬件和軟件兩個方面對系統進行了詳細設計。硬件系統主要包括單片機主控模塊、顯示模塊、按鍵模塊和音樂播放模塊。其中單片機模塊采用AT89C51,顯示模塊采用簡單實用的數碼管,音樂播放利用揚聲器發聲控制。系統能夠準確地顯示時、分、秒信息,通過獨立按鍵實現時間調整和鬧鐘時間的設置,能夠定時播放預先設置的電子音樂。軟件方面基于模塊化編程思想,開發環境采用 Keil C51。最后利用硬件仿真軟件Proteus構建硬件仿真平臺,對系統進行了功能驗證。仿真結果充分說明

2、系統設計是完全可行的。關鍵詞:單片機;電子音樂鬧鐘;LED數碼管;獨立按鍵 ABSTRACTElectronic music alarm clock has a wide range of applications in our daily life. This topic has designed a based on single chip microcomputer control electronic music alarm clock, from two aspects of hardware and software of the system has carried on the

3、 detailed design. Hardware system mainly includes the SCM control module, display module, key module and music playback module. The AT89C51 single chip microcomputer module, display module adopts the simple and practical digital tube, music playback using speaker voice control. System is able to acc

4、urately display hours, minutes and seconds, through independent key implementation time adjustment and the alarm time Settings, can play a preset electronic music regularly. Software based on the modular programming ideas, development environment Keil C51. Finally using hardware emulation software P

5、roteus simulation platform building hardware, the system functional verification. The simulation results fully show system design is completely feasible.Key words: Single chip microcomputer; Electronic music alarm clock; LED digital tube; Separate button目 錄 1 引言11.1 研究目的和意義11.2 本系統主要研究的內容12 方案的選擇和論證

6、12.1 單片機型號的選擇12.3 顯示器的選擇22.4 計時部分的選擇22.5 單片機播放音樂原理32.5.1 音調的確定32.5.2 音樂節拍的產生33 電子音樂鬧鐘系統詳細設計43.1 系統功能方框圖43.2 硬件詳細設計53.2.1 AT89C51 單片機簡介53.2.2 晶振電路63.2.3 復位電路73.2.4 鍵盤電路的設計73.2.5 顯示電路83.2.7 顯示驅動模塊83.2.8 發音電路模塊93.3 軟件詳細設計93.3.1 主程序設計93.3.2 定時器定時模塊103.3.3 鬧鐘模塊113.3.4 計時模塊113.3.5 鍵盤掃描模塊133.3.6 播放音樂模塊144

7、系統調試154.1 軟件介紹154.1.1 PROTEUS ISIS 軟件介紹154.1.2 KEIL C51 軟件介紹154.2 利用Proteus和Keil進行聯合調式155 仿真結果176 結論18參考文獻19致 謝20附 錄21 安徽財經大學管理科學與工程學院本科畢業設計1 引言1.1 研究目的和意義 目的:設計一個電子鬧鐘,該鬧鐘可由使用者自己校準時間并根據需要在規定的時間發出音樂提醒使用者,防止遺忘時間。意義:電子音樂鬧鐘在生活中很常見,有了它,使得我們忙碌的生活不在枯燥,也不用擔心會錯過什么重要的事。隨著現在生活壓力的增大,失眠現象已經很普遍,特別是當第二天有重要事情的時候,老是

8、怕睡過而導致人們睡不好,有了電子鬧鐘,我們再也不用擔心這種事會發生了,而是能好好地睡到鬧鐘鬧醒的那一刻,如果再加上那么一段美妙的音樂,這樣,我們會伴隨柔和的音樂而起床。所以,電子音樂鬧鐘給人們的生活帶來了極大的方便。于是,研究這樣一個電子音樂鬧鐘有著非?,F實的意義。 1.2 本系統主要研究的內容本設計主要研究用proteus和keil協同仿真一個電子音樂鬧鐘,主要包括硬件電路詳細設計和軟件詳細設計兩方面。其中硬件電路部分可分為四個模塊:鍵盤模塊;顯示模塊;計時模塊;音樂播放模塊。軟件部分則應做到程序的準確、簡單、可讀性強。最后通過硬軟件的結合實現電子音樂鬧鐘的精確計時、鬧鐘設置和播放音樂功能。

9、2 方案的選擇和論證2.1 單片機選擇通過分析多種單片機,認為AT89C51 是比較適合做電子音樂鬧鐘的芯片,器件采用ATMEL 高密度非易失存儲器制造技術制造,與MCS-51 指令集和輸出管腳相兼容。單片機的可擦除只讀存儲器可以反復擦除1000次以上,其壽命較長,使用更方便。再者他的數據保留時間可達10年。AT89C51 是一種高效微控制器,是最好的選擇。2.2 按鍵的選擇方案一:矩陣式鍵盤。為了節省I/O口,通常將按鍵排列成矩陣形式。雖然電路連接復雜,但是提高了I/O口的利用率,在修改時鐘或設置鬧鈴時間時可以直接從鍵盤輸入,快捷、方便。如果選擇此方案,軟件編程較復雜,適用于需很多個按鍵的場

10、合。 方案二:獨立式按鍵。獨立式按鍵是直接用I/O口線構成單個按鍵電路,一個按鍵單獨占用1根I/O線。雖然會給布線帶來諸多不便,但程序設計簡單,適合用于按鍵較少的場合。如果系統中的鍵較少,就可以使用獨立式按鍵,因此,此方案適用于按鍵較少的情況。如果使用該方案,無論從硬件還是軟件方面實現起來都比較方便,所以我選擇方案二。2.3 顯示器的選擇 方案一:液晶顯示器。此顯示器體積小,便于攜帶;并且液晶顯示器可視面積大。其缺點為此顯示器的亮度和對比度不是很好,并且壽命有限,驅動電路復雜,使用起來更麻煩。 方案二:數碼管顯示器。數碼管的驅動電路簡單,并且在亮度、可視角度和刷新速率等方面,都更具優勢。LED

11、壽命長,背光功耗低、更環保,它不含有害金屬汞,免去了對人體對環境的損害; 第三、LED背光讓顯示器顯得更輕薄,LED采用發光二極管,不需要復雜的光路設計,實現真正的光源平面化,所以顯示器也能節省很多空間。如果選擇了此方案,那么在夜間看時間的時候就非常方便。其缺點是耗電量較大。綜合考慮,數碼管使用起來較為方便,因此我選擇用數碼管做顯示器。2.4 計時部分的選擇DS1302時鐘芯片,大可以實現計時功能,而且系統不怕掉電且時間精確。它采用備份電池供電,在系統斷電時仍可以工作。實時時鐘芯片的這些優點,使得它廣泛應用于需要顯示時間的場合,但這種芯片比較貴,況且,設計本系統目的是為了學習單片機程序的編寫和

12、調試,因此采用了軟件編程的方法來計時而沒有采用價格較高的時鐘芯片。2.5 單片機播放音樂原理一般情況下,用單片機蜂鳴器來演奏音樂基本都是單音頻率,不像專用樂器那樣能演奏多種音色的音樂。所以音調和節拍是該設計要了解的兩個概念。音調表示了一個音符的頻率有多高,節拍表示了一個音符能唱多久。2.5.1 音調的確定音調主要是通過頻率來確定的,我們可以根據音調表查出各個音符所對應的相應頻率,接下來就需要用51單片機發出相應的頻率即可,主要方法就是使用定時器定時中斷,將蜂鳴器對應I/O口來回取反就行了。下面我舉個例子說明一下怎么確定一個頻率對應的定時器的定時值。例如標準音高A : 頻率f = 440 Hz,

13、 其對應的周期為:T = 1/ f = 1/440 =2272s ,那么單片機上對應蜂鳴器的I/O 口來回取反的時間應為: t = T/2 = 2272/2 = 1136 s ,也就是清零、置位在一個周期內完成. 音符與節拍數的關系如表1所示。表1 音符與節拍數的關系音符節拍數音符節拍數x-(全音符)4拍x·(附點八分音符)3/4拍x-(二分音符)2拍x·(附點十六分音符)3/8拍X(四分音符)1拍000(三分休止符)休止3拍X(八分音符)1/2拍00(二分休止符)休止2拍X(十六分音符)1/4拍0(四分休止符)休止1拍x·(附點四分音符)1.5拍 0(八分休止符

14、)休止1/2拍 2.5.2 音樂節拍的產生一般情況下,如果一首樂曲沒有說明,一拍的時長大約400ms到500ms之間 ,我們可以通過軟件延時的方法來延時這么長時間。 for(t1 = 0; t1 < t; t1+) for(t2 = 0; t2 < 8000; t2+); 通過改變t的值就可以唱出不同節拍的音樂。 表2所示為不同曲調下的1/4和1/8節拍的時間設定。如果單片機要實現播放音樂,那么必須在程序設計中要考慮到節拍,節拍數和節拍碼的對照表如表3所示。表2 各調節拍的時間設定曲調值(1/8節拍)DELAY曲調值(1/4節拍)DELAY調4/462ms調4/4125ms調3/4

15、94ms調3/4185ms調2/4125ms調2/4250ms 表3 節拍數與節拍碼的對照節拍碼節拍數節拍碼節拍數11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍41/2拍51.25拍55/8拍61.5拍63/4拍82拍81拍A2.25拍A1.25拍C3拍C1.5拍F3.75拍3 電子音樂鬧鐘系統詳細設計3.1 系統功能方框圖 根據設計需求分析,系統主要包括以下幾個模塊:微處理器模塊、單片機最小系統、數碼管顯示模塊、按鍵模塊以及揚聲器發聲模塊,具體方框圖如圖3.1所示。 AT89C51 復位 晶振6位數碼管 段碼驅動 位碼驅動 按鍵 蜂鳴器圖3.1 系統功能方框圖下面從硬件和

16、軟件兩個方面對系統進行詳細設計。3.2 硬件詳細設計3.2.1 AT89C51 單片機簡介 AT89C51是這幾年我國非常流行的單片機, AT89C51是一種高性能、低電壓的CMOS單片機,它的片內包含4k bytes可重復擦寫的FLASH只讀程序存儲器,同時還有128 bytes的隨機存取數據的存儲器。由ATMEL公司開發生產,在8051、8751的基礎上增強了許多特性。如時鐘頻率更高,運行速度更快。是嵌入式微控制器,與嵌入式微處理器相比,微控制器的最大特點是單片化,體積大大減小,功耗和成本下降,可靠性提高。AT89C51是一種高效的微控制器,為很多嵌入式控制系統提供了質優價廉的方案。它可以

17、滿足多方面的性能需求。AT89C51 采用了高性能的處理器結構,指令執行時間較短。P0口是開路型漏極雙向輸入輸出口,也即數據、地址復用口。P1口可作輸入口,因其自帶有上拉電阻的雙向輸入輸出口。P2口也是帶有上拉電阻的雙向輸入輸出口。P3口也是一個雙功能口,當作為通用I/O口外,P3口還可以工作于專用功圖3.2.1 AT89C51單片機能,P3口在輸入方面多了一個緩沖器,P3口無須再加上拉電阻。其電源正負極分別接在40和20引腳上。 3.2.2 晶振電路 晶振電路是構成單片機的最小系統,單片機必須在時鐘的驅動下才能進行工作。單片機系統里都有晶振,在單片機里晶振的作用非常大,全稱晶體振蕩器。反相放

18、大器的輸入端為XTAL1,即19引腳,輸出端為XTAL2,即18引腳。在XTAL1和XTAL2兩端跨接石英晶體及兩個電容就可以構成穩定的自激振蕩器。晶振電路如圖3.2.2所示。 圖3.2.2 晶振電路3.2.3 復位電路一個單片機系統至少有單片機芯片、電源、晶體振蕩器,還需要有能使單片機復位的電路。復位電路分上電復位和手動按鍵復位兩種,電路如圖3.2.3所示。 圖3.2.3 復位電路3.2.4 鍵盤電路的設計鍵盤電路采用4個獨立按鍵和上拉電阻實現對鬧鐘時間的設定。其分別接在單片機的P11、P12、P13、P14引腳上,如圖3.2.4所示。 圖 3.2.4 鍵盤輸入電路 3.2.5 顯示電路此為

19、六個七段共陽數碼管,1、2、3、4、5、6表示數碼管位控制管腳,分別接在74HC138的15、14、13、12、11、10引腳上,實現對6位數碼管位的選擇;a、b、c、d、e、f、g,就是數碼管的段碼輸入,分別接在單片機P0口的P0.0P0.6引腳。顯示電路如圖3.2.5所示。 圖3.2.5 數碼管顯示電路3.2.6 顯示驅動模塊 74HC138是一款高速CMOS器件,適合內存地址解碼或數據路由應用。可接受3位加權地址輸入(A,B,C),在高性能存貯器系統中,這種譯碼器可提高譯碼效率。所以采用74HC138來驅動位碼,段碼由上拉電阻驅動。其三位地址輸入1、2、3引腳分別接在單片機P2口的21、

20、22、23引腳上。具體電路如圖3.2.6所示。 圖3.2.6 74HC138功能引腳圖 圖3.2.7 蜂鳴器發音電路 3.2.7 發音電路模塊 蜂鳴器是一種常用的電子器件,在很多的場合都有廣泛的應用,一般用來發出報警或者提示的聲音。在本系統中,利用蜂鳴器進行鬧鐘音樂的播放。其控制端一端接在P3口的P3.7引腳上,另一端接地。具體電路如圖3.2.7所示。3.3 軟件詳細設計3.3.1 主程序設計主程序部分采用程序設計的模塊化思想設計,模塊化設計的優點是效率高,其模塊相對獨立,便于修改。在執行程序時,主程序只需要調用子程序就可完成相應的功能。主程序流程圖如圖3.3.1所示。 開始 初始化 鬧鈴判斷

21、 顯示時間 鍵盤掃描圖3.3.1 主程序流程圖3.3.2 定時器定時模塊 電子音樂鬧鐘設計中主要使用定時器T0,利用中斷進行時間的增加,進而實現計時功能。其流程圖如圖3.3.2所示。 T0中斷 顯示時間 按鍵掃描 重裝計數值 鬧鈴時間到? 鬧鈴 中斷返回YN 圖3.3.2 定時程序流程圖3.3.3 鬧鐘模塊判定有沒有到達鬧鐘設定時間是通過將鬧鐘設定時間與當前時間進行對比來確定是否進行鬧鈴。其程序流程圖如圖3.3.3所示。 主程序 鬧鈴時間到鬧鈴音樂響起鬧鈴結束顯示時間 圖3.3.3 鬧鐘程序流程圖3.3.4 計時模塊計時函數部分,主要是通過單片機定時器中斷進行的,當單片機產生一次中斷,coun

22、ter=20時,說明1秒時間到,然后把counter清0 ,把秒sec加1。以此類推,然后再依次判斷分鐘和小時。計時模塊流程圖如圖3.3.4所示。 圖3.3.4計時流程圖3.3.5 鍵盤掃描模塊 鍵盤掃描Key3加,key4減調整時間有無鍵按下?Key2鍵按鍵次數選擇時分秒NY時間繼續開始圖3.3.5 鍵盤掃描流程圖此部分主要是通過判斷counter 在不同值時通過調用加1、減1子函數對時間和鬧鐘的時、分、秒進行設置。在鬧鐘設置時,按下key1時鐘停止,進入鬧鐘設置模式,key2用來選擇時、分、秒的設定,按一下設置秒、兩下設置分、三下設置時,key3用來選擇加,key4用來選擇減,設定好了之后

23、再次按下key1即可完成鬧鐘時間設定,時間正常走。3.3.6 播放音樂模塊當當前時間與所設的鬧鐘時間相等時,調用曲目,查找相應的音符,音符的高四位(即音頻)裝入T0,音符的低四位(即節拍)裝入節拍單元。T0開始計數,從P3.7輸出脈沖信號,播放音樂。音樂播放結束,返回主程序。播放音樂流程圖如圖3.3.7所示。 開始 時間與鬧鐘相等 調入曲目,裝入相應字符 查找音頻裝入T0,節拍裝入節拍單元T0計數,從P3.7輸出脈沖信號節拍單元是否為0返回主程序 Y圖3.3.7 播放音樂流程圖4 系統調試4.1 軟件介紹4.1.1 PROTEUS ISIS 軟件介紹Proteus軟件是英國Labcenter

24、公司出版的EDA工具軟件。目前,Proteus仿真系統支持的主流單片機有ARM7(LPC21xx)、8051/52系列、AVR系列等,它支持第三方軟件開發、編譯。Proteus主要由ISIS和ARES兩部分組成,ISIS主要用于原理圖設計及與電路原理圖的交互仿真。Proteus的ISIS是一款專業的單片機軟件仿真系統,Proteus ISIS是 Proteus軟件的核心,具有高質量的原理圖,良好的用戶界面,自動走線,層次設計,總線支持等特性。該軟件具有數字電路仿真、模擬電路仿真等,ISIS提供的Proteus VSM實現了混合式的SPICE電路仿真,他將高級圖表應用,單片機仿真,第三方程序與調

25、試環境有機結合,可以完成原理圖設計、電路分析與仿真及單片機程序仿真、測試及驗證。并且有各種虛擬儀器。4.1.2 KEIL C51 軟件介紹 Keil C51是德國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,KEIL C51標準C編譯器為8051微控制器的軟件開發提供了C語言環境,同時保留了匯編代碼高效快速的特點。KEILC51軟件提供了豐富的庫函數和功能強大的集成開發調試工具,全windows界面。4.2 利用Proteus和Keil進行聯合調式根據前面的硬件詳細設計,利用Proteus構建硬件平臺,具體原理圖如4.2.1所示。在Keil開發環境中完成軟件代碼的編

26、寫。首先新建立工程,選擇目標器件,再新建文件編寫軟件代碼,對工程文件進行編譯,得到二進制文件(*.hex)。最后將該二進制文件燒到單片機芯片內部。具體程序加載過程如圖4.2.2所示。然后運行系統,進行功能仿真。仿真調試的過程比較慢,一般要經過調試、修改代碼、再調試,直到達到預期目標為止。一般調試可采用分模塊進行。圖4.2.1 硬件原理圖 圖4.2.2 程序加載窗口5 仿真結果本設計為簡易電子音樂鬧鐘,主要完成如下功能。 1.系統上電即開始計時,顯示時間12:23:45,如果需要顯示不同時間只用修改sec、min、hour即可,具體見程序。2.四個獨立按鍵用來控制鬧鐘,按下key1時鐘停止,進入

27、鬧鐘設置模式,key2用來選擇時、分、秒的設定,按一下設置秒、兩下設置分、三下設置時,key3用來選擇加,key4用來選擇減,設定好了之后再次按下key1即可完成鬧鐘時間設定,時間正常走。3.當當前時間和設定時間一樣時,鬧鐘開始播放歌曲“世上只有媽媽好”,播放完畢后繼續運行,如果需要在此設定只用重復步驟2即可。 運行系統后,時間顯示效果圖如圖5.2所示。 圖5.2 硬件仿真圖調整鬧鐘時間仿真效果圖如圖5.3所示。 圖5.3 調整后的時間6 結論本課題設計了一個基于單片機控制的電子音樂鬧鐘。從硬件和軟件2個方面分別對系統進行了詳細設計。利用Proteus仿真軟件搭建硬件平臺對設計的系統進行了功能

28、仿真。通過仿真效果,充分驗證了系統設計的可行性,達到了系統設計的預期目標。仿真系統操作簡單,運行較穩定。但系統功能還不夠完善,需要改進的地方主要包括以下幾點:1、系統只能顯示時間信息的時、分、秒,而且運行一段時間后,存在一定的誤差,需要經常進行時間的校正。改進方法是采用專用的時鐘芯片,如DS1302,不僅可以顯示時、分、秒信息,還可以顯示年、月、日、星期幾等信息,而且時間誤差較小,無需經常校正。2、系統存儲器內只存儲了一手歌曲的相關數據,未能實現鬧鐘音樂的選擇設置。改進方法是增加音樂歌曲的數目,如果數據較多,可考慮外擴存儲器實現。3、系統顯示信息較少,因此采用的是數碼管顯示。如果增加更多的顯示

29、信息,可考慮采用液晶顯示器。參考文獻1 潘永雄.新編單片機原理與應用. 西安電子科技大學出版社,20022 張友德,趙志英,涂時亮.單片機微型機原理應用與實驗. 復旦大學出版社,20003 周航慈、朱兆優、李躍忠.智能儀器原理與設計. 北京航空航天大學出版社,20054 江秀漢.可編程序控制器原理及應用(第二版).西安電子科技大學出版社,20035 沈慶陽、郭庭吉.單片機實踐與應用.清華大學出版社,2002年6 竇振中.單片機外圍器件實用手冊存儲器分冊.北京航空航天大學出版社,19987 單片機C語言程序設計實訓100例,彭偉 編著8 高衛東 ,51單片機原理與實踐 (C語言版)9 李建忠.單

30、片機原理及運用. 西安電子科技大學出版社, 2001 10 吳金戎、沈慶陽.8051單片機實踐與應用.清華大學出版社 ,2001 11 何立民.MCS51系列單片機應用系統設計.北京航空航天大學出版社, 1999 12 李榮正、陳學軍.PIC單片機實驗教程. 北京航空航天大學出版社,200613 張義和、陳敵北.例說8051.人民郵電出版社,200614 AT89S51,8-bit Microcontroller with 4KB In-System Programmable Flash 15 Intel. Microcontroller Handbook.198816 C程序設計(第三版),

31、譚浩強 著,清華大學出版社 致 謝畢業設計終于接近尾聲了,首先要感謝我的導師陳老師,他指導我各個模塊的設計和論文寫作的框架。這次畢業設計及論文寫作的時間不算很長,畢業設計是自己獨立完成的,設計開始時就對任務進行了按時分工,每天都要按時完成任務,這樣才能為順利完成好畢業設計提供時間基準。由于畢業設計是我獨立進行的設計,剛開始時,心里十分茫然,不知從何入手,通過陳老師的指導,在論文的寫作過程中,我不僅對所學過的理論知識有了更深入的理解,而且我的操作能力也有了可喜的進步。我認為理論知識無論學得再好再透,畢竟是抽象的,在沒用于實踐前是毫無意義可言的,而四年的學習中我所缺少的就是理論和實踐的密切結合。畢

32、業設計則恰恰像一場及時雨,讓我通過親身學習學會如何把理論知識應用于實踐。給了我充分的鍛煉機會。受益匪淺!謝謝老師!附 錄/ 名稱: 簡易電子音樂鬧鐘/ 版本: V1.0#include <reg52.h>#include<intrins.h>#define FOSC 11059200#define N 50/N為定時時間,Nms#define TH1_RES (65536 - N*FOSC/12/1000)/256#define TL1_RES (65536 - N*FOSC/12/1000)%256sbit speaker = P37; /蜂鳴器接口定義sbit BI

33、T0 = P20; /數碼管位選接口sbit BIT1 = P21;sbit BIT2 = P22;/unsigned char Timer0_H, Timer0_L, time;unsigned char sec = 45,min = 23,hour = 12; /用來初始化系統時間unsigned char temp_sec = 45,temp_min = 23,temp_hour = 12;/用來保存設定鬧鐘之前的時間unsigned char targetsec = 0,targetmin = 0,targethour = 0;/鬧鐘目標時間unsigned int counter =

34、 0;/定時器計數變量/*鬧鐘時間設定標志* 1: 設定秒2:設定分3:設定時*/unsigned char adjust_select = 0; /共陰數碼管碼表unsigned char code dseg_code=0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa2,0x86,0x8e;unsigned char a6=0,0,0,0,0,0;/用來保存每一位分解的值unsigned char dis_aa = 0;unsigned char key_flag = 0;unsigned char

35、 clock_flag = 0;unsigned char first_flag = 0;unsigned char music_flag = 0;/鬧鐘時間到播放音樂標志變量unsigned char code FREQH = 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, /低音 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/中音 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF; /超高音 u

36、nsigned char code FREQL = 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, /低音0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, / 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16; /超高音 /-/世上只有媽媽好 ,表中數據根據世上只有媽媽好樂譜簡譜編寫而等 unsigned char code sszymmh = 6, 2, 2, 5, 2, 1, 3, 2, 2, 5,

37、 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, /一個音符有三個數字。第一個為第幾個音、中為第幾個八度、最后一個為時長(以半拍為單位)。6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1,

38、5, 1, 6, 0, 0, 0;/-/-半拍延時函數-void delay(unsigned char t) unsigned char t1; unsigned long t2; for(t1 = 0; t1 < t; t1+) /雙重循環, 共延時t個半拍 for(t2 = 0; t2 < 8000; t2+); /延時期間, 可進入T0中斷去發音 300-500ms TR0 = 0; /關閉T0, 停止發音 /-單音演奏函數-void song() TH0 = Timer0_H; TR0 = 1; delay(time); /定時器初始化函數void Timer1_init

39、al() TMOD = 0x11; /定時器0和定時器1都工作在模式1:16位TH1 = TH1_RES;TL1 = TL1_RES;TR1 = 1;EA = 1;ET1 = 1; ET0 = 1; /開T0中斷/數碼管顯示延時函數 void DelayXus(unsigned int n) unsigned int m,j; for(m=0;m<n;m+) for(j=0;j<120;j+); /數碼管顯示函數void refresh() for(dis_aa=0;dis_aa<6;dis_aa+) P0 = dseg_codeadis_aa;switch(dis_aa)

40、case 5: BIT2=0;BIT1=0;BIT0=0;break; case 4: BIT2=0;BIT1=0;BIT0=1;break; case 3: BIT2=0;BIT1=1;BIT0=0;break; case 2: BIT2=0;BIT1=1;BIT0=1;break; case 1: BIT2=1;BIT1=0;BIT0=0;break; case 0: BIT2=1;BIT1=0;BIT0=1;break; default:break;DelayXus(5);BIT2=1;BIT1=1;BIT0=1;/必須加上用來消影,如果不加則掃描亂的一塌糊涂 /時間計算函數,用來求解時

41、、分、秒每一位的值void calcuate_time() a0 = sec%10;a1 = sec/10;a2 = min%10;a3 = min/10;a4 = hour%10;a5 = hour/10;/按鍵掃描函數,返回掃描結果unsigned char key_scan() unsigned char key; if(P1 != 0xff) DelayXus(5); if(P1 != 0xff) key = P1; return key; return 0xff; /沒有實際意義,只是為了消除not every exit path returns a value警告 else ret

42、urn 0xff;/按鍵處理函數,調用按鍵掃描函數void key_handle() unsigned char temp2 = 0; /temp1不要初始化成一個static靜態變量P1 = 0xff;_nop_();_nop_();temp2 = key_scan(); if(temp2|0xfd) = 0xfd) adjust_select+; if(adjust_select = 4) adjust_select = 0; while(P1|0xfd) = 0xfd); if(temp2|0xfb) = 0xfb) switch(adjust_select) case 1: sec+;

43、 break; case 2: min+; break; case 3: hour+;break; default: break; while(P1|0xfb) = 0xfb); if(temp2|0xf7) = 0xf7) switch(adjust_select) case 1: sec-; break; case 2: min-; break; case 3: hour-;break; default: break; while(P1|0xf7) = 0xf7); targetsec = sec; / 保留目標時間值 targetmin = min; targethour = hour; /* 暫時用處不大 */void refresh1() for(dis_aa=0;dis_aa<6;dis_aa+) P0 = dseg_codeadis_aa;switch(dis_aa) case 5: BIT2=0;BIT1=0;BIT0=0;break; case 4:

溫馨提示

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

評論

0/150

提交評論