版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 單片機原理與應(yīng)用</b></p><p> 課程設(shè)計(學(xué)年論文)</p><p><b> 說明書</b></p><p> 課題名稱: 電子音樂播放器 </p><p> 學(xué)生學(xué)號: ************
2、 </p><p> 專業(yè)班級: ******** </p><p> 學(xué)生姓名: ****** </p><p> 學(xué)生成績: </p><
3、p> 指導(dǎo)教師: ****** </p><p> 課題工作時間: 2014.12.29 至 2015.1.9 </p><p><b> 填寫說明:</b></p><p> 1. 一、二、三項由指導(dǎo)教師在課程設(shè)計(學(xué)年論文)開始前填寫并交由學(xué)生保管;&l
4、t;/p><p> 2. 四、五兩項由學(xué)生在完成課程設(shè)計后填寫,并將此表與課程設(shè)計一同裝訂成冊交給指導(dǎo)教師;</p><p> 3. 成績評定由指導(dǎo)教師按評定標準評分。</p><p> 4. 此表格填寫好后與正文一同裝訂成冊。</p><p> 課程設(shè)計評審標準(指導(dǎo)教師用)</p><p><b&g
5、t; 目 錄</b></p><p><b> 摘 要</b></p><p><b> 目 錄1</b></p><p><b> 第一章 緒論2</b></p><p> 1.1課程設(shè)計目的2</p><p> 1
6、.2課程設(shè)計任務(wù)2</p><p> 1.3課程設(shè)計要求2</p><p> 1.4課程設(shè)計的意義2</p><p> 第二章 設(shè)計原理及總體方案選擇3</p><p> 2.1 基本原理簡述3</p><p> 2.2 關(guān)于音樂的原理知識4</p><p> 第三章 音
7、樂播放器硬件電路的設(shè)計和調(diào)試6</p><p> 3.1 硬件原理電路的設(shè)計6</p><p> 3.1.1 時鐘與復(fù)位模塊6</p><p> 3.1.2 按鍵選擇模塊6</p><p> 3.1.3 數(shù)碼管顯示模塊7</p><p> 3.1.4 下載電路模塊7</p><
8、p> 3.1.5 US供電模塊8</p><p> 3.1.6 蜂鳴器模塊8</p><p> 3.1.7 整個原理圖9</p><p> 3.2 ATMEL 89C51簡介10</p><p> 3.2.1 AT89C51單片機10</p><p> 3.2.2 引腳介紹10</p
9、><p> 第四章 軟件編程設(shè)計與綜合測試11</p><p> 4.1 編程思路簡述11</p><p> 4.2 編程方案的設(shè)計13</p><p> 4.2.1 軟件功能選擇13</p><p> 4.2.2 程序流程圖13</p><p> 4.2.3 程序清單15
10、</p><p> 4.2.4 軟件調(diào)試15</p><p><b> 參考文獻20</b></p><p><b> 心得體會21</b></p><p><b> 第一章 緒論</b></p><p><b> 1.1課程設(shè)
11、計目的</b></p><p> 應(yīng)用單片機,利用它的原理組成一個音樂播放器。利用按鍵進行音調(diào)選擇,即不同的按鍵產(chǎn)生不同的音調(diào),蜂鳴器發(fā)出1234567音調(diào),并在數(shù)碼管上顯示。編寫2支歌曲,并可進行選擇播放。</p><p><b> 1.2課程設(shè)計任務(wù)</b></p><p> 以單片機為核心部件組成一個音樂播放器。<
12、/p><p> 利用單片機的定時器產(chǎn)生樂譜的各種頻率方波,由蜂鳴器發(fā)出聲音。</p><p> 自行定義按鍵盤,每按一鍵,可以發(fā)出對應(yīng)的音調(diào),或者可選擇按鍵進行歌曲播放。</p><p> 在數(shù)碼管上顯示Do、Re、Mi、Fa、Sol、La、Si音調(diào)所對應(yīng)的1、2、3、4、5、6、7。</p><p><b> 1.3課程設(shè)計要
13、求</b></p><p> 1)硬件電路的搭建是用采用AltiumDesigner6.9。</p><p> 2)采用單片機C語言進行編程。</p><p> 3)完成硬件與軟件調(diào)試綜合調(diào)試,實現(xiàn)預(yù)定功能,并寫出課程設(shè)計報告。</p><p> 1.4課程設(shè)計的意義</p><p> 通過自己動
14、手設(shè)計制作單片及組成的器件,深入了解了單片機的實際應(yīng)用,能更深地理解課堂上所學(xué)的內(nèi)容,使得單調(diào)的理論知識與實際聯(lián)系起來,幫助我們更好的理解。同時學(xué)會PCB制版的過程,熟悉AltiumDesigner6.9這個軟件。</p><p> 第二章 設(shè)計原理及總體方案選擇</p><p> 2.1 基本原理簡述</p><p> 聲音是通過振動產(chǎn)生的。單片機對某一引腳
15、以一定的頻率循環(huán)置1置0,該引腳便產(chǎn)生一定頻率的方波,方波通過放大,作用于一定的物理實件(蜂鳴器),就產(chǎn)生了一定頻率的聲音。若改變輸出方波的頻率,產(chǎn)生的聲音隨之改變。通過控制輸出方波的時間長短,聲音的長短也可以得到控制,因此,根據(jù)樂譜,以類似的音及同樣的節(jié)拍,單片機就可以產(chǎn)生電子音樂。音樂的播放模式及選擇可以通過按鍵的輸入得以實現(xiàn)。</p><p> 為簡便起見,以一定的頻率方波產(chǎn)生的音在其每個周期內(nèi)高低幅值得
16、時間各占一半因此,輸出引腳在每個方波周期內(nèi)要動作兩次:一次升高,一次降低。即輸出引腳的頻率是原音頻率的兩倍。</p><p> 方波的產(chǎn)生由定時器控制。定時器T0工作在定時方式1,改變TH0及TL0,產(chǎn)生不同的音頻頻率。必須考慮到中斷響應(yīng)時間的影響,尤其在高音部分,若忽略中斷響應(yīng)時間,會使音頻頻率比標準值低幾十Hz,相當(dāng)于1/4音程,很容易聽出來,對低音部分影響不大。一般中斷響應(yīng)時間為3~6個機器周期,經(jīng)過反復(fù)
17、試驗取5個機器周期作為校正最為恰當(dāng),表1中所給的定時初值就是考慮中斷響應(yīng)后的定時常數(shù)。另外,為避免T1中斷可能引起雜音,應(yīng)將定時器T0中斷設(shè)為高優(yōu)先級。這樣編寫出來的程序播放的音與標準音叉進行差頻校音,非常準確和諧。</p><p> 音樂播放器的基本硬件電路有六部分組成:單片機、時鐘與復(fù)位電路、選擇按鍵輸入電路、音頻發(fā)生器、蜂鳴器、數(shù)碼管顯示。音樂播放器硬件電路設(shè)計框圖如圖2.1所示。</p>
18、<p> 圖2.1 音樂播放器硬件電路設(shè)計框圖</p><p> 利用單片機內(nèi)部定時器/計數(shù)器T0與P2.0引腳配合,構(gòu)成音頻發(fā)生器,與外置電路組成音頻放大器,驅(qū)動蜂鳴器輸出。選擇按鍵通過P1.0 至P1.7。 </p><p> 2.2 關(guān)于音樂的原理知識</p><p> 在音樂中使用的各個固定頻率的音叫音級[1]。常用符號C、D、E、F、G
19、、A、B、c、d、e、……a1、b1、c2、d2……表示,它們對應(yīng)于鋼琴上的白鍵。兩音之間音高的距離叫音程。在上述音級中,E與F、B與C之間音高的距離僅為其它相鄰音級之間距離的一半,稱它們之間的音程為半音音程,而稱其它相鄰各音之間的距離為全音音程。在這些全音音程之間又加入新的半音音級,用符號﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,對應(yīng)于鋼琴上的黑鍵。音持續(xù)時間的長短即時值,一般用拍數(shù)表示。休止符表示暫停發(fā)音。</
20、p><p> 表2.1 各音符及對應(yīng)頻率</p><p> 每個音符分為簡譜碼和節(jié)拍碼。簡譜碼為D0-L到SI-H,節(jié)拍碼為1到16。對應(yīng)的節(jié)拍表如表2.2所示。</p><p><b> 對應(yīng)的拍子: </b></p><p> 2/2。。。。。。。。。。。以二分音符為一拍,每小節(jié)有兩拍(二分音符代表一拍)<
21、/p><p> 2/4。。。。。。。。。。。以四分音符為一拍,每小節(jié)有兩拍(四分音符代表一拍)</p><p> 3/4。。。。。。。。。。。以四分音符為一拍,每小節(jié)有三拍(四分音符代表一拍)</p><p> 4/4。。。。。。。。。。。以四分音符為一拍,每小節(jié)有四拍(四分音符代表一拍)</p><p><b> 表2.2 節(jié)
22、拍表</b></p><p> 第三章 音樂播放器硬件電路的設(shè)計和調(diào)試</p><p> 3.1 硬件原理電路的設(shè)計</p><p> 3.1.1 時鐘與復(fù)位模塊</p><p> 由電容,電位器,按鍵組成復(fù)位電路部分,該電路接于單片機的RESET端可以通過按鍵達到手動復(fù)位的效果,也可以通過電位器和電容組成上電復(fù)位電路。通
23、過復(fù)位電路使單片機回到初始狀態(tài)。</p><p> 圖 3.1 復(fù)位電路圖 3.2 晶振時鐘電路</p><p> 3.1.2 按鍵選擇模塊</p><p> 利用P1.0到P1.7與構(gòu)成按鍵陣列,可以掃描十六個按鍵,但本次設(shè)計只用到九個按鍵。</p><p><b> 圖3.3矩陣
24、鍵盤</b></p><p> 3.1.3 數(shù)碼管顯示模塊 </p><p><b> 圖3.4數(shù)碼管</b></p><p> 3.1.4下載電路模塊</p><p><b> 圖3.5下載電路</b></p><p> 3.1.5 USB供電模塊&l
25、t;/p><p> 圖3.6 USB供電電路</p><p> 3.1.6 蜂鳴器模塊</p><p><b> 圖3.7 蜂鳴器</b></p><p> 3.1.7 整個原理圖</p><p> 綜合以上功能模塊,連接于單片機,繪制原理圖如圖3.8所示。</p><
26、p> 圖 3.8 音樂播放器電路原理圖</p><p><b> PCB完成版:</b></p><p> 3.2 ATMEL 89C51簡介</p><p> 3.2.1 AT89C51單片機</p><p> AT89C51是美國ATMEL公司推出的系列單片機,將多種功能的8位CPU與FPEROM(快
27、閃可編程/擦除只讀存儲器)結(jié)合在一個芯片上,是一種低功耗、高性能的CMOS控制器,為很多嵌入式控制應(yīng)用提供了非常靈活而又價格適宜的方案,其性能價格比遠高于同類芯片。它與MCS-51指令系統(tǒng)兼容,片內(nèi)FPEROM允許對程序存儲器在線重復(fù)編程,也可用常規(guī)的EPROM編程器編程,可循環(huán)寫入/擦除1000次。89C51內(nèi)含4KB的FPEROM,一般的EEPROM的字節(jié)擦除時間和寫入時間基本上均為10ms,對于任一個實時控制系統(tǒng)來說,這樣長的時間
28、是不可能在線修改程序的。</p><p> 3.2.2 引腳介紹</p><p><b> 圖3.7 引腳圖</b></p><p> 第四章 軟件編程設(shè)計與綜合測試</p><p> 4.1 編程思路簡述</p><p> 要產(chǎn)生音頻信號,只要算出某一音頻的周期(頻率的倒數(shù)),將此
29、周期除以2即為半周期的時間,利用定時器計時此半周期時間,計時到后取反輸出,重復(fù)此過程即得到此頻率的聲音信號。此信號從P2.0腳輸出。</p><p> 定時器T0工作在定時方式1,改變TH0及TL0,產(chǎn)生不同的音頻頻率。必須考慮到中斷響應(yīng)時間的影響,尤其在高音部分,若忽略中斷響應(yīng)時間,會使音頻頻率比標準值低幾十Hz,相當(dāng)于1/4音程,很容易聽出來,對低音部分影響不大。一般中斷響應(yīng)時間為3~6個機器周期,經(jīng)過反復(fù)
30、試驗取5個機器周期作為校正最為恰當(dāng),表2.1中所給的定時初值就是考慮中斷響應(yīng)后的定時常數(shù)。另外,為避免T1中斷可能引起雜音,應(yīng)將定時器T0中斷設(shè)為高優(yōu)先級。這樣編寫出來的程序播放的音與標準音叉進行差頻校音,非常準確和諧。本設(shè)計中單片機晶振頻率為11.0592MHz。</p><p> 每個音符使用兩個字節(jié)。低位字節(jié)(偶地址)代表音級,00H表示不發(fā)音(休止符),01H~30H依次表示的音級為c、﹟c、d、﹟d、
31、e、f、……a3、﹟a3、b3 ,詳見表2.1。高位字節(jié)(奇地址)代表音符的時值(拍數(shù)),00H~0FH依次表示拍數(shù)為1/8拍(0.10s)~8拍(6.40s),見表2.2。樂曲的結(jié)束標志是兩個字節(jié):0FFH,0FFH。</p><p> 設(shè)計延時程序50ms,來控制節(jié)拍,改變延時程序的延遲時間,即可實現(xiàn)歌曲的快慢演奏。</p><p> 主程序的任務(wù)是按順序讀取數(shù)據(jù)表中的字節(jié),根據(jù)情
32、況調(diào)用音級子程序和演唱子程序,啟動定時器T0;通過延時控制節(jié)拍,并循環(huán)回音級子程序,等待演唱完畢。</p><p> 要編寫的樂譜按要求以音符字節(jié)數(shù)據(jù)表的形式存放在程序中,改變樂曲就是通過改變該數(shù)據(jù)表的內(nèi)容來實現(xiàn)的。</p><p> 定時器T0的中斷服務(wù)程序任務(wù)是取反P2.0輸出產(chǎn)生方波,重新為TH0,TL0送初值。</p><p> 蜂鳴器產(chǎn)生音樂的2個關(guān)
33、鍵參數(shù)是頻率和音長。一個節(jié)拍的時間大概是400-500ms之間。用定時器定時50ms,8個定時時間就是一個節(jié)拍,即為Rhythm。</p><p><b> 音調(diào)頻率如下表:</b></p><p> 根據(jù)表中的頻率計算出周期T=1/f;則T/2就是電平的持續(xù)時間;得到的T/2再除以15us就可以得到帶參延時函數(shù)delay_15us的入口參數(shù),即為Tone:<
34、;/p><p> 依次按照音調(diào),節(jié)拍,音調(diào),節(jié)拍的順序?qū)懭氲綌?shù)組中,并在結(jié)尾處加入休止符0即可完成整個音樂的播放。</p><p> 4.2 編程方案的設(shè)計</p><p> 4.2.1 軟件功能選擇</p><p> 1)對于九個按鍵的功能設(shè)計,按鍵0~7控制Do、Re、Mi、Fa、Sol、La、Si,其余按鍵8和按鍵9對應(yīng)兩首歌曲。九
35、個按鍵通過P1口八條引腳構(gòu)成行列掃描結(jié)構(gòu),對用戶的按鍵位置進行判斷。</p><p> 2)通過以上的分析思考,我們看到想實現(xiàn)音樂的輸出是并不困難。這也就基本上完成了我們既定的基本方案??墒侨绾巫寯?shù)碼管同步顯示1、2、3、4、5、6、7。在用戶按鍵之后由按鍵控制模塊判斷選擇的歌曲,通過CPU控制顯示程序中已有的歌曲或者音調(diào)和數(shù)碼管顯示。</p><p> 4.2.2 程序流程圖<
36、/p><p><b> ?。ú僮?)</b></p><p><b> N </b></p><p><b> Y</b></p><p> 圖 4.1 音樂播放器程序流程圖</p><p> 4.2.3 程序清單</p><p&
37、gt; 主程序(main.c):</p><p> #include<reg51.h></p><p> #include"PlayMusic.h"</p><p> #include"KeyScan.h"</p><p> #define SegPorts P0//數(shù)碼管接口&l
38、t;/p><p> unsigned char nTimes;</p><p> unsigned char Seg_Code[]=</p><p><b> {</b></p><p> 0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0xff,0xff</p><p>
39、; };//1-7的共陽極段碼顯示</p><p> int main(void)</p><p><b> {</b></p><p> char KeyTemp;</p><p> TH0 =(65536-50000)/256;</p><p> TL0 =(65536-50000
40、)%256;</p><p> TMOD=0x01;</p><p><b> ET0 =1;</b></p><p><b> EA =1;</b></p><p><b> TR0 =1;</b></p><p><b> wh
41、ile(1)</b></p><p><b> {</b></p><p> KeyTemp=KeyScan();//暫存按鍵值</p><p> if(KeyTemp ==-1||(KeyTemp<=15&&KeyTemp>=9)) continue;</p><p>
42、; //當(dāng)按鍵值等于返回值-1或者按到按鍵矩陣上未用到的按鍵,則不往下執(zhí)行!</p><p> SegPorts=Seg_Code[KeyTemp];</p><p> //如果按鍵值與按鍵矩陣相對應(yīng),則往下執(zhí)行并顯示相對應(yīng)的音調(diào)</p><p> MusicPlayer(KeyTemp);</p><p><b> //
43、相對應(yīng)的音樂</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> void Tone_Long()interrupt 1</p><p
44、><b> {</b></p><p> TH0 =(65536-50000)/256; //50ms的定時,對應(yīng)相應(yīng)節(jié)拍,查資料知道一個節(jié)拍對應(yīng)400ms~500ms</p><p> TL0 =(65536-50000)%256;</p><p><b> nTimes++;</b></p>
45、;<p><b> }</b></p><p><b> 按鍵掃描程序</b></p><p> 頭文件(KeyScan.h):</p><p> #include<reg51.h></p><p> #define KeyPorts P1 //鍵盤接口</
46、p><p> char KeyScan(void);//按鍵掃描函數(shù)</p><p> extern void delay_15us(unsigned char n);//延時時間計算T=(15*n)us</p><p> C文件(KeyScan.c):</p><p> #include"KeyScan.h"<
47、/p><p> char KeyScan()</p><p><b> {</b></p><p> char KeyValue;</p><p> KeyPorts=0x0f; //行掃描</p><p> while(KeyPorts != 0x0f)<
48、;/p><p><b> {</b></p><p> delay_15us(100);</p><p> while(KeyPorts !=0x0f)</p><p><b> {</b></p><p> switch(KeyPorts)</p>&l
49、t;p><b> {</b></p><p> case 0x0e: KeyValue=0; break;</p><p> case 0x0d: KeyValue=1; break;</p><p> case 0x0b: KeyValue=2; break;</p><p> case 0x07: K
50、eyValue=3; break;</p><p> default:break;</p><p><b> }</b></p><p> KeyPorts=0xf0;//列掃描</p><p> delay_15us(100);</p><p> switch(KeyPorts)<
51、;/p><p><b> {</b></p><p> case 0xe0: KeyValue=KeyValue*4; break;</p><p> case 0xd0: KeyValue=KeyValue*4+1;break;</p><p> case 0xb0: KeyValue=KeyValue*4+2;
52、break;</p><p> case 0x70: KeyValue=KeyValue*4+3;break;</p><p> default:break;</p><p><b> }</b></p><p> while(KeyPorts!=0xf0);//松手檢測</p><p>
53、 return KeyValue;</p><p><b> }</b></p><p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> void delay_15us(
54、unsigned char n) //n*15+8=T/2,用來設(shè)置音調(diào)的</p><p><b> {</b></p><p> unsigned char x,y;</p><p><b> x=n;</b></p><p> while(x!=0)</p><p
55、><b> {</b></p><p><b> y=4;</b></p><p> while(y!=0)</p><p><b> {</b></p><p><b> y--;</b></p><p>
56、<b> }</b></p><p><b> x--;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 音樂播放程序</b></p><p&
57、gt; 頭文件(PlayMusic.h):</p><p> #include<reg51.h></p><p> #include"KeyScan.h"</p><p> sbit Voice=P2^0; //蜂鳴器接口</p><p> extern unsigned cha
58、r nTimes; //全局變量</p><p> voidMusicPlayer(char Music_Channel);</p><p> C文件(PlayMusic.c):</p><p> #include"PlayMusic.h"</p><p> unsigned char Do[] ={127,1
59、0,0}; //對應(yīng){音調(diào)n,節(jié)拍,停止}</p><p> unsigned char Re[] ={113,10,0};</p><p> unsigned char Mi[] ={101,10,0};</p><p> unsigned char Fa[] ={95,10,0};</p><p> unsigned c
60、har Sol[]={85,10,0};</p><p> unsigned char La[] ={75,10,0};</p><p> unsigned char Si[] ={67,10,0};</p><p> unsigned char code Music_1[]={</p><p> 31,28,37,4,31,2
61、8,42,24,37,4,42,4,37,36,31,28,37,4,</p><p> 31,28,42,4,42,20,37,4,42,4,37,4,37,32,37,12,33,4,</p><p> 31,4,25,8,38,4,31,4,33,4,37,4,33,4,37,4,33,16,42,12,</p><p> 37,4,33,4,28,4,
62、31,4,33,4,37,4,42,4,37,4,42,4,37,16,</p><p> 37,12,33,4,31,4,25,4,28,4,31,4,33,4,37,4,33,4,37,4,</p><p> 33,16,42,12,37,4,33,4,28,4,31,4,33,4,25,8,31,8,28,8,</p><p> 37,8,25,4,28
63、,4,31,4,28,4,37,16,25,18,31,8,28,16,21,4,</p><p> 25,4,33,8,31,8,31,4,33,4,37,8,16,4,31,4,28,8,42,8,</p><p> 19,4,21,4,25,20,28,4,31,8,28,8,25,4,28,4,25,4,28,4,</p><p> 21,4,21,3
64、2,0</p><p> }; //小蘋果</p><p> unsigned char code Music_2[]={</p><p> 56,4,50,2,42,6,37,4,56,4,50,2,42,6,37,4,50,8,56,8,</p><p> 63,16,37,12,42,8,50,4,56,4,50,
65、4,56,4,63,2,50,18,</p><p> 56,4,50,2,46,2,37,8,56,4,50,2,42,6,37,4,50,4,56,4,</p><p> 50,4,56,4,63,16,37,12,42,8,50,4,56,4,50,4,56,4,63,2,</p><p> 50,18,56,4,50,2,42,6,37,4,56,4,
66、50,6,37,4,50,4,56,4,</p><p> 50,4,42,4,63,12,37,12,42,8,50,4,56,2,50,4,56,2,63,16,</p><p> 50,2,42,4,50,2,42,4,50,4,37,8,50,4,56,4,63,4,37,4,63,4,</p><p> 42,4,50,16,37,12,42,4,3
67、7,8,25,4,31,4,28,16,42,4,37,4,</p><p> 21,4,25,6,37,4,28,12,31,4,33,4,42,4,28,4,25,4,31,12,</p><p> 28,4,25,4,28,6,31,4,28,4,31,4,21,4,19,4,25,16,42,4,37,4,</p><p> 21,4,25,6,19,
68、4,28,12,31,4,3,4,42,4,28,4,25,3,31,8,37,4,</p><p> 25,4,31,4,31,2,37,6,25,4,31,8,37,8,31,12,0</p><p> }; //清明雨上</p><p> void MusicPlayer(char Music_Channel)</p><p
69、><b> {</b></p><p> unsigned char *p; </p><p> unsigned char Tone,Rhythm;</p><p> switch(Music_Channel)</p><p><b> {</b></p><
70、p> case 0: p=Do; break;</p><p> case 1: p=Re; break;</p><p> case 2: p=Mi; break;</p><p> case 3: p=Fa; break;</p><p> case 4: p=Sol;break;</p><p>
71、 case 5: p=La; break;</p><p> case 6: p=Si; break;</p><p> case 7: p=Music_1; break;</p><p> case 8: p=Music_2; break; //指向不同的數(shù)組,播放不同的音樂</p><p> default :return;
72、</p><p><b> }</b></p><p> Tone=*p; //音調(diào)</p><p><b> p++;</b></p><p> Rhythm=*p; //節(jié)拍</p><p><b> p++;
73、</b></p><p> while(Tone != 0)</p><p><b> { </b></p><p> //0x00作為休止符</p><p><b> nTimes=0;</b></p><p> while(nTimes != Rh
74、ythm)</p><p><b> {</b></p><p> Voice=~Voice;</p><p> delay_15us(Tone);</p><p><b> }</b></p><p> Tone=*(p++);</p><
75、;p> Rhythm=*(p++);</p><p><b> }</b></p><p><b> }</b></p><p><b> 4.2.4軟件調(diào)試</b></p><p> 調(diào)試過程主要是在Keil4軟件中進行Debug,查找語法錯誤。首先測試矩陣
76、鍵盤程序是否正常,按下按鍵看能否顯示正確的數(shù)值。測試正常后加入音樂播放模塊,按下1-7聽到Do,Re,Mi,F(xiàn)a,Sol,La,Si的音調(diào)。最后再按下8或9和并和原始音樂對比。</p><p><b> 參考文獻</b></p><p> [1] 楊恢先,黃輝先.單片機原理及應(yīng)用[M].北京:人民郵電出版社,2006.</p><p>
77、[2] 胡洪波.單片機原理及應(yīng)用實驗教程[M].湖南:湘潭大學(xué)出版社,2009.</p><p> [3] 陳海燕.51單片機原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010.</p><p> [4] 郭天祥.新概念51單片機C語言教程[M].北京:電子工業(yè)出版社,2009.</p><p><b> 心得體會</b></
78、p><p> 首先感謝***老師。在這個星期中,我遇到了許多的困難和挑戰(zhàn),在***老師的精心指導(dǎo)和同學(xué)的幫助下,完成了課程設(shè)計的任務(wù)。</p><p> 課程設(shè)計的同時,我也發(fā)現(xiàn)了一些自己在學(xué)習(xí)和實踐中存在的一些問題。剛開始課設(shè)的時候,還是顯得有些茫然。但隨著時間推移,自己在對問題的理解方面更加深入。盡管遇到了各種各樣的問題,但最終還是在不懈努力下得以解決。</p><
79、p> 忙碌了一個星期,在大家的共同努力下,我總算實現(xiàn)了最初的設(shè)計方案。這其中有遭遇難題的痛苦思考,也有調(diào)試成功的喜悅。這樣的一段經(jīng)歷,相信在我的一生回憶中都會有重要的位置。</p><p> 課程設(shè)計的時間盡管略顯短暫,但是通過自己設(shè)計原理,編寫程序,調(diào)試硬件,并最終完成設(shè)計。設(shè)計的題目雖然簡單,但是卻體現(xiàn)了一個完整的設(shè)計流程的所有內(nèi)容,進一步鞏固了課內(nèi)所學(xué)的知識,進一步培養(yǎng)了我們親身實踐的能力,這對我
80、們將來的工作和研究都是大有好處的。我想這也是課程設(shè)計的真正目的所在。</p><p> 通過本次實訓(xùn),對單片機的一系列知識,進行了一次系統(tǒng)的復(fù)習(xí),熟悉了一些簡單的程序,如延時程序,并溫習(xí)了一些原來的東西,如按鍵的掃描及去抖動等。</p><p> 在本次試驗中,學(xué)會了從程序的主體功能考慮要達到一個什么樣的要求,從而,將程序分成各個子程序,逐個寫出,分布細化,從而減少程序出錯機率,并且易
81、于檢查各部分程序,根據(jù)任務(wù)功能所要達到的要求來進行檢查,看到哪個模塊所對應(yīng)的程序不對,就檢查哪個模塊,提高了檢查效率。同時可以使程序條理清晰,方便改錯。為了提高程序可讀性,可以加注釋對程序的功能加以解釋說明,并且在各個子程序之間以獨立來分隔。</p><p> 在這里,因為我們的音樂播放是以查表的方式進行,所以首先我們要根據(jù)晶振的頻率將音樂樂譜轉(zhuǎn)化為自己做的表格,對照音樂簡譜把代碼寫出來,完成音樂的播放,音樂播
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--電子音樂設(shè)計
- 電子音樂盒(單片機課程設(shè)計)
- 電子音樂盒(單片機課程設(shè)計)
- 電子音樂盒單片機課程設(shè)計
- 單片機音樂播放器課程設(shè)計報告
- 基于單片機音樂播放器課程設(shè)計
- 單片機音樂播放器課程設(shè)計報告
- 單片機課程設(shè)計---電子音樂盒的設(shè)計
- 單片機課程設(shè)計--基于單片機的音樂播放器
- 單片機課程設(shè)計——紅外遙控音樂播放器
- 單片機課程設(shè)計報告--電子音樂盒的設(shè)計
- 基于單片機音樂播放器設(shè)計-課程設(shè)計論文
- 課程設(shè)計--基于單片機的簡易音樂播放器
- 基于單片機的電子音樂門鈴
- 硬件課程設(shè)計報告--基于51單片機音樂播放器設(shè)計
- 課程設(shè)計-基于單片機的音樂盒播放器設(shè)計
- 課程設(shè)計---電子音樂門鈴
- 課程設(shè)計---基于atmega16單片機的音樂播放器設(shè)計
- 單片機電子音樂盒課程設(shè)計說明書
- (湖南工業(yè)大學(xué)單片機課程設(shè)計-)基于51單片機的音樂播放器
評論
0/150
提交評論