版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告</p><p> 模擬電子琴發(fā)聲控制系統(tǒng)</p><p><b> 摘要</b></p><p> 本次課程設(shè)計(jì)的主要內(nèi)容是用AT89C51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)簡(jiǎn)單的電子琴并可實(shí)現(xiàn)音樂(lè)的連續(xù)播放。以單片機(jī)作為主控核心,與鍵盤、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有
2、12個(gè)按鍵和揚(yáng)聲器。定時(shí)器按設(shè)置的定時(shí)參數(shù)產(chǎn)生中斷,由于定時(shí)參數(shù)不同,就會(huì)發(fā)出不同頻率的脈沖,不同頻率的脈沖經(jīng)喇叭驅(qū)動(dòng)電路放大濾波后,就會(huì)發(fā)出不同音調(diào)。</p><p> 本簡(jiǎn)易電子琴的設(shè)計(jì)可實(shí)現(xiàn)的功能如下:程序中預(yù)存了4首音樂(lè):《同一首歌》、《兩只蝴蝶》、《祝你快樂(lè)》、《Time to say goodbye》并通過(guò)一個(gè)獨(dú)立鍵盤可以實(shí)現(xiàn)對(duì)四首音樂(lè)的“下一曲”控制。3*4矩陣鍵盤中的7個(gè)按鍵分別對(duì)應(yīng)著7個(gè)不同的
3、音符,另外3個(gè)分為高、中、低音的控制,當(dāng)按下某一按鍵,會(huì)發(fā)出相應(yīng)的音調(diào)。按下按鍵時(shí),揚(yáng)聲器會(huì)發(fā)出聲音,松開(kāi)按鍵后,揚(yáng)聲器停止發(fā)聲,按鍵的時(shí)間越長(zhǎng),發(fā)聲時(shí)間越久。連續(xù)按下不同的按鍵,可以實(shí)現(xiàn)樂(lè)曲的演奏。此外還有一“模式”按鍵,負(fù)責(zé)在電子琴和音樂(lè)播放器兩種不同模式下的切換。</p><p><b> 目錄</b></p><p><b> 1概述7<
4、;/b></p><p> 1.1音樂(lè)產(chǎn)生原理7</p><p> 1.2結(jié)構(gòu)框圖7</p><p> 2系統(tǒng)總體方案及硬件設(shè)計(jì)8</p><p> 2.1總體方案8</p><p> 2.2按鍵鍵盤8</p><p> 2.3蜂鳴器電路8</p&
5、gt;<p> 2.4數(shù)碼管電路9</p><p> 2.5最小系統(tǒng)10</p><p> 2.6設(shè)計(jì)實(shí)現(xiàn)過(guò)程10</p><p><b> 3軟件設(shè)計(jì)12</b></p><p> 3.1整體設(shè)計(jì)12</p><p> 3.2音樂(lè)設(shè)計(jì)13<
6、/p><p> 3.3按鍵設(shè)計(jì)14</p><p> 3.4顯示設(shè)計(jì)16</p><p> 4Proteus仿真17</p><p> 5課程設(shè)計(jì)體會(huì)18</p><p><b> 參考文獻(xiàn)18</b></p><p> 附1:源程序代碼19&l
7、t;/p><p> 附2:系統(tǒng)原理圖29</p><p><b> 概述</b></p><p><b> 音樂(lè)產(chǎn)生原理</b></p><p> 一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不
8、同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這</p><p> 樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系正確即可。</p><p> 若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,</p><p> 即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P1.0反相,然后重復(fù)計(jì)時(shí)再反相。就可
9、在P1.0引腳上得到此頻率的脈沖。</p><p> 利用STC89C52的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,單片機(jī)晶振頻率為12MHz,因此只要令計(jì)數(shù)器計(jì)時(shí)(956μs/1μs)=478,每計(jì)數(shù)478次時(shí)將I/O反相,就可得到中音DO(523Hz)。對(duì)于AT80C51而言要產(chǎn)生一定
10、頻率的方波一般是先將某口線輸出高電平,延遲一段時(shí)間后再輸出低電平。通過(guò)改變延遲時(shí)間可以改變單片機(jī)的輸出頻率。單片機(jī)的延時(shí)主要有兩種方式,即軟件延時(shí)和使用定時(shí)/計(jì)數(shù)器延時(shí)。其中軟件延時(shí)不是很精確,而電子琴電路由于每個(gè)音符的頻率值要求比較嚴(yán)格,因此我們選用定時(shí)/計(jì)數(shù)器延時(shí)。</p><p> 由于本課程設(shè)計(jì)是由用戶通過(guò)鍵盤輸入彈奏樂(lè)曲的,所以節(jié)拍由用戶掌握,不由程序控制。因此,我們只需弄清楚音樂(lè)中的音符和對(duì)應(yīng)的頻率
11、,利用單片機(jī)的定時(shí)/計(jì)數(shù)器來(lái)產(chǎn)生方波頻率信號(hào)即可。</p><p><b> 結(jié)構(gòu)框圖</b></p><p> 系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p><b> 總體方案</b></p><p> 本設(shè)計(jì)采用3*4鍵盤控制通過(guò)程序產(chǎn)生高、中、低七度音律,要考慮到軟件和硬件的匹配以及硬件電路
12、焊接時(shí)的排版問(wèn)題,否則建會(huì)帶來(lái)不必要的焊接麻煩,在編程序時(shí)要注意仿真與實(shí)際電路中可能的不符。在此基礎(chǔ)上,另外設(shè)計(jì)數(shù)碼管顯示電路,蜂鳴器驅(qū)動(dòng)電路。</p><p><b> 按鍵鍵盤</b></p><p> 設(shè)計(jì)中采用AT89S51的并行口P0接3×4矩陣鍵盤,以P0.0-P0.2作輸入線,以P0.4-P0.7作輸出線。每個(gè)按鍵有它的行值和列值,行值和列
13、值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開(kāi)關(guān)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表
14、,查出該鍵的功能,在本程序中,當(dāng)程序檢測(cè)到有鍵按下時(shí),將查表使按鍵值與預(yù)存數(shù)據(jù)表中數(shù)據(jù)對(duì)應(yīng),并調(diào)用發(fā)聲程序。另單獨(dú)焊接第三行第四列按鍵為獨(dú)立按鍵,用以控制歌曲的切換。</p><p><b> 2.3蜂鳴器電路</b></p><p> 蜂鳴器一陽(yáng)極接三極管的集電極,另一端接地,三極管的集電極節(jié)電源VCC,基極接P3.6口。當(dāng)P3.6口為低電平時(shí)三極管導(dǎo)通,蜂鳴器
15、有電流流過(guò),即發(fā)聲。本次設(shè)計(jì)采用的是9015(NPN型)三極管作為蜂鳴器的驅(qū)動(dòng)電路。</p><p><b> 2.4數(shù)碼管電路</b></p><p> 本次單片機(jī)課程設(shè)計(jì)的顯示電路采用共陽(yáng)極LED數(shù)碼管顯示,由于 LED是屬于電流控制器件,使用時(shí)必須加限流電阻。本次顯示使用的是數(shù)碼管的靜態(tài)顯示功能,主要用以顯示高、中、低音的狀態(tài)以及電子琴、播放器狀態(tài)的指示。&
16、lt;/p><p><b> 最小系統(tǒng)</b></p><p> 本部分分為印刷電路板,主要包含復(fù)位電路、時(shí)鐘電路、P0-P3口插槽。</p><p><b> 2.5設(shè)計(jì)實(shí)現(xiàn)過(guò)程</b></p><p> 本次硬件設(shè)計(jì)的核心部分就是按鍵,組成鍵盤的按鍵有機(jī)械式、電容式、導(dǎo)電橡膠式、薄膜式多種,
17、但不管什么形式,其作用都是一個(gè)使電路接通與斷開(kāi)的開(kāi)關(guān)。目前微機(jī)系統(tǒng)中使用的鍵盤按其功能不同,通常可分為編碼鍵盤和非編碼鍵盤兩種基本類型。 編碼鍵盤:鍵盤本身帶有實(shí)現(xiàn)接口主要功能所需的硬件電路。不僅能自動(dòng)檢測(cè)被按下的鍵,并完成去抖動(dòng)、防串鍵等功能,而且能提供與被按鍵功能對(duì)應(yīng)的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤接口簡(jiǎn)單、使用方便。但由于硬件電路較復(fù)雜,因而價(jià)格較貴。 非編碼鍵盤:鍵盤只簡(jiǎn)單地提供按鍵開(kāi)關(guān)的行列矩
18、陣。有關(guān)按鍵的識(shí)別、鍵碼的確定與輸入、去抖動(dòng)等功能均由軟件完成。目前微機(jī)系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤。 鍵盤接口必須具有去抖動(dòng)、防串鍵、按鍵識(shí)別和鍵碼產(chǎn)生4個(gè)基本功能。 (1)去抖動(dòng):每個(gè)按鍵在按下或松開(kāi)時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為5—20mm。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開(kāi)抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開(kāi)狀態(tài)才能保證識(shí)別正確無(wú)誤。去抖問(wèn)</p>&
19、lt;p> 題可通過(guò)軟件延時(shí)或硬件電路解決。 (2)防串鍵:防串鍵是為了解決多個(gè)鍵同時(shí)按下或者前一按鍵沒(méi)有釋放又有新的按鍵按下時(shí)產(chǎn)生的問(wèn)題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當(dāng)有兩個(gè)或兩個(gè)以上的按鍵按下時(shí),只把最后釋放的鍵當(dāng)作有效鍵并產(chǎn)生相應(yīng)的鍵碼。N鍵輪回,是當(dāng)檢測(cè)到有多個(gè)鍵被按下時(shí),能根據(jù)發(fā)現(xiàn)它們的順序依次產(chǎn)生相應(yīng)鍵的鍵碼。 (3)被按鍵識(shí)別:如何識(shí)別被按鍵是接口解決的主要問(wèn)題,一般可通過(guò)軟
20、硬結(jié)合的方法完成。常用的方法有行掃描法和線反轉(zhuǎn)法兩種。行掃描法的基本思想是,由程序?qū)︽I盤逐行掃描,通過(guò)檢測(cè)到的列輸出狀態(tài)來(lái)確定閉合鍵,為此,需要設(shè)置入口、輸出口一個(gè),該方法在微機(jī)系統(tǒng)中被廣泛使用。線反轉(zhuǎn)法的基本思想是通過(guò)行列顛倒兩次掃描來(lái)識(shí)別閉合鍵,為此需要提供兩個(gè)可編程的雙向輸入/輸出端口。 (4)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤編碼表,通過(guò)查表獲得被按鍵的鍵碼。</p&g
21、t;<p> 用STC89C52的并行口P0接3×4矩陣鍵盤,以P0.0-P0.2作輸入線,以P0.4-P0.7作輸出線。</p><p> 除核心電路外,還包括輔助的發(fā)音電路和顯示電路。發(fā)音電路主要部件是蜂鳴器,用三極管作為可控器件輔以驅(qū)動(dòng)電路,以保證音量適中,音色較真。顯示電路由兩位共陽(yáng)極數(shù)碼管作為顯示器件,同樣輔以三極管放大電路,并串接限流電阻,通過(guò)靜態(tài)顯示的方法作為高、中、低音
22、狀態(tài)的顯示和電子琴模式與音樂(lè)播放器模式的狀態(tài)顯示。</p><p><b> 軟件設(shè)計(jì)</b></p><p><b> 整體設(shè)計(jì)</b></p><p> 本設(shè)計(jì)使用Protues仿真軟件進(jìn)行仿真,在程序設(shè)計(jì)部分,包括鍵盤掃描程序,音樂(lè)發(fā)聲程序(程序見(jiàn)附錄1)。3*4矩陣鍵盤是由單片機(jī)控制I/O口來(lái)實(shí)現(xiàn)掃描的。具體
23、程序見(jiàn)附錄二主程序鍵盤掃描部分。程序首先給P0口賦值,然后讀取P0的狀態(tài),將讀取的狀態(tài)值同所賦值相比較,如果二者不相同,則說(shuō)明有鍵按下,子程序?qū)存I值返回主程序;否則,說(shuō)明沒(méi)有鍵按。程序繼續(xù)進(jìn)行下一次掃描。 本系統(tǒng)的軟件主程序流程圖如下:</p><p><b> 音樂(lè)設(shè)計(jì)</b></p><p> 對(duì)于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成。琴
24、鍵處理程序,根據(jù)檢測(cè)到得按鍵值,查詢音律表,給計(jì)時(shí)器賦值,發(fā)出相應(yīng)頻率的聲音。對(duì)音調(diào)的控制:根據(jù)不同的按鍵,對(duì)定時(shí)器T1送入不同的初值,調(diào)節(jié)T1的溢出時(shí)間,這樣就可以輸出不同音調(diào)頻率的方波。不同音調(diào)下各個(gè)音階的定時(shí)器。在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成的。其中T0用來(lái)產(chǎn)生音符頻率,T1用來(lái)產(chǎn)生音拍。</p><p> 要產(chǎn)生相應(yīng)的音頻脈沖,只需要計(jì)算出某音頻的周期,再除以2。利用計(jì)數(shù)器計(jì)時(shí)半周期,計(jì)滿時(shí)使
25、P2.0反向,然后重復(fù)計(jì)時(shí)再反向。本例中,單片機(jī)工作在12MHz時(shí)鐘,使用定時(shí)器/計(jì)數(shù)器T0,工作模式為1,改變計(jì)數(shù)初值TH0、TL0就可產(chǎn)生不同頻率的脈沖信號(hào)。</p><p> 例如低3MI音,頻率為330Hz,其周期T=1/f=1/330=3030us,計(jì)數(shù)值N=3030/2=1515,所以每計(jì)數(shù)1515次P2.0反向。計(jì)數(shù)初值T=65536-N=64021。</p><p>
26、計(jì)數(shù)脈沖值與頻率的關(guān)系式是:</p><p><b> N=fi÷2÷fr</b></p><p> 式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。</p><p> 其計(jì)數(shù)初值T的求法如下:</p><p> T=65536-N=655
27、36-fi÷2÷fr</p><p> 例如:設(shè)K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。</p><p> T=65536-N=65536-fi÷2÷fr</p><p> ?。?5536-1000000÷2÷fr</p&
28、gt;<p> =65536-500000/fr</p><p> 計(jì)算可得高中低音分別為:</p><p> 低音DO的T=65536-500000/262=63627</p><p> 中音DO的T=65536-500000/523=64580</p><p> 高音DO的T=65536-500000/1046=6
29、5059</p><p> 單片機(jī)12MHZ晶振,高中低音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如表所示:</p><p><b> 音符頻率表</b></p><p> 我們要為這個(gè)音符建立一個(gè)表格,單片機(jī)通過(guò)查表的方式來(lái)獲得相應(yīng)的數(shù)據(jù),低音0-19之間,中音在20-39之間,高音在40-59之間 </p><p>
30、 TABLE1: DW 64021,64103,64260,64400</p><p> DW 64524,64580,64684,64777</p><p> DW 64820,64898,64968,65030</p><p> DW 65058,65110,65157,65178</p><p> 音樂(lè)的音拍,一個(gè)節(jié)拍為單位(
31、C調(diào))如下表:</p><p><b> 曲調(diào)值表</b></p><p><b> 按鍵設(shè)計(jì)</b></p><p> 對(duì)于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成。琴鍵處理程序,根據(jù)檢測(cè)到得按鍵值,查詢音律表,給計(jì)時(shí)器賦值,發(fā)出相應(yīng)頻率的聲音。對(duì)音調(diào)的控制:根據(jù)不同的按鍵,對(duì)定時(shí)器T1送入不同的初
32、值,調(diào)節(jié)T1的溢出時(shí)間,這樣就可以輸出不同音調(diào)頻率的方波。不同音調(diào)下各個(gè)音階的定時(shí)器。</p><p><b> 顯示設(shè)計(jì)</b></p><p> 顯示部分使用共陽(yáng)極數(shù)碼管,用NPN型三極管驅(qū)動(dòng)電路進(jìn)行靜態(tài)顯示,分別顯示高中低音狀態(tài)和音樂(lè)播放器及電子琴的模擬切換狀態(tài)。數(shù)碼管由P1.0-P1.7控制段顯示,P2.0和P2.1分別控制住位選,流程圖如下:</p
33、><p><b> Proteus仿真</b></p><p> 軟件仿真調(diào)試主要是針對(duì)單片機(jī)部分進(jìn)行調(diào)試。在軟件運(yùn)行前,先確保電路中連線正確,這一工作是整個(gè)調(diào)試工作的第一步,也是非常重要的一個(gè)步驟。在這部分調(diào)試中主要通過(guò)目測(cè),用來(lái)完成檢測(cè)電路中是否存在斷路或者短路情況等。 </p><p><b>
34、; 5.課程設(shè)計(jì)體會(huì)</b></p><p> 本次課程設(shè)計(jì)制作簡(jiǎn)易電子琴,雖然花費(fèi)了我們很多精力,但收獲頗豐,一方面,將自己的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),進(jìn)一步鞏固了專業(yè)基礎(chǔ)知識(shí)和相關(guān)專業(yè)課程知識(shí);另一方面,也培養(yǎng)了自己獨(dú)立自主、綜合分析的思維與創(chuàng)新能力,更讓我知道了團(tuán)隊(duì)的力量是巨大的。在實(shí)際制作時(shí),我們將程序燒入芯片,調(diào)試成功后,可任意彈奏自己想要的旋律。本設(shè)計(jì)通過(guò)制作電子琴,將幾個(gè)模塊很好的融
35、合,對(duì)使用單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴進(jìn)行了分析,并了解了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來(lái)獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂(lè)。說(shuō)明一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,于是我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可,然后我們利用功放電路來(lái)將音樂(lè)聲音放大。&l
36、t;/p><p> 設(shè)計(jì)的過(guò)程不是一帆風(fēng)順,遇到過(guò)各種各樣的問(wèn)題。特別是設(shè)計(jì)軟件時(shí),一些很細(xì)小的問(wèn)題都可能導(dǎo)致功能性的錯(cuò)誤,修改了多次才通過(guò)仿真,例如:1、在剛剛焊接好后,程序燒入芯片后,發(fā)現(xiàn)并不發(fā)聲,經(jīng)檢查才發(fā)現(xiàn)是對(duì)鍵盤沒(méi)看清楚,將鍵盤接亂了;2、在程序編寫時(shí)發(fā)現(xiàn)程序正確但電路并不工作,后來(lái)才發(fā)現(xiàn)是所用三極管為NPN型,而程序編寫時(shí)則按PNP型進(jìn)行編寫,在修改程序后,程序運(yùn)行正常實(shí)現(xiàn)了預(yù)想的功能;3、在硬件電路修
37、改好后,發(fā)現(xiàn)每次按鍵時(shí)會(huì)引起蜂鳴器一直響,再按鍵時(shí)有可能會(huì)消失,經(jīng)檢查后知道是在每按鍵件程序后蜂鳴器對(duì)應(yīng)參值沒(méi)有直接置1(置1關(guān)蜂鳴器,由電路連接方式?jīng)Q定)。 </p><p> 總之,這是一次動(dòng)手能力的鍛煉,也是一次單片機(jī)知識(shí)的再回顧,還是對(duì)自己細(xì)心以及耐心能力的考察。同時(shí)在具體的制作過(guò)程中我們發(fā)現(xiàn)一些書(shū)本上的知識(shí)與實(shí)際的應(yīng)用存在著一定的差距,書(shū)本上的知識(shí)很多都是理想化后的結(jié)論,忽略了很多實(shí)際的因素,或者
38、涉及的不全面,可在實(shí)際的應(yīng)用時(shí)這些是不能被忽略的,我們不得不考慮這方面的問(wèn)題,這也讓我更深刻地體會(huì)到在今后的學(xué)習(xí)工作中也要注重理論聯(lián)系實(shí)際。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]余發(fā)山.單片機(jī)原理及應(yīng)用技術(shù)[M],中國(guó)礦業(yè)大學(xué)出版社,2003年12月版;</p><p> [2] 馬淑華、王鳳文.單片機(jī)原理
39、與接口技術(shù)[M],北京郵電大學(xué)出版社,2005年10月版;</p><p> [3] 郭天祥.新概念51單片機(jī)C語(yǔ)言教程,電子工業(yè)出版社,2009年版</p><p><b> 附1:源程序代碼</b></p><p> #include "MusInstru.h"</p><p> #inc
40、lude <reg52.h></p><p> #include <stdio.h></p><p> #include <math.h></p><p> #include <absacc.h></p><p> #include "SoundPlay.h"<
41、/p><p> unsigned k,h=1;</p><p> void Delay1ms(unsigned int count)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0;i<count
42、;i++)</p><p> for(j=0;j<120;j++);</p><p><b> }</b></p><p> void music()</p><p><b> {</b></p><p> InitialSound();</p>
43、<p><b> P2=0;</b></p><p><b> P1=0x00;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> Play(Music_One,0,3
44、,360);</p><p> Delay1ms(600);</p><p> Play(Music_Two,0,3,360);</p><p> Delay1ms(600);</p><p> Play(Music_Three,0,3,360);</p><p> Delay1ms(600);</p&
45、gt;<p> Play(Music_Four,0,3,360);</p><p> Delay1ms(600);</p><p> //Play(Music_Five,0,3,360);</p><p> //Delay1ms(600);</p><p><b> }</b></p>
46、<p> } </p><p> /* 鍵掃描函數(shù) */</p><p> uchar getkey(void) </p><p><b> {</b></p><
47、;p> uchar scancode,tmpcode;</p><p> if ((P0&0xf0)==0xf0)</p><p> return(0);</p><p> scancode = 0xfe;</p><p> while((scancode&0x10)!=0)
48、 // 逐行掃描</p><p><b> {</b></p><p> P0 = scancode; // 輸出行掃描碼</p><p> if ((P0&0xf0)!=0xf0) // 本行有鍵按下</p><p><b> {</b&
49、gt;</p><p> tmpcode = (P0&0xf0)|0x0f;</p><p> /* 返回特征字節(jié)碼,為1的位即對(duì)應(yīng)于行和列 */</p><p> return((~scancode)+(~tmpcode));</p><p><b> }</b></p><p>
50、; else scancode = (scancode<<1)|0x01;// 行掃描碼左移一位</p><p><b> }</b></p><p> return(0);</p><p><b> }</b></p><p> void display()</p&
51、gt;<p><b> {</b></p><p> unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,</p><p> 0x99,0x92,0x82,0xf8,</p><p> 0x80,0x90,0x88,0x83,</p><p> 0xc6
52、,0xa1,0x86,0x8e};</p><p> unsigned char code hl[]={0xf7,0xbf,0xfe};</p><p> unsigned int i,m=0;</p><p> for(i=0;i<9;i++)</p><p><b> {</b></p>
53、<p><b> m=m%2;</b></p><p><b> if(m==0)</b></p><p><b> {</b></p><p><b> P2=1;</b></p><p><b> P1=hl[h];<
54、;/b></p><p> Delay1ms(5); </p><p><b> m+=1;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b
55、></p><p><b> P2=2;</b></p><p> P1=table[k+1];</p><p> Delay1ms(5); </p><p><b> m+=1; </b></p><p><b> }</b><
56、;/p><p><b> }</b></p><p><b> }</b></p><p> /*MUSINSTRU頭文件*/</p><p> #ifndef_MUSINSTRU_H // 防止MusInstru.h被重復(fù)引用</p><p> #define
57、_MUSINSTRU_H</p><p> #include <reg52.h></p><p> #include <absacc.h></p><p> #include <stdio.h></p><p> #include <math.h></p><p&g
58、t; #define uchar unsigned char</p><p> #define uint unsigned int</p><p> /* 音符與計(jì)數(shù)值對(duì)應(yīng)表 */</p><p> uint code tab[3][7]={{0xf88b,0xf95b,0xfa14,0xfa03,0xfb8f,0xfbcf,0xfc0b},</p&g
59、t;<p> {0xfc43,0xfcab,0xfd08,0xfd33,0xfd81,0xfdc7,0xfe05},</p><p> {0xfe21,0xfe55,0xfe84,0xfe99,0xfec0,0xfee3,0xff02}}; </p><p> /*4首音樂(lè)代碼*/</p><p> unsigned char code Mus
60、ic_One[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,</p><p> 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02,
61、0x17,0x02,</p><p> 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,</p><p> 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,</p><p> 0x17,0x01, 0x19,0x02, 0x1B,0x02,
62、0x1B,0x70, 0x1A,0x03,</p><p> 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,</p><p> 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,</p><p> 0x19,0x02, 0x1A,0x02,
63、0x19,0x0C, 0x18,0x0D, 0x17,0x03,</p><p> 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,</p><p> 0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,</p><p> 0x19,0x03,
64、0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,</p><p> 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,</p><p> 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,</p><p>
65、0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,</p><p> 0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,</p><p> 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,</p>
66、<p> 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,</p><p> 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,</p><p> 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,&
67、lt;/p><p> 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,</p><p> 0x00,0x00 }; // 兩只蝴蝶 </p><p> unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x1
68、7,0x01, 0x16,0x03, 0x17,0x03,</p><p> 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,</p><p> 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,</p><p> 0x10,0x0E, 0x1
69、5,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03,</p><p> 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,</p><p> 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,</p><p> 0x1
70、6,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,</p><p> 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,</p><p> 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,</p><
71、;p> 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,</p><p> 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,</p><p> 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,<
72、/p><p> 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,</p><p> 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,</p><p> 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1
73、B,0x03,</p><p> 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,</p><p> 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,</p><p> 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x1
74、7,0x0D, 0x16,0x03,</p><p> 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,</p><p> 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,</p><p> 0x1B,0x04, 0x17,0x02, 0x1
75、A,0x03, 0x1A,0x03, 0x1A,0x0E,</p><p> 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,</p><p> 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,</p><p> 0x19,0x03, 0x1
76、A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,</p><p> 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,</p><p> 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,</p><p> 0x1
77、A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,</p><p> 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,</p><p> 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,</p><
78、;p> 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,</p><p> 0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,</p><p> 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,<
79、/p><p> 0x10,0x03, 0x15,0x00, 0x00,0x00 }; //同一首歌</p><p> unsigned char code Music_Three[]={ 0x17,0x02, 0x10,0x03, 0x15,0x03, 0x19,0x03, 0x0D,0x02,</p><p> 0x19,0x03, 0x15,0x02,
80、0x16,0x03, 0x15,0x03, 0x10,0x01,</p><p> 0x1A,0x02, 0x1A,0x03, 0x19,0x03, 0x15,0x02, 0x16,0x02,</p><p> 0x17,0x00, 0x17,0x03, 0x1A,0x03, 0x1A,0x03, 0x19,0x03,</p><p> 0x10,0x02,
81、0x17,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03,</p><p> 0x15,0x03, 0x16,0x01, 0x17,0x02, 0x17,0x03, 0x19,0x03,</p><p> 0x16,0x03, 0x15,0x02, 0x0F,0x03, 0x10,0x00, 0x17,0x02,</p><p>
82、0x17,0x03, 0x19,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x02,</p><p> 0x1A,0x00, 0x1F,0x02, 0x1F,0x03, 0x1B,0x02, 0x1A,0x02,</p><p> 0x1F,0x00, 0x11,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x03,</p>
83、<p> 0x1B,0x03, 0x1A,0x03, 0x1A,0x00, 0x11,0x02, 0x1B,0x03,</p><p> 0x1A,0x02, 0x1B,0x02, 0x16,0x00, 0x16,0x03, 0x16,0x03,</p><p> 0x16,0x03, 0x10,0x03, 0x15,0x02, 0x16,0x02, 0x17,0x00,&
84、lt;/p><p> 0x19,0x03, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,</p><p> 0x1A,0x03, 0x19,0x03, 0x1A,0x00, 0x00,0x00 };//祝你快樂(lè)</p><p> unsigned char code Music_Four[]={ 0x0F,0x03, 0x
85、15,0x03, 0x15,0x01, 0x11,0x03, 0x16,0x03,</p><p> 0x15,0x01, 0x15,0x66, 0x16,0x03, 0x17,0x03, 0x17,0x66,</p><p> 0x17,0x02, 0x16,0x03, 0x18,0x03, 0x17,0x03, 0x15,0x66,</p><p> 0x
86、1F,0x03, 0x1B,0x03, 0x19,0x03, 0x15,0x03, 0x1B,0x03,</p><p> 0x19,0x03, 0x17,0x03, 0x19,0x01, 0x16,0x03, 0x18,0x03,</p><p> 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x11,0x03, 0x0F,0x03,</p>&l
87、t;p> 0x15,0x03, 0x15,0x01, 0x11,0x03, 0x16,0x03, 0x15,0x01,</p><p> 0x15,0x66, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03,</p><p> 0x17,0x03, 0x17,0x17, 0x16,0x03, 0x18,0x03, 0x17,0x03,<
88、;/p><p> 0x15,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x15,0x03,</p><p> 0x1B,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x01, 0x16,0x03,</p><p> 0x18,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x
89、11,0x03,</p><p> 0x11,0x01, 0x0E,0x04, 0x0F,0x04, 0x10,0x04, 0x0F,0x04,</p><p> 0x10,0x04, 0x11,0x04, 0x10,0x04, 0x11,0x04, 0x15,0x04,</p><p> 0x11,0x04, 0x15,0x04, 0x16,0x04, 0x
90、15,0x04, 0x10,0x04,</p><p> 0x16,0x04, 0x17,0x04, 0x18,0x02, 0x17,0x02, 0x0E,0x04,</p><p> 0x0F,0x04, 0x10,0x04, 0x0F,0x04, 0x10,0x04, 0x11,0x04,</p><p> 0x10,0x04, 0x11,0x04, 0x
91、16,0x67, 0x15,0x04, 0x17,0x02,</p><p> 0x0E,0x04, 0x0F,0x04, 0x10,0x04, 0x0F,0x04, 0x10,0x04,</p><p> 0x11,0x04, 0x10,0x04, 0x11,0x04, 0x15,0x16, 0x0E,0x04,</p><p> 0x0F,0x04, 0x
92、10,0x04, 0x0F,0x04, 0x10,0x04, 0x11,0x04,</p><p> 0x10,0x04, 0x11,0x04, 0x16,0x67, 0x15,0x04, 0x16,0x67,</p><p> 0x15,0x04, 0x18,0x67, 0x17,0x04, 0x0F,0x15, 0x00,0x00 };</p><p>
93、//time to say goodbye</p><p><b> #endif</b></p><p> /*SoundPlay頭文件*/</p><p> #ifndef __SOUNDPLAY_H_REVISION_FIRST__</p><p> #define __SOUNDPLAY_H_REVISI
94、ON_FIRST__</p><p> #define SYSTEM_OSC 11059200//定義晶振頻率12000000HZ</p><p> #define SOUND_SPACE 4/5 //定義普通音符演奏的長(zhǎng)度分率,//每4分音符間隔</p><p> sbit BeepIO = P3^6;//定義輸出管腳<
95、;/p><p> uint Point,SoundLength;</p><p> uint code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p> uchar code SignTab[7] = { 0,2,4,5,7,9,11 };
96、//1~7在頻率表中的位置</p><p> uchar code LengthTab[7]= { 1,2,4,8,16,32,64 };</p><p> uchar Sound_Temp_TH0,Sound_Temp_TL0;//音符定時(shí)器初值暫存 </p><p> uchar Sound_Temp_TH1,Sound_Temp_TL
97、1;//音長(zhǎng)定時(shí)器初值暫存</p><p> void InitialSound(void)</p><p><b> {</b></p><p> BeepIO = 0;</p><p> Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;// 計(jì)算TL1應(yīng)裝
98、入的初值 (10ms的初裝值)</p><p> Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;// 計(jì)算TH1應(yīng)裝入的初值 </p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p> TMOD
99、 |= 0x11;</p><p> ET0 = 1;</p><p> ET1 = 0;</p><p> TR0 = 0;</p><p> TR1 = 0;</p><p> EA = 1;</p><p><b> }</b&g
100、t;</p><p> void BeepTimer0(void) interrupt 1//音符發(fā)生中斷</p><p><b> {</b></p><p> BeepIO = !BeepIO;</p><p> TH0 = Sound_Temp_TH0;</p><p>
101、TL0 = Sound_Temp_TL0;</p><p><b> }</b></p><p> void int0(void) interrupt 0</p><p><b> {</b></p><p> Point =SoundLength;</p><p
102、><b> }</b></p><p> void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)</p><p><b> {</b></p><p> uint NewFreT
103、ab[12];//新的頻率表</p><p> uchar i,j;</p><p> uint LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T;</p><p> uchar Tone,Length,SL,SH,SM,SLen,XG,FD;</p><p> for(i=0;i<
104、;12;i++) // 根據(jù)調(diào)號(hào)及升降八度來(lái)生成新的頻率表 </p><p><b> {</b></p><p><b> EX0=1;</b></p><p> j = i + Signature;</p><p> if(j > 11)</p><p&
105、gt;<b> {</b></p><p><b> j = j-12;</b></p><p> NewFreTab[i] = FreTab[j]*2;</p><p><b> }</b></p><p><b> else</b></
106、p><p> NewFreTab[i] = FreTab[j];</p><p> if(Octachord == 1)</p><p> NewFreTab[i]>>=2;</p><p> else if(Octachord == 3)</p><p> NewFreTab[i]<<=
107、2;</p><p> }</p><p> SoundLength = 0;</p><p> while(Sound[SoundLength] != 0x00)//計(jì)算歌曲長(zhǎng)度</p><p><b> {</b></p><p> SoundLength+=2;
108、</p><p><b> }</b></p><p> Point = 0;</p><p> Tone = Sound[Point];</p><p> Length = Sound[Point+1]; // 讀出第一個(gè)音符和它時(shí)時(shí)值</p><p> LDiv0 = 1
109、2000/Speed;// 算出1分音符的長(zhǎng)度(幾個(gè)10ms) </p><p> LDiv4 = LDiv0/4; // 算出4分音符的長(zhǎng)度 </p><p> LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最長(zhǎng)間隔標(biāo)準(zhǔn) </p><p> TR0 = 0;</p><p>
110、 TR1 = 1;</p><p> while(Point < SoundLength)</p><p><b> {</b></p><p> SL=Tone%10; //計(jì)算出音符 </p><p> SM=Tone/10%10; //計(jì)算出高低音 </p&g
111、t;<p> SH=Tone/100; //計(jì)算出是否升半 </p><p> CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出對(duì)應(yīng)音符的頻率 </p><p><b> if(SL!=0)</b></p><p><b> {</b>&
112、lt;/p><p> if (SM==1) CurrentFre >>= 2; //低音 </p><p> if (SM==3) CurrentFre <<= 2; //高音</p><p> Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);</p>
113、<p><b> //計(jì)算計(jì)數(shù)器初值</b></p><p> Sound_Temp_TH0 = Temp_T/256; </p><p> Sound_Temp_TL0 = Temp_T%256; </p><p> TH0 = Sound_Temp_TH0; </p><p> TL0 =
114、Sound_Temp_TL0 + 12; //加12是對(duì)中斷延時(shí)的補(bǔ)償 </p><p><b> }</b></p><p> SLen=LengthTab[Length%10]; //算出是幾分音符</p><p> XG=Length/10%10; //算出音符類型(0普通1連音2頓音) </p><p&
115、gt; FD=Length/100;</p><p> LDiv=LDiv0/SLen; //算出連音音符演奏的長(zhǎng)度(多少個(gè)10ms)</p><p> if (FD==1) </p><p> LDiv=LDiv+LDiv/2;</p><p> if(XG!=1)</p><p> if(XG=
116、=0) //算出普通音符的演奏長(zhǎng)度 </p><p> if (SLen<=4)</p><p> LDiv1=LDiv-LDiv4;</p><p><b> else</b></p><p> LDiv1=LDiv*SOUND_SPACE;</p><p><b&
117、gt; else</b></p><p> LDiv1=LDiv/2; //算出頓音的演奏長(zhǎng)度 </p><p><b> else</b></p><p> LDiv1=LDiv;</p><p> if(SL==0) LDiv1=0;</p><p> LDiv2=
118、LDiv-LDiv1; //算出不發(fā)音的長(zhǎng)度 </p><p> if (SL!=0)</p><p><b> {</b></p><p><b> TR0=1;</b></p><p> for(i=LDiv1;i>0;i--) //發(fā)規(guī)定長(zhǎng)度的音 </p>&
119、lt;p><b> {</b></p><p> while(TF1==0);</p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p><b> TF1=0;</b></p><p
120、><b> }</b></p><p><b> }</b></p><p> if(LDiv2!=0)</p><p><b> {</b></p><p> TR0=0; BeepIO=0;</p><p> for(i=LDiv2
121、;i>0;i--) //音符間的間隔</p><p><b> {</b></p><p> while(TF1==0);</p><p> TH1 = Sound_Temp_TH1;</p><p> TL1 = Sound_Temp_TL1;</p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子琴課程設(shè)計(jì)--模擬電子琴發(fā)聲控制系統(tǒng)
- 模擬電子琴發(fā)聲控制系統(tǒng)課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 電子琴單片機(jī)課程設(shè)計(jì)--電子琴模擬實(shí)驗(yàn)
- 電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子琴
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)論文
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)報(bào)告
- 電子琴的課程設(shè)計(jì)
- 課程設(shè)計(jì)--按鍵控制電子琴
- 電子琴的設(shè)計(jì) 課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論