電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告</p><p>  題目:基于單片機(jī)的電子琴設(shè)計(jì)</p><p>  2012年6月27日</p><p><b>  摘 要</b></p><p>  本設(shè)計(jì)是一個(gè)基于單片機(jī)的簡易電子琴,它是以單片機(jī)作為主控核心,設(shè)置鍵盤、蜂鳴器等外圍器件;另外還用到一些簡單

2、器件如:兩位數(shù)碼管,和NPN型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;兩位的數(shù)碼管進(jìn)行被操作的按鍵顯示;用NPN型三極管8550實(shí)現(xiàn)低音頻功率放大;最后用蜂鳴器進(jìn)行播放“結(jié)婚進(jìn)行曲”。</p><p>  本設(shè)計(jì)硬件部分主要由最小系統(tǒng),按鍵系統(tǒng)模塊、數(shù)碼管顯示模塊和蜂鳴器模塊組成。其軟件部分主要有主程序模塊、定時(shí)中斷程序、定時(shí)計(jì)數(shù)程序、顯示程序。</p><p> ?。?)最小系統(tǒng):

3、它是單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)基礎(chǔ)。它包括單片機(jī)的選擇、時(shí)鐘系統(tǒng)設(shè)計(jì)、復(fù)位電路設(shè)計(jì)、簡單的I/O口擴(kuò)展、掉電保護(hù)等。</p><p> ?。?)按鍵系統(tǒng)模塊:本設(shè)計(jì)采用10個(gè)按鍵,其中7個(gè)按鍵用來顯示7個(gè)音調(diào),其它3個(gè)按鍵可以進(jìn)行高低中音的切換,并自動播放已存歌曲。</p><p> ?。?)數(shù)碼管顯示模塊:SM420562段選端接在單片機(jī)的P0口,兩個(gè)位選端分別接在P2^0和P2^1。<

4、/p><p> ?。?)蜂鳴器模塊:此電子琴發(fā)音電路是通過三極管驅(qū)動蜂鳴器發(fā)音,經(jīng)過上拉電阻提高驅(qū)動能力。</p><p>  本次設(shè)計(jì)首先對單片機(jī)設(shè)計(jì)簡易電子琴仔細(xì)分析,接著制作硬件電路和編寫軟件的程序,最后進(jìn)行軟硬件的調(diào)試運(yùn)行。并且從原理圖,主要芯片,各模塊的原理和各個(gè)模塊的程序調(diào)試來闡述。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,實(shí)現(xiàn)高、中、低共21個(gè)音符的發(fā)音和顯示和音樂播放時(shí)的控制

5、顯示,并且能自動播放程序中編排的音樂。系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比高等,具有一定的使用和參考價(jià)值。</p><p><b>  目 錄</b></p><p><b>  1.概述4</b></p><p><b>  1.1設(shè)計(jì)背景4</b><

6、/p><p><b>  1.2設(shè)計(jì)意義4</b></p><p>  1.3 設(shè)計(jì)任務(wù)4</p><p>  2.系統(tǒng)總體方案及硬件設(shè)計(jì)5</p><p><b>  2.1總體設(shè)計(jì)5</b></p><p>  2.2單片機(jī)選型5</p><p&

7、gt;  2.3 原理框圖6</p><p>  2.4顯示部分設(shè)計(jì)7</p><p>  2.5 按鍵部分設(shè)計(jì)8</p><p>  2.6發(fā)音部分設(shè)計(jì)9</p><p>  3.系統(tǒng)軟件設(shè)計(jì)11</p><p>  3.1系統(tǒng)分析11</p><p>  3.2 參數(shù)計(jì)算13&

8、lt;/p><p>  3.3程序設(shè)計(jì)15</p><p>  4. Proteus軟件仿真18</p><p>  4.1硬件調(diào)試18</p><p>  4.2 軟件調(diào)試18</p><p>  4.4 結(jié)果分析19</p><p>  5. 課程設(shè)計(jì)體會20</p>

