版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)設(shè)計(jì)</b></p><p> 題 目 電子音樂鬧鐘的設(shè)計(jì)與仿真 </p><p><b> 摘 要</b></p><p> 電子音樂鬧鐘在日常生活中具有很廣泛的應(yīng)用。 本課題設(shè)計(jì)了一個(gè)基于單片機(jī)控制的電子音樂鬧鐘,從硬件和軟件兩個(gè)方面對系統(tǒng)進(jìn)行
2、了詳細(xì)設(shè)計(jì)。硬件系統(tǒng)主要包括單片機(jī)主控模塊、顯示模塊、按鍵模塊和音樂播放模塊。其中單片機(jī)模塊采用AT89C51,顯示模塊采用簡單實(shí)用的數(shù)碼管,音樂播放利用揚(yáng)聲器發(fā)聲控制。系統(tǒng)能夠準(zhǔn)確地顯示時(shí)、分、秒信息,通過獨(dú)立按鍵實(shí)現(xiàn)時(shí)間調(diào)整和鬧鐘時(shí)間的設(shè)置,能夠定時(shí)播放預(yù)先設(shè)置的電子音樂。軟件方面基于模塊化編程思想,開發(fā)環(huán)境采用 Keil C51。最后利用硬件仿真軟件Proteus構(gòu)建硬件仿真平臺,對系統(tǒng)進(jìn)行了功能驗(yàn)證。仿真結(jié)果充分說明系統(tǒng)設(shè)計(jì)是完
3、全可行的。</p><p> 關(guān)鍵詞:單片機(jī);電子音樂鬧鐘;LED數(shù)碼管;獨(dú)立按鍵</p><p><b> ABSTRACT</b></p><p> Electronic music alarm clock has a wide range of applications in our daily life. This topic h
4、as 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 detailed design. Hardware system mainly includes the SCM c
5、ontrol 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 playb</p><p> Key words:
6、 Single chip microcomputer; Electronic music alarm clock; LED digital tube; Separate button</p><p><b> 目 錄 </b></p><p><b> 1 引言1</b></p><p> 1.1 研究目的和意義
7、1</p><p> 1.2 本系統(tǒng)主要研究的內(nèi)容1</p><p> 2 方案的選擇和論證1</p><p> 2.1 單片機(jī)型號的選擇1</p><p> 2.3 顯示器的選擇2</p><p> 2.4 計(jì)時(shí)部分的選擇2</p><p> 2.5 單片機(jī)播放音樂原理
8、3</p><p> 2.5.1 音調(diào)的確定3</p><p> 2.5.2 音樂節(jié)拍的產(chǎn)生3</p><p> 3 電子音樂鬧鐘系統(tǒng)詳細(xì)設(shè)計(jì)4</p><p> 3.1 系統(tǒng)功能方框圖4</p><p> 3.2 硬件詳細(xì)設(shè)計(jì)5</p><p> 3.2.1 AT89C
9、51 單片機(jī)簡介5</p><p> 3.2.2 晶振電路6</p><p> 3.2.3 復(fù)位電路7</p><p> 3.2.4 鍵盤電路的設(shè)計(jì)7</p><p> 3.2.5 顯示電路8</p><p> 3.2.7 顯示驅(qū)動(dòng)模塊8</p><p> 3.2.8 發(fā)
10、音電路模塊9</p><p> 3.3 軟件詳細(xì)設(shè)計(jì)9</p><p> 3.3.1 主程序設(shè)計(jì)9</p><p> 3.3.2 定時(shí)器定時(shí)模塊10</p><p> 3.3.3 鬧鐘模塊11</p><p> 3.3.4 計(jì)時(shí)模塊11</p><p> 3.3.5 鍵盤
11、掃描模塊13</p><p> 3.3.6 播放音樂模塊14</p><p><b> 4 系統(tǒng)調(diào)試15</b></p><p> 4.1 軟件介紹15</p><p> 4.1.1 PROTEUS ISIS 軟件介紹15</p><p> 4.1.2 KEIL C51 軟件介
12、紹15</p><p> 4.2 利用Proteus和Keil進(jìn)行聯(lián)合調(diào)式15</p><p><b> 5 仿真結(jié)果17</b></p><p><b> 6 結(jié)論18</b></p><p><b> 參考文獻(xiàn)19</b></p><p
13、><b> 致 謝20</b></p><p><b> 附 錄21</b></p><p><b> 1 引言</b></p><p> 1.1 研究目的和意義</p><p> 目的:設(shè)計(jì)一個(gè)電子鬧鐘,該鬧鐘可由使用者自己校準(zhǔn)時(shí)間并根據(jù)需要在規(guī)定的時(shí)
14、間發(fā)出音樂提醒使用者,防止遺忘時(shí)間。</p><p> 意義:電子音樂鬧鐘在生活中很常見,有了它,使得我們忙碌的生活不在枯燥,也不用擔(dān)心會錯(cuò)過什么重要的事。隨著現(xiàn)在生活壓力的增大,失眠現(xiàn)象已經(jīng)很普遍,特別是當(dāng)?shù)诙煊兄匾虑榈臅r(shí)候,老是怕睡過而導(dǎo)致人們睡不好,有了電子鬧鐘,我們再也不用擔(dān)心這種事會發(fā)生了,而是能好好地睡到鬧鐘鬧醒的那一刻,如果再加上那么一段美妙的音樂,這樣,我們會伴隨柔和的音樂而起床。所以,電子
15、音樂鬧鐘給人們的生活帶來了極大的方便。于是,研究這樣一個(gè)電子音樂鬧鐘有著非?,F(xiàn)實(shí)的意義。 </p><p> 1.2 本系統(tǒng)主要研究的內(nèi)容</p><p> 本設(shè)計(jì)主要研究用proteus和keil協(xié)同仿真一個(gè)電子音樂鬧鐘,主要包括硬件電路詳細(xì)設(shè)計(jì)和軟件詳細(xì)設(shè)計(jì)兩方面。其中硬件電路部分可分為四個(gè)模塊:鍵盤模塊;②顯示模塊;③計(jì)時(shí)模塊;④音樂播放模塊。軟件部分則應(yīng)做到程序的準(zhǔn)確、簡單
16、、可讀性強(qiáng)。最后通過硬軟件的結(jié)合實(shí)現(xiàn)電子音樂鬧鐘的精確計(jì)時(shí)、鬧鐘設(shè)置和播放音樂功能。</p><p> 2 方案的選擇和論證</p><p><b> 2.1 單片機(jī)選擇</b></p><p> 通過分析多種單片機(jī),認(rèn)為AT89C51 是比較適合做電子音樂鬧鐘的芯片,器件采用ATMEL 高密度非易失存儲器制造技術(shù)制造,與MCS-51 指
17、令集和輸出管腳相兼容。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次以上,其壽命較長,使用更方便。再者他的數(shù)據(jù)保留時(shí)間可達(dá)10年。AT89C51 是一種高效微控制器,是最好的選擇。</p><p><b> 2.2 按鍵的選擇</b></p><p> 方案一:矩陣式鍵盤。為了節(jié)省I/O口,通常將按鍵排列成矩陣形式。雖然電路連接復(fù)雜,但是提高了I/O口的利用率,在
18、修改時(shí)鐘或設(shè)置鬧鈴時(shí)間時(shí)可以直接從鍵盤輸入,快捷、方便。如果選擇此方案,軟件編程較復(fù)雜,適用于需很多個(gè)按鍵的場合。 </p><p> 方案二:獨(dú)立式按鍵。獨(dú)立式按鍵是直接用I/O口線構(gòu)成單個(gè)按鍵電路,一個(gè)按鍵單獨(dú)占用1根I/O線。雖然會給布線帶來諸多不便,但程序設(shè)計(jì)簡單,適合用于按鍵較少的場合。如果系統(tǒng)中的鍵較少,就可以使用獨(dú)立式按鍵,因此,此方案適用于按鍵較少的情況。如果使用該方案,無論從硬件還是軟件方
19、面實(shí)現(xiàn)起來都比較方便,所以我選擇方案二。</p><p> 2.3 顯示器的選擇</p><p> 方案一:液晶顯示器。此顯示器體積小,便于攜帶;并且液晶顯示器可視面積大。其缺點(diǎn)為此顯示器的亮度和對比度不是很好,并且壽命有限,驅(qū)動(dòng)電路復(fù)雜,使用起來更麻煩。</p><p> 方案二:數(shù)碼管顯示器。數(shù)碼管的驅(qū)動(dòng)電路簡單,并且在亮度、可視角度和刷新速率等方面,都更
20、具優(yōu)勢。LED壽命長,背光功耗低、更環(huán)保,它不含有害金屬汞,免去了對人體對環(huán)境的損害; 第三、LED背光讓顯示器顯得更輕薄,LED采用發(fā)光二極管,不需要復(fù)雜的光路設(shè)計(jì),實(shí)現(xiàn)真正的光源平面化,所以顯示器也能節(jié)省很多空間。如果選擇了此方案,那么在夜間看時(shí)間的時(shí)候就非常方便。其缺點(diǎn)是耗電量較大。綜合考慮,數(shù)碼管使用起來較為方便,因此我選擇用數(shù)碼管做顯示器。</p><p> 2.4 計(jì)時(shí)部分的選擇</p>
21、<p> DS1302時(shí)鐘芯片,大可以實(shí)現(xiàn)計(jì)時(shí)功能,而且系統(tǒng)不怕掉電且時(shí)間精確。它采用備份電池供電,在系統(tǒng)斷電時(shí)仍可以工作。實(shí)時(shí)時(shí)鐘芯片的這些優(yōu)點(diǎn),使得它廣泛應(yīng)用于需要顯示時(shí)間的場合,但這種芯片比較貴,況且,設(shè)計(jì)本系統(tǒng)目的是為了學(xué)習(xí)單片機(jī)程序的編寫和調(diào)試,因此采用了軟件編程的方法來計(jì)時(shí)而沒有采用價(jià)格較高的時(shí)鐘芯片。</p><p> 2.5 單片機(jī)播放音樂原理</p><p&
22、gt; 一般情況下,用單片機(jī)蜂鳴器來演奏音樂基本都是單音頻率,不像專用樂器那樣能演奏多種音色的音樂。所以音調(diào)和節(jié)拍是該設(shè)計(jì)要了解的兩個(gè)概念。音調(diào)表示了一個(gè)音符的頻率有多高,節(jié)拍表示了一個(gè)音符能唱多久。</p><p> 2.5.1 音調(diào)的確定</p><p> 音調(diào)主要是通過頻率來確定的,我們可以根據(jù)音調(diào)表查出各個(gè)音符所對應(yīng)的相應(yīng)頻率,接下來就需要用51單片機(jī)發(fā)出相應(yīng)的頻率即可,主要
23、方法就是使用定時(shí)器定時(shí)中斷,將蜂鳴器對應(yīng)I/O口來回取反就行了。下面我舉個(gè)例子說明一下怎么確定一個(gè)頻率對應(yīng)的定時(shí)器的定時(shí)值。</p><p> 例如標(biāo)準(zhǔn)音高A : 頻率f = 440 Hz, 其對應(yīng)的周期為:T = 1/ f = 1/440 =2272μs ,那么單片機(jī)上對應(yīng)蜂鳴器的I/O 口來回取反的時(shí)間應(yīng)為: t = T/2 = 2272/2 = 1136 μs ,也就是清零、置位在一個(gè)周期內(nèi)完成. <
24、;/p><p> 音符與節(jié)拍數(shù)的關(guān)系如表1所示。</p><p> 表1 音符與節(jié)拍數(shù)的關(guān)系</p><p> 2.5.2 音樂節(jié)拍的產(chǎn)生</p><p> 一般情況下,如果一首樂曲沒有說明,一拍的時(shí)長大約400ms到500ms之間 ,我們可以通過軟件延時(shí)的方法來延時(shí)這么長時(shí)間。</p><p> for(t1
25、= 0; t1 < t; t1++) </p><p> for(t2 = 0; t2 < 8000; t2++); </p><p> 通過改變t的值就可以唱出不同節(jié)拍的音樂。</p><p> 表2所示為不同曲調(diào)下的1/4和1/8節(jié)拍的時(shí)間設(shè)定。</p><p> 如果單片機(jī)要實(shí)現(xiàn)播放音樂,那么必須在程序設(shè)計(jì)中要
26、考慮到節(jié)拍,節(jié)拍數(shù)和節(jié)拍碼的對照表如表3所示。</p><p> 表2 各調(diào)節(jié)拍的時(shí)間設(shè)定</p><p> 表3 節(jié)拍數(shù)與節(jié)拍碼的對照</p><p> 3 電子音樂鬧鐘系統(tǒng)詳細(xì)設(shè)計(jì)</p><p> 3.1 系統(tǒng)功能方框圖 </p><p> 根據(jù)設(shè)計(jì)需求分析,系統(tǒng)主要包括以下幾個(gè)模塊:微處理器模塊、單
27、片機(jī)最小系統(tǒng)、數(shù)碼管顯示模塊、按鍵模塊以及揚(yáng)聲器發(fā)聲模塊,具體方框圖如圖3.1所示。</p><p> 圖3.1 系統(tǒng)功能方框圖</p><p> 下面從硬件和軟件兩個(gè)方面對系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì)。</p><p> 3.2 硬件詳細(xì)設(shè)計(jì)</p><p> 3.2.1 AT89C51 單片機(jī)簡介</p><p>
28、 AT89C51是這幾年我國非常流行的單片機(jī), AT89C51是一種高性能、低電壓的CMOS單片機(jī),它的片內(nèi)包含4k bytes可重復(fù)擦寫的FLASH只讀程序存儲器,同時(shí)還有128 bytes的隨機(jī)存取數(shù)據(jù)的存儲器。由ATMEL公司開發(fā)生產(chǎn),在8051、8751的基礎(chǔ)上增強(qiáng)了許多特性。如時(shí)鐘頻率更高,運(yùn)行速度更快。是嵌入式微控制器,與嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,功耗和成本下降,可靠性提高。AT89C51
29、是一種高效的微控制器,為很多嵌入式控制系統(tǒng)提供了質(zhì)優(yōu)價(jià)廉的方案。它可以滿足多方面的性能需求。AT89C51 采用了高性能的處理器結(jié)構(gòu),指令執(zhí)行時(shí)間較短。</p><p> P0口是開路型漏極雙向輸入輸出口,也即數(shù)據(jù)、地址復(fù)用口。P1口可作輸入口,因其自帶有上拉電阻的雙向輸入輸出口。P2口也是帶有上拉電阻的雙向輸入輸出口。P3口也是一個(gè)雙功能口,當(dāng)作為通用I/O口外,P3口還可以工作于專用功</p>
30、<p> 圖3.2.1 AT89C51單片機(jī)</p><p> 能,P3口在輸入方面多了一個(gè)緩沖器,P3口無須再加上拉電阻。其電源正負(fù)極分別接在40和20引腳上。</p><p> 3.2.2 晶振電路</p><p> 晶振電路是構(gòu)成單片機(jī)的最小系統(tǒng),單片機(jī)必須在時(shí)鐘的驅(qū)動(dòng)下才能進(jìn)行工作。單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)里晶振的作用非常大,全稱
31、晶體振蕩器。反相放大器的輸入端為XTAL1,即19引腳,輸出端為XTAL2,即18引腳。在XTAL1和XTAL2兩端跨接石英晶體及兩個(gè)電容就可以構(gòu)成穩(wěn)定的自激振蕩器。晶振電路如圖3.2.2所示。</p><p> 圖3.2.2 晶振電路</p><p> 3.2.3 復(fù)位電路</p><p> 一個(gè)單片機(jī)系統(tǒng)至少有單片機(jī)芯片、電源、晶體振蕩器,還需要有能使單片
32、機(jī)復(fù)位的電路。復(fù)位電路分上電復(fù)位和手動(dòng)按鍵復(fù)位兩種,電路如圖3.2.3所示。</p><p> 圖3.2.3 復(fù)位電路</p><p> 3.2.4 鍵盤電路的設(shè)計(jì)</p><p> 鍵盤電路采用4個(gè)獨(dú)立按鍵和上拉電阻實(shí)現(xiàn)對鬧鐘時(shí)間的設(shè)定。其分別接在單片機(jī)的P1^1、P1^2、P1^3、P1^4引腳上,如圖3.2.4所示。</p><p&g
33、t; 圖 3.2.4 鍵盤輸入電路</p><p> 3.2.5 顯示電路</p><p> 此為六個(gè)七段共陽數(shù)碼管,1、2、3、4、5、6表示數(shù)碼管位控制管腳,分別接在74HC138的15、14、13、12、11、10引腳上,實(shí)現(xiàn)對6位數(shù)碼管位的選擇;a、b、c、d、e、f、g,就是數(shù)碼管的段碼輸入,分別接在單片機(jī)P0口的P0.0~P0.6引腳。顯示電路如圖3.2.5所示。<
34、;/p><p> 圖3.2.5 數(shù)碼管顯示電路</p><p> 3.2.6 顯示驅(qū)動(dòng)模塊 </p><p> 74HC138是一款高速CMOS器件,適合內(nèi)存地址解碼或數(shù)據(jù)路由應(yīng)用。可接受3位加權(quán)地址輸入(A,B,C),在高性能存貯器系統(tǒng)中,這種譯碼器可提高譯碼效率。所以采用74HC138來驅(qū)動(dòng)位碼,段碼由上拉電阻驅(qū)動(dòng)。其三位地址輸入1、2、3引腳分別接在單片機(jī)P
35、2口的21、22、23引腳上。具體電路如圖3.2.6所示。</p><p> 圖3.2.6 74HC138功能引腳圖 圖3.2.7 蜂鳴器發(fā)音電路</p><p> 3.2.7 發(fā)音電路模塊 </p><p> 蜂鳴器是一種常用的電子器件,在很多的場合都有廣泛的應(yīng)用,一般用來發(fā)出報(bào)警或者提示的聲音。在本系統(tǒng)中,利用蜂鳴器進(jìn)行鬧
36、鐘音樂的播放。其控制端一端接在P3口的P3.7引腳上,另一端接地。具體電路如圖3.2.7所示。</p><p> 3.3 軟件詳細(xì)設(shè)計(jì)</p><p> 3.3.1 主程序設(shè)計(jì)</p><p> 主程序部分采用程序設(shè)計(jì)的模塊化思想設(shè)計(jì),模塊化設(shè)計(jì)的優(yōu)點(diǎn)是效率高,其模塊相對獨(dú)立,便于修改。在執(zhí)行程序時(shí),主程序只需要調(diào)用子程序就可完成相應(yīng)的功能。主程序流程圖如圖3
37、.3.1所示。</p><p> 圖3.3.1 主程序流程圖</p><p> 3.3.2 定時(shí)器定時(shí)模塊</p><p> 電子音樂鬧鐘設(shè)計(jì)中主要使用定時(shí)器T0,利用中斷進(jìn)行時(shí)間的增加,進(jìn)而實(shí)現(xiàn)計(jì)時(shí)功能。</p><p> 其流程圖如圖3.3.2所示。</p><p> 圖3.3.2 定時(shí)程序流程圖<
38、/p><p> 3.3.3 鬧鐘模塊</p><p> 判定有沒有到達(dá)鬧鐘設(shè)定時(shí)間是通過將鬧鐘設(shè)定時(shí)間與當(dāng)前時(shí)間進(jìn)行對比來確定是否進(jìn)行鬧鈴。其程序流程圖如圖3.3.3所示。</p><p> 圖3.3.3 鬧鐘程序流程圖</p><p> 3.3.4 計(jì)時(shí)模塊</p><p> 計(jì)時(shí)函數(shù)部分,主要是通過單片機(jī)定時(shí)
39、器中斷進(jìn)行的,當(dāng)單片機(jī)產(chǎn)生一次中斷,counter=20時(shí),說明1秒時(shí)間到,然后把counter清0 ,把秒sec加1。以此類推,然后再依次判斷分鐘和小時(shí)。計(jì)時(shí)模塊流程圖如圖3.3.4所示。</p><p> 圖3.3.4計(jì)時(shí)流程圖</p><p> 3.3.5 鍵盤掃描模塊 </p><p> 圖3.3.5 鍵盤掃描流程圖</p><p
40、> 此部分主要是通過判斷counter 在不同值時(shí)通過調(diào)用加1、減1子函數(shù)對時(shí)間和鬧鐘的時(shí)、分、秒進(jìn)行設(shè)置。在鬧鐘設(shè)置時(shí),按下key1時(shí)鐘停止,進(jìn)入鬧鐘設(shè)置模式,key2用來選擇時(shí)、分、秒的設(shè)定,按一下設(shè)置秒、兩下設(shè)置分、三下設(shè)置時(shí),key3用來選擇加,key4用來選擇減,設(shè)定好了之后再次按下key1即可完成鬧鐘時(shí)間設(shè)定,時(shí)間正常走。</p><p> 3.3.6 播放音樂模塊</p>&
41、lt;p> 當(dāng)當(dāng)前時(shí)間與所設(shè)的鬧鐘時(shí)間相等時(shí),調(diào)用曲目,查找相應(yīng)的音符,音符的高四位(即音頻)裝入T0,音符的低四位(即節(jié)拍)裝入節(jié)拍單元。T0開始計(jì)數(shù),從P3.7輸出脈沖信號,播放音樂。音樂播放結(jié)束,返回主程序。</p><p> 播放音樂流程圖如圖3.3.7所示。</p><p><b> Y</b></p><p> 圖3.
42、3.7 播放音樂流程圖</p><p><b> 4 系統(tǒng)調(diào)試</b></p><p><b> 4.1 軟件介紹</b></p><p> 4.1.1 PROTEUS ISIS 軟件介紹</p><p> Proteus軟件是英國Labcenter 公司出版的EDA工具軟件。目前,Prot
43、eus仿真系統(tǒng)支持的主流單片機(jī)有ARM7(LPC21xx)、8051/52系列、AVR系列等,它支持第三方軟件開發(fā)、編譯。Proteus主要由ISIS和ARES兩部分組成,ISIS主要用于原理圖設(shè)計(jì)及與電路原理圖的交互仿真。Proteus的ISIS是一款專業(yè)的單片機(jī)軟件仿真系統(tǒng),Proteus ISIS是 Proteus軟件的核心,具有高質(zhì)量的原理圖,良好的用戶界面,自動(dòng)走線,層次設(shè)計(jì),總線支持等特性。該軟件具有數(shù)字電路仿真、模擬電路仿
44、真等,ISIS提供的Proteus VSM實(shí)現(xiàn)了混合式的SPICE電路仿真,他將高級圖表應(yīng)用,單片機(jī)仿真,第三方程序與調(diào)試環(huán)境有機(jī)結(jié)合,可以完成原理圖設(shè)計(jì)、電路分析與仿真及單片機(jī)程序仿真、測試及驗(yàn)證。并且有各種虛擬儀器。</p><p> 4.1.2 KEIL C51 軟件介紹</p><p> Keil C51是德國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)
45、系統(tǒng),KEIL C51標(biāo)準(zhǔn)C編譯器為8051微控制器的軟件開發(fā)提供了C語言環(huán)境,同時(shí)保留了匯編代碼高效快速的特點(diǎn)。KEILC51軟件提供了豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全windows界面。</p><p> 4.2 利用Proteus和Keil進(jìn)行聯(lián)合調(diào)式</p><p> 根據(jù)前面的硬件詳細(xì)設(shè)計(jì),利用Proteus構(gòu)建硬件平臺,具體原理圖如4.2.1所示。在Keil開發(fā)
46、環(huán)境中完成軟件代碼的編寫。首先新建立工程,選擇目標(biāo)器件,再新建文件編寫軟件代碼,對工程文件進(jìn)行編譯,得到二進(jìn)制文件(*.hex)。最后將該二進(jìn)制文件燒到單片機(jī)芯片內(nèi)部。具體程序加載過程如圖4.2.2所示。然后運(yùn)行系統(tǒng),進(jìn)行功能仿真。仿真調(diào)試的過程比較慢,一般要經(jīng)過調(diào)試、修改代碼、再調(diào)試,直到達(dá)到預(yù)期目標(biāo)為止。一般調(diào)試可采用分模塊進(jìn)行。</p><p> 圖4.2.1 硬件原理圖</p><
47、p> 圖4.2.2 程序加載窗口</p><p><b> 5 仿真結(jié)果</b></p><p> 本設(shè)計(jì)為簡易電子音樂鬧鐘,主要完成如下功能。</p><p> 1.系統(tǒng)上電即開始計(jì)時(shí),顯示時(shí)間12:23:45,如果需要顯示不同時(shí)間只用修改sec、min、hour即可,具體見程序。</p><p> 2
48、.四個(gè)獨(dú)立按鍵用來控制鬧鐘,按下key1時(shí)鐘停止,進(jìn)入鬧鐘設(shè)置模式,key2用來選擇時(shí)、分、秒的設(shè)定,按一下設(shè)置秒、兩下設(shè)置分、三下設(shè)置時(shí),key3用來選擇加,key4用來選擇減,設(shè)定好了之后再次按下key1即可完成鬧鐘時(shí)間設(shè)定,時(shí)間正常走。</p><p> 3.當(dāng)當(dāng)前時(shí)間和設(shè)定時(shí)間一樣時(shí),鬧鐘開始播放歌曲“世上只有媽媽好”,播放完畢后繼續(xù)運(yùn)行,如果需要在此設(shè)定只用重復(fù)步驟2即可。
49、 </p><p> 運(yùn)行系統(tǒng)后,時(shí)間顯示效果圖如圖5.2所示。</p><p> 圖5.2 硬件仿真圖</p><p> 調(diào)整鬧鐘時(shí)間仿真效果圖如圖5.3所示。</p><p> 圖5.3 調(diào)整后的時(shí)間</p><p><b> 6 結(jié)論</b></
50、p><p> 本課題設(shè)計(jì)了一個(gè)基于單片機(jī)控制的電子音樂鬧鐘。從硬件和軟件2個(gè)方面分別對系統(tǒng)進(jìn)行了詳細(xì)設(shè)計(jì)。利用Proteus仿真軟件搭建硬件平臺對設(shè)計(jì)的系統(tǒng)進(jìn)行了功能仿真。通過仿真效果,充分驗(yàn)證了系統(tǒng)設(shè)計(jì)的可行性,達(dá)到了系統(tǒng)設(shè)計(jì)的預(yù)期目標(biāo)。仿真系統(tǒng)操作簡單,運(yùn)行較穩(wěn)定。但系統(tǒng)功能還不夠完善,需要改進(jìn)的地方主要包括以下幾點(diǎn):</p><p> 1、系統(tǒng)只能顯示時(shí)間信息的時(shí)、分、秒,而且運(yùn)行一
51、段時(shí)間后,存在一定的誤差,需要經(jīng)常進(jìn)行時(shí)間的校正。改進(jìn)方法是采用專用的時(shí)鐘芯片,如DS1302,不僅可以顯示時(shí)、分、秒信息,還可以顯示年、月、日、星期幾等信息,而且時(shí)間誤差較小,無需經(jīng)常校正。</p><p> 2、系統(tǒng)存儲器內(nèi)只存儲了一手歌曲的相關(guān)數(shù)據(jù),未能實(shí)現(xiàn)鬧鐘音樂的選擇設(shè)置。改進(jìn)方法是增加音樂歌曲的數(shù)目,如果數(shù)據(jù)較多,可考慮外擴(kuò)存儲器實(shí)現(xiàn)。</p><p> 3、系統(tǒng)顯示信息較
52、少,因此采用的是數(shù)碼管顯示。如果增加更多的顯示信息,可考慮采用液晶顯示器。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 潘永雄.新編單片機(jī)原理與應(yīng)用. 西安電子科技大學(xué)出版社,2002</p><p> [2] 張友德,趙志英,涂時(shí)亮.單片機(jī)微型機(jī)原理應(yīng)用與實(shí)驗(yàn). 復(fù)旦大學(xué)出版社,2000</p>
53、<p> [3] 周航慈、朱兆優(yōu)、李躍忠.智能儀器原理與設(shè)計(jì). 北京航空航天大學(xué)出版社,2005</p><p> [4] 江秀漢.可編程序控制器原理及應(yīng)用(第二版).西安電子科技大學(xué)出版社,2003</p><p> [5] 沈慶陽、郭庭吉.單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社,2002年</p><p> [6] 竇振中.單片機(jī)外圍器件
54、實(shí)用手冊存儲器分冊.北京航空航天大學(xué)出版社,1998</p><p> [7] 單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例,彭偉 編著</p><p> [8] 高衛(wèi)東 ,51單片機(jī)原理與實(shí)踐 (C語言版)</p><p> [9] 李建忠.單片機(jī)原理及運(yùn)用. 西安電子科技大學(xué)出版社, 2001
55、 [10] 吳金戎、沈慶陽.8051單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社 ,2001 [11] 何立民.MCS51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京航空航天大學(xué)出版社, 1999
56、 </p><p> [12] 李榮正、陳學(xué)軍.PIC單片機(jī)實(shí)驗(yàn)教程. 北京航空
57、航天大學(xué)出版社,2006</p><p> [13] 張義和、陳敵北.例說8051.人民郵電出版社,2006</p><p> [14] AT89S51,8-bit Microcontroller with 4KB In-System Programmable Flash </p><p> [15] Intel. Microcontroller Hand
58、book.1988</p><p> [16] C程序設(shè)計(jì)(第三版),譚浩強(qiáng) 著,清華大學(xué)出版社</p><p><b> 致 謝</b></p><p> 畢業(yè)設(shè)計(jì)終于接近尾聲了,首先要感謝我的導(dǎo)師陳老師,他指導(dǎo)我各個(gè)模塊的設(shè)計(jì)和論文寫作的框架。</p><p> 這次畢業(yè)設(shè)計(jì)及論文寫作的時(shí)間不算很長,畢業(yè)設(shè)
59、計(jì)是自己獨(dú)立完成的,設(shè)計(jì)開始時(shí)就對任務(wù)進(jìn)行了按時(shí)分工,每天都要按時(shí)完成任務(wù),這樣才能為順利完成好畢業(yè)設(shè)計(jì)提供時(shí)間基準(zhǔn)。由于畢業(yè)設(shè)計(jì)是我獨(dú)立進(jìn)行的設(shè)計(jì),剛開始時(shí),心里十分茫然,不知從何入手,通過陳老師的指導(dǎo),在論文的寫作過程中,我不僅對所學(xué)過的理論知識有了更深入的理解,而且我的操作能力也有了可喜的進(jìn)步。</p><p> 我認(rèn)為理論知識無論學(xué)得再好再透,畢竟是抽象的,在沒用于實(shí)踐前是毫無意義可言的,而四年的學(xué)習(xí)中
60、我所缺少的就是理論和實(shí)踐的密切結(jié)合。畢業(yè)設(shè)計(jì)則恰恰像一場及時(shí)雨,讓我通過親身學(xué)習(xí)學(xué)會如何把理論知識應(yīng)用于實(shí)踐。給了我充分的鍛煉機(jī)會。受益匪淺!</p><p><b> 謝謝老師!</b></p><p><b> 附 錄</b></p><p> // 名稱: 簡易電子音樂鬧鐘</p><p&
61、gt; // 版本: V1.0</p><p> #include <reg52.h></p><p> #include<intrins.h></p><p> #define FOSC 11059200</p><p> #define N 50//N為定時(shí)時(shí)間,Nms</p>
62、<p> #define TH1_RES (65536 - N*FOSC/12/1000)/256</p><p> #define TL1_RES (65536 - N*FOSC/12/1000)%256</p><p> sbit speaker = P3^7; //蜂鳴器接口定義</p><p> sb
63、it BIT0 = P2^0; //數(shù)碼管位選接口</p><p> sbit BIT1 = P2^1;</p><p> sbit BIT2 = P2^2;</p><p><b> //</b></p><p> unsigned char Timer0_H, Timer0
64、_L, time;</p><p> unsigned char sec = 45,min = 23,hour = 12; //用來初始化系統(tǒng)時(shí)間</p><p> unsigned char temp_sec = 45,temp_min = 23,temp_hour = 12;//用來保存設(shè)定鬧鐘之前的時(shí)間</p><p> unsigned
65、char targetsec = 0,targetmin = 0,targethour = 0;//鬧鐘目標(biāo)時(shí)間</p><p> unsigned int counter = 0;//定時(shí)器計(jì)數(shù)變量</p><p> /****鬧鐘時(shí)間設(shè)定標(biāo)志*** </p><p><b> 1: 設(shè)定秒</b></p><p&
66、gt;<b> 2:設(shè)定分</b></p><p><b> 3:設(shè)定時(shí)</b></p><p> ***********************/</p><p> unsigned char adjust_select = 0; </p><p><b> //共陰數(shù)碼管碼表
67、</b></p><p> unsigned char code dseg_code[]={0xc0,0xf9,0xa4,0xb0,</p><p> 0x99,0x92,0x82,0xf8,</p><p> 0x80,0x90,0x88,0x83,</p><p> 0xa7,0xa2,0x86,0x8e};<
68、/p><p> unsigned char a[6]={0,0,0,0,0,0};//用來保存每一位分解的值</p><p> unsigned char dis_aa = 0;</p><p> unsigned char key_flag = 0;</p><p> unsigned char clock_flag =
69、 0;</p><p> unsigned char first_flag = 0;</p><p> unsigned char music_flag = 0;//鬧鐘時(shí)間到播放音樂標(biāo)志變量</p><p> unsigned char code FREQH[] = {</p><p> 0xF2, 0xF3, 0xF5,
70、 0xF5, 0xF6, 0xF7, 0xF8, //低音</p><p> 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//中音</p><p> 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 </p><p> 0xFE, 0xFE, 0xFE
71、, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 </p><p> unsigned char code FREQL[] = {</p><p> 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音</p><p> 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9,
72、0x5B, 0x8F, // </p><p> 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 </p><p> 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 //--------------------------------------</p>
73、;<p> //世上只有媽媽好 ,表中數(shù)據(jù)根據(jù)世上只有媽媽好樂譜簡譜編寫而等 </p><p> unsigned char code sszymmh[] = {</p><p> 6, 2, 2, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, </p><p
74、> //一個(gè)音符有三個(gè)數(shù)字。第一個(gè)為第幾個(gè)音、中為第幾個(gè)八度、最后一個(gè)為時(shí)長(以半拍為單位)。</p><p> 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,</p><p> 6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2
75、,</p><p> 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,</p><p> 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};</p><p> //--------------------------------
76、------</p><p> //-----半拍延時(shí)函數(shù)---------------------------------</p><p> void delay(unsigned char t) </p><p><b> {</b></p><p> unsigned char t1;</p&
77、gt;<p> unsigned long t2;</p><p> for(t1 = 0; t1 < t; t1++) //雙重循環(huán), 共延時(shí)t個(gè)半拍</p><p> for(t2 = 0; t2 < 8000; t2++); //延時(shí)期間, 可進(jìn)入T0中斷去發(fā)音 300-500ms</p><p> TR0 = 0;
78、 //關(guān)閉T0, 停止發(fā)音</p><p><b> } </b></p><p> //-------單音演奏函數(shù)-------------------------------</p><p> void song() </p><p
79、><b> {</b></p><p> TH0 = Timer0_H; </p><p> TR0 = 1; </p><p> delay(time); } </p><p><b>
80、 }</b></p><p> //定時(shí)器初始化函數(shù)</p><p> void Timer1_inital()</p><p><b> {</b></p><p> TMOD = 0x11; //定時(shí)器0和定時(shí)器1都工作在模式1:16位</p><p> TH1 =
81、 TH1_RES;</p><p> TL1 = TL1_RES;</p><p><b> TR1 = 1;</b></p><p><b> EA = 1;</b></p><p><b> ET1 = 1;</b></p><p>
82、; ET0 = 1; //開T0中斷</p><p><b> }</b></p><p> //數(shù)碼管顯示延時(shí)函數(shù) </p><p> void DelayXus(unsigned int n)</p><p><b> {</b></p&g
83、t;<p> unsigned int m,j;</p><p> for(m=0;m<n;m++)</p><p> for(j=0;j<120;j++);</p><p><b> } </b></p><p><b> //數(shù)碼管顯示函數(shù)</b><
84、/p><p> void refresh()</p><p><b> {</b></p><p> for(dis_aa=0;dis_aa<6;dis_aa++)</p><p><b> { </b></p><p> P0 = ~dseg_code[a
85、[dis_aa]];</p><p> switch(dis_aa)</p><p><b> {</b></p><p> case 5: BIT2=0;BIT1=0;BIT0=0;break;</p><p> case 4: BIT2=0;BIT1=0;BIT0=1;break;</p>&l
86、t;p> case 3: BIT2=0;BIT1=1;BIT0=0;break;</p><p> case 2: BIT2=0;BIT1=1;BIT0=1;break;</p><p> case 1: BIT2=1;BIT1=0;BIT0=0;break;</p><p> case 0: BIT2=1;BIT1=0;BIT0=1;break;
87、</p><p> default:break;</p><p><b> }</b></p><p> DelayXus(5);</p><p> BIT2=1;BIT1=1;BIT0=1;//必須加上用來消影,如果不加則掃描亂的一塌糊涂</p><p><b> } &
88、lt;/b></p><p><b> }</b></p><p> //時(shí)間計(jì)算函數(shù),用來求解時(shí)、分、秒每一位的值</p><p> void calcuate_time()</p><p><b> {</b></p><p> a[0] = sec%1
89、0;</p><p> a[1] = sec/10;</p><p> a[2] = min%10;</p><p> a[3] = min/10;</p><p> a[4] = hour%10;</p><p> a[5] = hour/10;</p><p><b>
90、 }</b></p><p> //按鍵掃描函數(shù),返回掃描結(jié)果</p><p> unsigned char key_scan()</p><p><b> {</b></p><p> unsigned char key;</p><p> if(P1 != 0xff)&
91、lt;/p><p><b> {</b></p><p> DelayXus(5);</p><p> if(P1 != 0xff)</p><p><b> {</b></p><p> key = P1;</p><p> return
92、 key;</p><p><b> }</b></p><p> return 0xff; //沒有實(shí)際意義,只是為了消除not every exit path returns a value警告</p><p><b> } </b></p><p><b> e
93、lse</b></p><p> return 0xff;</p><p><b> }</b></p><p> //按鍵處理函數(shù),調(diào)用按鍵掃描函數(shù)</p><p> void key_handle()</p><p><b> {</b></
94、p><p> unsigned char temp2 = 0; //temp1不要初始化成一個(gè)static靜態(tài)變量</p><p> P1 = 0xff;</p><p> _nop_();_nop_();</p><p> temp2 = key_scan();</p><p> if((temp2|
95、0xfd) == 0xfd)</p><p><b> {</b></p><p> adjust_select++;</p><p> if(adjust_select == 4)</p><p> adjust_select = 0;</p><p> while((P1|0xfd)
96、 == 0xfd);</p><p><b> }</b></p><p> if((temp2|0xfb) == 0xfb)</p><p><b> {</b></p><p> switch(adjust_select)</p><p><b> {
97、</b></p><p> case 1: sec++; break;</p><p> case 2: min++; break;</p><p> case 3: hour++;break;</p><p> default: break;</p><p><b> }<
98、;/b></p><p> while((P1|0xfb) == 0xfb);</p><p><b> }</b></p><p> if((temp2|0xf7) == 0xf7)</p><p><b> {</b></p><p> switch(ad
99、just_select)</p><p><b> {</b></p><p> case 1: sec--; break;</p><p> case 2: min--; break;</p><p> case 3: hour--;break;</p><p> default:
100、 break;</p><p><b> }</b></p><p> while((P1|0xf7) == 0xf7);</p><p><b> }</b></p><p> targetsec = sec; // 保留目標(biāo)時(shí)間值</p><p>
101、targetmin = min;</p><p> targethour = hour;</p><p><b> } </b></p><p> /******* 暫時(shí)用處不大 ******/</p><p> void refresh1()</p><p><b>
102、{</b></p><p> for(dis_aa=0;dis_aa<6;dis_aa++)</p><p><b> { </b></p><p> P0 = ~dseg_code[a[dis_aa]];</p><p> switch(dis_aa)</p><p&g
103、t;<b> {</b></p><p> case 5: BIT2=0;BIT1=0;BIT0=0;break;</p><p> case 4: BIT2=0;BIT1=0;BIT0=1;break;</p><p> case 3: BIT2=0;BIT1=1;BIT0=0;break;</p><p>
104、 case 2: BIT2=0;BIT1=1;BIT0=1;break;</p><p> case 1: BIT2=1;BIT1=0;BIT0=0;break;</p><p> case 0: BIT2=1;BIT1=0;BIT0=1;break; </p><p> default:break;</p><p><b>
105、; }</b></p><p> DelayXus(1);</p><p> BIT2=1;BIT1=1;BIT0=1;//必須加上用來消影,如果不加則掃描亂的一塌糊涂</p><p><b> } </b></p><p><b> }</b></p>&l
106、t;p> //-----------主函數(shù)---------------------------</p><p> void main(void)</p><p><b> {</b></p><p> unsigned char k, i = 0; </p><p> time = 1; </p&
107、gt;<p><b> PT0 = 1;</b></p><p><b> PT1 = 0;</b></p><p> Timer1_inital();</p><p><b> while(1) </b></p><p><b> {<
108、/b></p><p> if(P1 != 0xff)</p><p><b> {</b></p><p> DelayXus(5);</p><p> if(P1 != 0xff)</p><p><b> { </b></p><p&
109、gt; if(P1 == 0xfe)</p><p><b> {</b></p><p> clock_flag ++;</p><p> if(clock_flag >=3) clock_flag = 0;</p><p> while(P1 == 0xfe);</p><p&g
110、t;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> calcuate_time();</p><p> if (clock_flag == 1)</p><p><b&g
111、t; {</b></p><p> if(first_flag == 0)</p><p><b> {</b></p><p> temp_sec = sec;</p><p> temp_min = min;</p><p> temp_hour = hour;<
112、/p><p> first_flag = 1;</p><p><b> }</b></p><p> key_handle();</p><p><b> }</b></p><p> else if(clock_flag == 2)</p><p
113、><b> {</b></p><p> sec = temp_sec;</p><p> min = temp_min;</p><p> hour = temp_hour;</p><p> clock_flag = 0;</p><p> first_flag =
114、 0;</p><p><b> TR1 = 1;</b></p><p><b> } </b></p><p> if(clock_flag == 0) //判斷鬧鐘時(shí)間有沒有到</p><p><b> {</b>&
115、lt;/p><p> if((sec == targetsec) && (min == targetmin) && (hour == targethour))</p><p><b> {</b></p><p> music_flag = 1;//準(zhǔn)備播放音樂</p><p> T
116、R1 = 0;//暫時(shí)關(guān)閉時(shí)鐘顯示</p><p><b> }</b></p><p><b> } </b></p><p> if(music_flag == 1)</p><p><b> {</b></p><p> while(t
117、ime) </p><p><b> {</b></p><p> k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;</p><p> Timer0_H = FREQH[k]; </p><p> Timer0_L = FREQL[k]; t
118、ime = sszymmh[i + 2]; i += 3;</p><p> song(); //發(fā)出一個(gè)音符</p><p> refresh1(); </p><p><b> } </b></p><p><b> TR1 =
119、 1;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> void timer0_int() interrupt 1 //T0中斷程序,控制發(fā)音的音調(diào)
120、</p><p><b> {</b></p><p> TR0 = 0; //先關(guān)閉T0</p><p> speaker = !speaker; //輸出方波, 發(fā)音</p><p> TH0 = Timer0_H; //下
121、次的中斷時(shí)間</p><p> TL0 = Timer0_L; //啟動(dòng)T0</p><p> TR0 = 1; </p><p><b> }</b></p><p> void timer1_int() interrupt 3</p><p&
122、gt;<b> {</b></p><p> TH1 = TH1_RES;</p><p> TL1 = TL1_RES;</p><p> counter++;</p><p> if((clock_flag == 0) || (clock_flag == 2))</p><p>
123、<b> {</b></p><p> if(counter == 20)</p><p><b> {</b></p><p> counter = 0;</p><p><b> sec++;</b></p><p> if(sec ==
124、 60)</p><p><b> {</b></p><p><b> sec = 0;</b></p><p><b> min++;</b></p><p> if(min == 60)</p><p><b> {</b
125、></p><p><b> min = 0;</b></p><p><b> hour++;</b></p><p> if(hour == 24)</p><p><b> {</b></p><p><b> sec
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)----電子音樂鬧鐘
- 電子音樂鬧鐘
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的電子音樂門鈴的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)基于單片機(jī)的電子音樂盒設(shè)計(jì)
- 電子音樂盒的設(shè)計(jì)【畢業(yè)論文】
- 課程設(shè)計(jì)---電子音樂門鈴
- 電子音樂盒課程設(shè)計(jì)
- 電子音樂盒設(shè)計(jì)【開題報(bào)告】
- [教育]早期電子音樂
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)的電子音樂門鈴的設(shè)計(jì)(含外文翻譯)
- 單片機(jī)課程設(shè)計(jì)--電子音樂設(shè)計(jì)
- 電子音樂演奏器設(shè)計(jì)【文獻(xiàn)綜述】
- 電子音樂演奏器設(shè)計(jì)【開題報(bào)告】
- 電子音樂盒的設(shè)計(jì)【任務(wù)書】
- 基于Android平臺的電子音樂系統(tǒng)設(shè)計(jì).pdf
- 單片機(jī)課程設(shè)計(jì)---電子音樂盒的設(shè)計(jì)
- 電子音樂學(xué)科 建設(shè)急需提升
- 電子音樂盒單片機(jī)課程設(shè)計(jì)
- 電子音樂盒(單片機(jī)課程設(shè)計(jì))
- 電子音樂盒(單片機(jī)課程設(shè)計(jì))
評論
0/150
提交評論