2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

評論

0/150

提交評論