9、<p><b>  參考文獻(xiàn)21</b></p><p>  附1 源程序代碼22</p><p>  附2 系統(tǒng)原理圖27</p><p><b>  1.概述</b></p><p><b>  1.1設(shè)計(jì)背景</b></p><p

10、>  隨著電子科學(xué)技術(shù)的飛速發(fā)展,電子技術(shù)正在逐漸改善著人們的學(xué)習(xí)、生活、工作,因此開發(fā)本系統(tǒng)希望能夠給人們帶來更多的生活樂趣。</p><p>  基于當(dāng)前市場上的玩具需求量增大,其中電子琴就是一個(gè)很好的應(yīng)用方面。單片機(jī)技術(shù)使我們可以利用軟硬件來實(shí)現(xiàn)電子琴的功能,從而可以實(shí)現(xiàn)電子琴的微型化,可以用作玩具琴、音樂轉(zhuǎn)盤以及音樂童車等等。并且可以進(jìn)行一定的功能擴(kuò)展。鑒于傳統(tǒng)電子琴可以用鍵盤上的“1”到“A”鍵演

11、奏從低So到高DO等11個(gè)音,從而也可以通過單片機(jī)實(shí)現(xiàn)對十個(gè)按鍵的擴(kuò)展,實(shí)現(xiàn)七個(gè)音符鍵的高、中、低21個(gè)音調(diào)的顯示播放和任意音樂的自動播放。該設(shè)計(jì)將十個(gè)音鍵制作成獨(dú)立鍵盤,其中七個(gè)為音符鍵,三個(gè)為控制鍵,并用數(shù)碼管進(jìn)行顯示,使電子琴的功能更加完美。不但可以實(shí)現(xiàn)對按鍵的顯示,而且可以實(shí)現(xiàn)對音樂的自動存儲和播放,使該設(shè)計(jì)功能更加完善。</p><p><b>  1.2設(shè)計(jì)意義</b></

12、p><p>  該設(shè)計(jì)具有以下優(yōu)點(diǎn):</p><p>  ①可以方便得知播放的音符和音調(diào);</p><p>  ②比傳統(tǒng)電子琴功能更完善;</p><p>  ③制作簡單,成本低;</p><p><b>  1.3 設(shè)計(jì)任務(wù)</b></p><p>  實(shí)現(xiàn)電子琴發(fā)聲控制系統(tǒng)

13、;要求電路實(shí)現(xiàn)如下功能:</p><p>  利用蜂鳴器作為發(fā)聲部件,兩個(gè)數(shù)碼管作為顯示部件,設(shè)置10個(gè)按鍵,實(shí)現(xiàn)高音、中音、低音的1、2、3、4、5、6、7的發(fā)音。并在存儲一首歌曲的內(nèi)容,可以實(shí)現(xiàn)自動播放。</p><p>  用PROTEUS實(shí)現(xiàn)的電子琴仿真設(shè)計(jì)</p><p>  說明:單片機(jī)的工作時(shí)鐘頻率為11.0592MHz。</p><

14、;p>  2.系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p><b>  2.1總體設(shè)計(jì)</b></p><p>  采用AT89S52單片機(jī)作為主控芯片,設(shè)置鍵盤、蜂鳴器等外圍器件,另外還用到一些簡單器件如:兩位數(shù)碼管,和NPN型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;兩位的數(shù)碼管進(jìn)行被操作的按鍵顯示;用NPN型三極管8550實(shí)現(xiàn)低音頻功率放大;最后用蜂鳴器發(fā)音

15、。</p><p><b>  2.2單片機(jī)選型</b></p><p>  硬件電路要以單片機(jī)作為主控芯片,實(shí)現(xiàn)按鍵輸入音符和音調(diào),兩位數(shù)碼管的顯示以及低音頻功率放大和蜂鳴器發(fā)音。針對本設(shè)計(jì)的功能和用途,采用AT89S51單片機(jī)更好,實(shí)現(xiàn)功能完全,性價(jià)比較高,更適合本設(shè)計(jì)。</p><p><b>  時(shí)鐘電路 </b>

16、</p><p>  單片機(jī)內(nèi)部具有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器。通常在引腳XTALl和XTAL2跨接石英晶體和兩個(gè)補(bǔ)償電容構(gòu)成自激振蕩器,結(jié)構(gòu)圖2 中X1、C1、C2??梢愿鶕?jù)情況選擇6MHz、12MHz或24MHz等頻率的石英晶體,補(bǔ)償電容通常選擇30pF左右的瓷片電容。</p><p><b>  圖2-1、時(shí)鐘電路</b></p><

17、;p><b>  復(fù)位電路 </b></p><p>  單片機(jī)小系統(tǒng)常采用上電自動復(fù)位和手動按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)的復(fù)位操作。上電復(fù)位要求接通電源后,自動實(shí)現(xiàn)復(fù)位操作。手動復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,用按鈕開關(guān)操作使單片機(jī)復(fù)位。其結(jié)構(gòu)如下圖。上電自動復(fù)位通過電容C3充電來實(shí)現(xiàn)。手動按鍵復(fù)位是通過按鍵將電阻R1與VCC接通來實(shí)現(xiàn)。</p><p&

18、gt;<b>  圖2-2、復(fù)位電路</b></p><p><b>  2.3 原理框圖</b></p><p>  本系統(tǒng)有主控芯片89S52、發(fā)音單元、顯示模塊、按鍵模塊組成。</p><p><b>  圖2-3、原理框圖</b></p><p><b>  

19、2.4顯示部分設(shè)計(jì)</b></p><p><b>  數(shù)碼顯示方式</b></p><p>  數(shù)碼顯示有靜態(tài)顯示方式與動態(tài)顯示方式兩種。工作在靜態(tài)顯示方式時(shí),數(shù)碼管的位線與電源一直相連,數(shù)碼管中的二極管均處于通電狀態(tài),即在靜態(tài)工作方式下,顯示電路中數(shù)碼管的位選線是同時(shí)選通,而數(shù)碼管的段選線是獨(dú)立輸入。</p><p>  工作在

20、動態(tài)顯示方式時(shí),數(shù)碼管的位線在掃描控制電路的控制下按設(shè)定順序?qū)?,即電路中的?shù)碼管是逐個(gè)接通電源,數(shù)碼管的段選線以并聯(lián)方式與譯碼電路聯(lián)接,即在動態(tài)工作方式下,數(shù)碼管不是同時(shí)導(dǎo)通顯示而是按照設(shè)定順序分時(shí)導(dǎo)通顯示。</p><p><b>  八位數(shù)碼管的結(jié)構(gòu)</b></p><p>  本次課程設(shè)計(jì)的顯示電路采用兩位數(shù)碼管進(jìn)行顯示,由于此設(shè)計(jì)采用的是共陰極的,使用時(shí)不加

21、限流電阻。</p><p>  為了顯示字符,要為 LED 顯示器段碼,除了組成8字形的字符的 7段,另加上1個(gè)小數(shù)點(diǎn)位,共計(jì)8段, 因此提供給 LED 顯示器的顯示段碼為1個(gè)字節(jié)。</p><p>  圖2-4、數(shù)碼管電路</p><p>  2.5 按鍵部分設(shè)計(jì)</p><p><b>  鍵盤設(shè)計(jì)</b></

22、p><p>  鍵盤在單片機(jī)應(yīng)用系統(tǒng)中是一個(gè)關(guān)鍵的部件,它能實(shí)現(xiàn)向計(jì)算機(jī)輸入數(shù)據(jù),傳送命令等功能,是人工干預(yù)計(jì)算機(jī)的主要手段。</p><p>  鍵盤可以分為2類:獨(dú)立連接式鍵盤和矩陣式鍵盤。</p><p><b>  獨(dú)立連接式鍵盤</b></p><p>  獨(dú)立式按鍵是直接用I/O口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每

23、個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會影響其它I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個(gè)按鍵必須占用一根I/O口線,然而,在按鍵較多時(shí),I/O口線浪費(fèi)較大,不宜采用。</p><p>  獨(dú)立式按鍵軟件常采用查詢式結(jié)構(gòu)。先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。由于本程序較為簡單,為了使

24、用方便及節(jié)省資源,選擇獨(dú)立式鍵盤。下圖為獨(dú)立式鍵盤電路圖:</p><p>  圖2-5、獨(dú)立式鍵盤電路圖</p><p><b>  去抖</b></p><p>  鍵盤編程中主要考慮去抖動的問題。</p><p>  當(dāng)測試表明有鍵被按下之后,緊接著就進(jìn)行去抖動處理。因?yàn)殒I是機(jī)械開關(guān)結(jié)構(gòu),由于機(jī)械觸點(diǎn)的彈性及電壓突

25、跳等原因,在觸點(diǎn)閉合或斷開的瞬間會出現(xiàn)電壓抖動。為保證鍵識別的準(zhǔn)確,在電壓信號抖動的情況下不能進(jìn)行行狀態(tài)輸入。為此需進(jìn)行去抖動處理。去抖動有硬件和軟件兩種方法。硬件方法就是加去抖動電路,從根本上避免抖動的產(chǎn)生。軟件消抖,在第一次檢測到有鍵按下時(shí),執(zhí)行一段延時(shí)程序之后,再檢測此按鍵,如果第二次檢測結(jié)果仍為按下狀態(tài),CPU便確認(rèn)此按鍵己按下,消除了抖動。</p><p><b>  2.6發(fā)音部分設(shè)計(jì)<

26、;/b></p><p>  如下圖所示,發(fā)音電路是由蜂鳴器、三極管、上拉電阻構(gòu)成。由三極管來驅(qū)動揚(yáng)聲器發(fā)音的,同時(shí)加上拉電阻增強(qiáng)驅(qū)動電流,提高驅(qū)動能力。</p><p>  圖2-6、發(fā)音部分電路圖</p><p><b>  3.系統(tǒng)軟件設(shè)計(jì)</b></p><p><b>  3.1系統(tǒng)分析<

27、/b></p><p><b>  系統(tǒng)軟件的組成</b></p><p> ?。?)鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。</p><p> ?。?)功能轉(zhuǎn)移程序:對檢測到的按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,

28、我們設(shè)計(jì)的功能程序有兩種,即音色調(diào)節(jié)功能和自動播放樂曲的功能。</p><p>  (3)琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計(jì)時(shí)器賦值,使發(fā)出相應(yīng)頻率的聲音。</p><p> ?。?)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有按鍵按下。</p>

29、<p><b>  系統(tǒng)總體功能流程圖</b></p><p>  圖3-1、系統(tǒng)總體功能流程圖</p><p><b>  3.2 參數(shù)計(jì)算</b></p><p><b>  發(fā)音原理</b></p><p>  若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率

30、),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P1.0反相,然后重復(fù)計(jì)時(shí)再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階。</p><p>  例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs/1μs=956,每計(jì)數(shù)

31、956次時(shí)將I/O反相,就可得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr,式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值T的求法如下:T=65536-N=65536-fi÷2÷fr</p><p>  例如:設(shè)K=65536,fi=1MHz,求中音DO(261Hz)。T=6553

32、6-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。</p><p><b>  計(jì)算結(jié)果</b></p><p>  (1)單片機(jī)12MHZ晶振,中音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如表所示:</p><

33、;p>  采用查表程序進(jìn)行查表時(shí),可以為這個(gè)音符建立一個(gè)表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù):低音0-19之間,中音在20-39之間,高音在40-59之間。用單片機(jī)播放音樂,或者彈奏電子琴,實(shí)際上是按照特定的頻率,輸出一連串的方波。為了輸出合適的方波,首先應(yīng)該知道音符與頻率的關(guān)系。</p><p><b> ?。?)音調(diào)數(shù)據(jù)表</b></p><p&g

34、t;  上表中的頻率數(shù)值,有些過多,去掉不常用的黑鍵頻率,只是把白鍵對應(yīng)的數(shù)據(jù)存放在單片機(jī)中,即可滿足絕大部分的應(yīng)用需求。定義音調(diào)數(shù)據(jù)表的程序如下:</p><p>  DW 63628,63835,64021,64103,64260,64400,64524 64580,低音區(qū):1 2 3 4 5 6 7 DW 64580,64671,64777,64820,64898,64968,65030 65058中音

35、區(qū):1 2 3 4 5 6 7 DW 65058,65110,65157,65178,65217,65252,65283 65312高音區(qū):1 2 3 4 5 6 7</p><p>  把這個(gè)數(shù)據(jù)表,放在程序中,需要播音的時(shí)候,就從表中取出一個(gè)數(shù)據(jù)送到定時(shí)器,當(dāng)定時(shí)器溢出中斷的時(shí)候,再對輸出引腳取反,那么,在揚(yáng)聲器中,即可聽到上表中頻率的聲音。</p><p><b>  3

36、.3程序設(shè)計(jì)</b></p><p>  (1) 判斷音階(高中低音)子程序</p><p>  在軟件設(shè)計(jì)中采用yinjie代表音階,如下圖所示</p><p>  初始化狀態(tài)為中音(yinjie=1),電路中設(shè)計(jì)高、低兩個(gè)音階鍵。上電后,若無按鍵按下,則為中音模式。若音階鍵被按下,則如下流程圖所示,初始化后進(jìn)行按鍵掃描,在高音鍵按下,若初始yinji

37、e不為2,則令yinjie=2,進(jìn)入高音工作模式,若初始yinjie為2,則對yinjie進(jìn)行初始化,即另yinjie=1,重新進(jìn)入進(jìn)入中音工作模式,這樣即實(shí)現(xiàn)了高音鍵切換高、中音方式的轉(zhuǎn)換。同理,用低音鍵實(shí)現(xiàn)中、低音的切換。</p><p>  圖3-2、判斷音階(高中低音)子程序</p><p>  (2) 播放子程序(包括自動播放存儲音樂和按鍵發(fā)音)</p><p

38、>  本設(shè)計(jì)共兩種播放模式,包括自動播放存儲音樂和按鍵發(fā)音。上電后,首先開中斷并設(shè)定定時(shí)器0為工作方式1,當(dāng)自動播放鍵按下時(shí),進(jìn)入中斷,根據(jù)樂譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時(shí)器賦初值,即開始播放音樂。當(dāng)DO、RE、MI、FA、SO、LA、SI七種音符鍵按下時(shí),根據(jù)音階值(如3.3.1中高中低對應(yīng))和音符值在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時(shí)器賦初值,即按鍵發(fā)音。</p><p>  圖3-

39、3、播放子程序</p><p>  4. Proteus軟件仿真</p><p><b>  4.1硬件調(diào)試</b></p><p>  硬件調(diào)試主要是針對單片機(jī)部分進(jìn)行的調(diào)試。</p><p>  在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個(gè)調(diào)試工作的第一步,也是非常重要的一個(gè)步驟。在這部分調(diào)試中主要使

40、用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務(wù)。注意焊點(diǎn)之間,確保焊點(diǎn)沒有短接在一起,同時(shí)注意焊點(diǎn)的美觀,確保沒有開路以及短路的現(xiàn)象出現(xiàn)。</p><p>  在確保硬件電路正常且無異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗(yàn)電路是否接錯,同時(shí)還要檢驗(yàn)原理是否正確,在本次設(shè)計(jì)中,上電調(diào)試主要是檢測單片機(jī)控制部分、數(shù)碼管點(diǎn)亮部分、和音頻轉(zhuǎn)換電路硬件調(diào)試。</p>

41、<p>  1、數(shù)碼管LED電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到數(shù)碼管顯示數(shù)字。</p><p>  2、鍵盤單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動鍵盤可以發(fā)現(xiàn)各個(gè)按鍵對應(yīng)的音正確。</p><p><b>  4.2 軟件調(diào)試</b></p><p>  調(diào)試主要方法和技巧:通常一個(gè)調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點(diǎn)、查看

42、變量、更改數(shù)值。整個(gè)程序是一個(gè)主程序調(diào)用各個(gè)子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個(gè)程序都能平穩(wěn)運(yùn)行,各個(gè)模塊的子程序的正確與平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個(gè)子程序模塊進(jìn)行分別調(diào)試。</p><p>  4.3 仿真結(jié)果(任舉一例)</p><p>  圖4-1、低音音符RE仿真圖</p><p><b>  4.4 結(jié)果分析</b

43、></p><p>  根據(jù)仿真結(jié)果可知,本次課程設(shè)計(jì)能夠準(zhǔn)確并徹底的完成設(shè)計(jì)要求。左側(cè)數(shù)碼管可以顯示a、b、c三種結(jié)果,分別代表低音、中音和高音。右側(cè)數(shù)碼管可以顯示1、2、3、4、5、6、7七個(gè)數(shù)字,分別代表DO、RE、MI、FA、SO、LA、SI七種音符。下面以4.3為例具體進(jìn)行分析:當(dāng)系統(tǒng)上電后,若按下低音鍵(如圖P3.6),,則選定工作方式為低音模式,圖中a即代表低音。P0口連接數(shù)碼管段選端,右側(cè)數(shù)

44、碼管顯示的1即代表DO。兩位數(shù)碼管即代表低音DO。</p><p><b>  5. 課程設(shè)計(jì)體會</b></p><p>  總體來說,此次單片機(jī)課程設(shè)計(jì)使我們收獲良多,雖然課程設(shè)計(jì)的過程中遇到了很多困難與問題,但我們最終還是完成了設(shè)計(jì)的任務(wù)及要求。具體來說可以分為以下幾點(diǎn):第一,不夠細(xì)心,不夠嚴(yán)謹(jǐn)(如因?yàn)榇中拇笠舛稿e線);第二,因?qū)φn本理論的掌握度不夠?qū)е戮幊坛?/p>

45、現(xiàn)錯誤;第三,硬件方面,剛開始有的程序模塊不能實(shí)現(xiàn)預(yù)期的效果,對于有的硬件,在實(shí)物制作過程中焊了比較多的排線,同時(shí)對于整體各元器件的布局都有很高的要求。不過在向同學(xué)請教,各方面都有了不同程度的改善;第四,在做人方面,我認(rèn)識到,無論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。</p><p>  這次課程設(shè)計(jì)中,經(jīng)過我們的努力,在仿真軟件和實(shí)物上都實(shí)現(xiàn)了高、中、低21

46、個(gè)音符的發(fā)聲和音樂的自動播放,使我們有了一定的成就感,也使我們進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基本方法和步驟, 掌握了單片機(jī)仿真軟件Proteus的使用方法和鍵盤、顯示器在的單片機(jī)控制系統(tǒng)中的應(yīng)用,同時(shí)也掌握了撰寫課程設(shè)計(jì)報(bào)告的方法??傊ㄟ^這次課程設(shè)計(jì),我們都清楚明白了自己的能力有多深,想提高還得歸于多鍛煉,多動手,多向別人學(xué)習(xí)。</p><p><b>  

47、參考文獻(xiàn)</b></p><p>  【1】余發(fā)山、王福忠. 單片機(jī)原理及應(yīng)用技術(shù). 中國礦業(yè)大學(xué)出版社.2008年6月第1 版</p><p>  【2】楊凌霄. 微型計(jì)算機(jī)原理與應(yīng)用,中國礦業(yè)大學(xué)出版社.2008年8月第一版</p><p>  【3】康華光. 電子技術(shù)基礎(chǔ)(數(shù)字部分),高等教育出版社.第五版</p><p>

48、  【4】徐志軍,伊廷輝等. EDA技術(shù)與PLD設(shè)計(jì) 人民郵電出版社, 2006年2月第1版</p><p>  【5】李朝青. 單片機(jī)原理及接口技術(shù)[M]. 北京:北京航天航空大學(xué)出版色,2001.</p><p>  【6】胡漢才. 單片機(jī)原理及其接口技術(shù)[M]. 北京:清華大學(xué)出版社,2004.</p><p>  【7】 彭偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)1

49、00例.電子工業(yè)出版社.2009年</p><p>  【8】 李建忠.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué),2002年</p><p>  【9】 韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004</p><p>  【10】 馬忠梅等.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006</p><p>&l

50、t;b>  附1 源程序代碼</b></p><p>  #include<reg52.h> </p><p>  #define keyport P1</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p

51、><p>  uchar high,low; //定時(shí)器預(yù)裝值的高8位和低8位</p><p>  sbit speak=P3^0;</p><p>  sbit gao=P3^5;</p><p>  sbit di=P3^6;</p><p>  sbit zdbf=P3^7;</p><p&

52、gt;  uchar yinjie=1;</p><p>  uchar time;</p><p>  uchar n=0;</p><p>  uchar bo=0;</p><p>  uchar code fre[][2]= { </p><p>  0x8c,0xf8,</p><p&

53、gt;  0x5b,0xf9,</p><p>  0x15,0xfa,</p><p>  0x67,0xfa,</p><p>  0x90,0xfb,</p><p>  0xae,0xfb,</p><p>  0x0c,0xfc, //低音</p><p>  0x44,

54、0xfc,</p><p>  0xac,0xfc,</p><p>  0x09,0xfd,</p><p>  0x34,0xfd,</p><p>  0x82,0xfd,</p><p>  0xc2,0xfd,</p><p>  0x06,0xfe, //中音<

55、/p><p>  0x22,0xfe,</p><p>  0x56,0xfe,</p><p>  0x85,0xfe,</p><p>  0x9a,0xfe,</p><p>  0xc1,0xfe,</p><p>  0xe4,0xfe,</p><p>  0x0

56、3,0xff, //高音</p><p><b>  };</b></p><p>  void delay(uint );</p><p>  void ITimer0(void);//定時(shí)器初始化</p><p>  void key(void);</p><p>  void dtxs

57、(int,int);</p><p>  void song()</p><p><b>  {</b></p><p><b>  TH0=high;</b></p><p><b>  TL0=low;</b></p><p><b>  

58、TR0=1;</b></p><p>  delay(time*180); </p><p><b>  }</b></p><p>  void yinyue()</p><p><b>  {</b></p><p>

59、;  uchar code hls[]={ 1,2,4, 4,2,3, 4,2,1, 4,2,8, 1,2,4, 5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3, </p><p>  7,2,1, 7,2,4, 6,2,3, 5,2,1, 4,2,4, 3,2,3, 4,2,1, 5,2,8, 1,2,4, 4,2,3, 4,2,1, 4,2,8, 1,2,4, </p>

60、<p>  5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3, 6,2,1, 1,3,4, 6,2,3, 4,2,1, 4,2,8, 7,2,4, 6,2,3, 5,2,1, </p><p>  2,2,4, 2,2,4, 3,2,4, 4,2,3, 5,2,1, 5,2,8, 7,2,4, 6,2,3, 5,2,1, 2,2,4, 2,2,4, 3,2,4, 4,2,3, <

61、/p><p>  5,2,8, 1,2,4, 4,2,3, 4,2,1, 1,2,4, 5,2,3, 3,2,1, 4,2,8, 1,2,4, 4,2,3, 6,2,1, 1,3,4, 6,2,3, </p><p>  4,2,1, 2,2,4, 5,2,3, 6,2,1, 4,2,8, 2,2,4, 5,2,3, 6,2,1, 4,2,8, 4,2,8</p><p&g

62、t;<b>  };</b></p><p><b>  uchar m;</b></p><p><b>  n=0;</b></p><p>  while(n<216)</p><p><b>  {</b></p><p&

63、gt;  m=hls[n]+7*(hls[n+1]-1)-1;</p><p>  high=fre[m][1];</p><p>  low=fre[m][0];</p><p>  time=hls[n+2];</p><p><b>  n=n+3;</b></p><p><b>

64、;  song();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main (void)</p><p><b>  {</b></p><p>  uc

65、har num;</p><p>  ITimer0();</p><p><b>  speak=0;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  key(

66、);</b></p><p>  switch(keyport)</p><p><b>  {</b></p><p>  case 0xfe:num=1;break;</p><p>  case 0xfd:num=2;break;</p><p>  case 0xfb:num=

67、 3;break;</p><p>  case 0xf7:num= 4;break;</p><p>  case 0xef:num= 5;break;</p><p>  case 0xdf:num= 6;break;</p><p>  case 0xbf:num= 7;break;</p><p>  case

68、 0x7f:num= 8;break;</p><p>  default:num= 0;break;</p><p><b>  }</b></p><p>  if(num==0)</p><p><b>  {</b></p><p><b>  TR0=0;

69、</b></p><p><b>  speak=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  high=

70、fre[7*yinjie+num-1][1];</p><p>  low=fre[7*yinjie+num-1][0];</p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  dtxs(yinjie,num);</p><

71、p><b>  }</b></p><p><b>  }</b></p><p>  void ITimer0(void)</p><p><b>  {</b></p><p>  TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用&qu

72、ot;|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響 </p><p>  EA=1; //總中斷打開</p><p>  ET0=1; //定時(shí)器中斷打開</p><p>  TR0=1; //定時(shí)器開關(guān)打開</p><p><b&g

73、t;  }</b></p><p>  void Timer0_isr(void) interrupt 1</p><p><b>  {</b></p><p><b>  TH0=high;</b></p><p><b>  TL0=low;</b></

74、p><p>  speak=!speak;</p><p>  if(zdbf==0)</p><p><b>  {</b></p><p>  delay(100);</p><p>  if(zdbf==0)</p><p><b>  {</b>&

75、lt;/p><p><b>  bo++;</b></p><p>  if(bo/2==1)</p><p>  {delay(100);</p><p>  if(n<216)n=500;//n賦值大于216,跳出while,停止音樂</p><p><b>  else

76、n=0;</b></p><p>  dtxs(3,0);</p><p><b>  }</b></p><p>  if(bo%2==0)</p><p>  {delay(100);</p><p>  n=500;//n賦值大于216,跳出while,停止音樂</

77、p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }/**/</b></p><p><b>  }</b></p><p>  void key()</p><

78、;p><b>  {</b></p><p>  if(zdbf==0)</p><p>  {delay(100);</p><p>  if(zdbf==0)</p><p><b>  yinyue();</b></p><p><b>  }<

79、/b></p><p>  if(gao==0)</p><p><b>  {</b></p><p>  delay(100);</p><p>  if(gao==0)</p><p><b>  {</b></p><p>  delay

80、(100);</p><p>  if(yinjie==2)</p><p><b>  yinjie=1;</b></p><p>  else yinjie=2;</p><p><b>  }</b></p><p><b>  }</b><

81、/p><p><b>  if(di==0)</b></p><p><b>  {</b></p><p>  delay(100);</p><p><b>  if(di==0)</b></p><p><b>  {</b>&l

82、t;/p><p>  delay(100);</p><p>  if(yinjie==0)</p><p><b>  yinjie=1;</b></p><p>  else yinjie=0;</p><p><b>  }</b></p><p>

83、<b>  }</b></p><p><b>  }</b></p><p>  void delay(unsigned int x)</p><p><b>  { </b></p><p><b>  int a,b;</b></p&

84、gt;<p>  for(a=x;a>0;a--)</p><p>  for(b=110;b>0;b--);</p><p><b>  }</b></p><p>  void dtxs(k,l)//k是工作方式,l是按鍵號</p><p><b>  {</b><

85、;/p><p>  char seg[12]={0x77,0x7c,0x39,0x3f,0x06,0x5b,0x4f,0x66,0x6d,</p><p>  0x7d,0x07,0xff};</p><p>  P2=0x01;//選擇第一個(gè)數(shù)碼管</p><p>  P0=seg[k];//顯示工作方式</p><p>

86、;<b>  delay(4);</b></p><p>  P2=0x02;//選擇第二個(gè)數(shù)碼管</p><p>  P0=seg[l+3];//顯示按鍵號</p><p><b>  delay(4);</b></p><p><b>  }</b></p>

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論