C51音樂播放器_第1頁
C51音樂播放器_第2頁
C51音樂播放器_第3頁
C51音樂播放器_第4頁
C51音樂播放器_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課課程程設設計計姓名:學號:班級:組員: 目目 錄錄1 設計題目 2 概述 .1 單片機數字音樂盒有關介紹.2 本設計任務 .3 總體方案論證與設計.3.1 單片機的選取 .3.2 LED 顯示方式.3.3 系統總體結構框圖 .4 系統硬件設計 .4.1 AT89C51 芯片功能和硬件連接.4.2 LED 顯示器.4.3 鍵盤 .4.4 音頻輸出部分 .4.5 整體硬件電路 . 4.6 原理說明5 系統軟件設計 .5.1 主模塊的設計 .5.2 外部中斷源系統設計 .5.3 基本顯示模塊設計 .5.4 系統初始化程序 .5.5 音調、節(jié)拍以及編碼的確定方法.6 調試結果 .6.1 系統總電路圖

2、 .總 結 .參考文獻 .附件1.1.設計題目設計題目基于 C51 的音樂發(fā)生器設計1.1. 概述概述2.1單片機數字音樂盒有關介紹單片機數字音樂盒有關介紹電子音樂已廣泛地應用于社會生活的各個領域。其類型從音樂卡片到CD、MP3 等多種多樣,制作原理也各不相同。聲音是通過振動產生的。單片機對某一 I/O 引腳以一定的頻率循環(huán)置 1 和清 0,這一引腳便產生一定頻率的方波,該方波通過放大后作用于揚聲器便產生一定頻率的聲音。若改變輸出方波的頻率,產生的聲音也就改變了。通過控制輸出方波的時間長短,聲音的長短也就得到控制。因此,根據樂譜,單片機就可產生電子音樂。音樂中最關鍵的兩個要素是音符和節(jié)拍。單片

3、機控制的音樂發(fā)生器系統由硬件電路和軟件兩部分構成。利用單片機控制的電子音樂發(fā)生器軟硬件上具有獨特的優(yōu)點,系統的開發(fā)周期短,成本低,電路制作容易。更換歌曲時,硬件電路無需作任何修改,只需修改軟件即可實現。軟件編程時,可用 51 系列單片機的匯編語言或 C51 語言實現。同時還可根據個人的習好通過軟件改變節(jié)拍的延時時間,增加電子音樂的趣味性。2.1.1發(fā)音原理介紹發(fā)音原理介紹發(fā)音原理:播放一段音樂需要的是兩個元素,一個是音調,另一個是音符。首先要了解對應的音調,音調主要由聲音的頻率決定,同時也與聲音強度有關。對一定強度的純音,音調隨頻率的升降而升降;對一定頻率的純音、低頻純音的音調隨聲強增加而下降

4、,高頻純音的音調卻隨強度增加而上升。另外,音符的頻率有所不同?;谏厦娴膬热荩@樣就對發(fā)音的原理有了一些初步的了解。 音符的發(fā)音主要靠不同的音頻脈沖。利用單片機的內部定時器/計數器0,使其工作在模式 1,定時中斷,然后控制 P0.3 引腳的輸出音樂。只要算出某一音頻的周期(1/頻率),然后將此周期除以 2,即為半周期的時間,利用定時器計時這個半周期時間,每當計時到后就將輸出脈沖的 I/O 反相,然后重復計時此半周期時間再對 I/O 反相,就可在 I/O 腳上得到此頻率的脈沖。2.1.2 音符頻率的產生音符頻率的產生音符及定時器初始值:例如:中音 1(do)的音頻=523HZ,周期 T=1/52

5、3s=1912s定時器/計數器 0 的定時時間為:T/2=1912/2s=956s定時器 956s的計數值=定時時間/機器周期=956s/1s=956(時鐘頻率=12MHZ)裝入 T0 計數器初值為 65536-956=64580將 64580 裝入 T0 寄存器中,啟動 T0 工作后,每計數 956 次時將產生溢出中斷,進入中斷服務時,每次對 P0.3 引腳的輸出值進行取反,就可得到中音 DO(523HZ)的音符音頻。將 51 單片機內部定時器工作在計數器模式 0 下,改變計數初值 TH0,TL0 以產生不同的頻率。下表 1.1 是 C 調各音符頻率與計數初值 T 的對照表: 表 1.1 C

6、 調各音符頻率與計數初值 T 的對照表音符頻率(Hz)/初值(s)音符頻率(Hz)/初值(s)低 1DO262/63627中 1DO 523/64580低 2RE 294/63835中 2RE589/64687低 3M330/64021中 3M 661/64780低 4FA 350/64107中 4FA700/64822低 5SO393/64264中 5SO 786/64900低 6LA 441/64402中 6LA 882/64969低 7SI 495/64526中 7SI 990/65031高 1DO1042/65056高 5SO1568/65217高 2RE 1245/65134高 6L

7、A 1760/65252高 3M1318/65157高 7SI 1967/65282高 4FA 1397/651782.1.3 節(jié)拍頻率的產生節(jié)拍頻率的產生節(jié)拍的產生與編碼:音樂中的節(jié)拍用延時時間產生。例如,1 拍=0.4s,1/4 拍=0.1s,以此類推。假設 1/4 拍執(zhí)行一次延時程序,則 1/2 拍就執(zhí)行兩次延時程序,所以只要求出 1/4 拍的延時時間,其余節(jié)拍就是它的倍數。為了方便,將節(jié)拍數也進行了編碼,并且計算了樂譜節(jié)拍編程時的延時時間,如表 1.3 和表 1.4 所示。表 1.3 節(jié)拍數編碼表按 1/4 拍為一個延時時間的節(jié)拍編碼與節(jié)拍對應的表按 1/8 拍為一個延時時間的節(jié)拍編碼

8、與節(jié)拍對應的表節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍11/466/411/866/822/488/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8表 1.4 樂譜節(jié)拍編程時的時間延時表樂譜節(jié)拍1/4 拍的延時時間樂譜節(jié)拍1/8 拍的延時時間4/4125 ms4/462 ms3/4187 ms3/494 ms2/4250 ms2/4125 ms2.2 本設計任務本設計任務隨著人類社會的發(fā)展,人們對視覺、聽覺方面的享受提出了越來越高的要求。小小的音樂盒可以給人們帶來美好的回憶,提高人們的精神文化享受。傳統的音樂盒多是機械

9、型的,體積笨重,發(fā)音單調,不能實現批量生產。本文設計的音樂盒是以單片機為核心元件的電子式音樂盒,體積小,重量輕,能演奏和旋音樂,功能多,使用方便,可以批量生產,具有一定的商業(yè)價值。本設計是基于單片機控制的數字音樂盒的設計,由單片機 AT89C51 芯片和 LED 數碼管為核心,輔以必要的電路,構成的一個單片機數字音樂盒。若該設計使用數字電路完成,所設計的電路相當復雜,大概需要十幾片數字集成塊,其功能也主要依賴于數字電路的各功能模塊的組合來實現,焊接的過程比較復雜,成本也非常高。若用單片機來設計制作完成,由于其功能的實現主要通過軟件編程來完成,那么就降低了硬件電路的復雜性,而且其成本也有所降低,

10、所以在該設計中采用單片機利用 AT89C51,它是低功耗、高性能的 CMOS 型 8 位單片機。片內帶有 4KB 的 Flash 存儲器,且允許在系統內改寫或用編程器編程。另外, AT89C51 的指令系統和引腳與 8051 完全兼容,片內有 128B 的 RAM、32 條 I/O 口線、2 個 16 位定時計數器、5 個中斷源、一個全雙工串行口等。在該設計中利用單片機 I/O 口產生一定頻率的方波,驅動蜂鳴器,發(fā)出各種不同的音調,從而演奏樂曲,并能夠由 LCD 顯示信息。鍵盤在單片機應用系統中能實現向單片機輸入數據,傳送命令等功能,是人工干預單片機的主要手段。本設計采用 4*4 鍵盤,16*

11、2 LCD,七段顯示數碼管 LED。在開機按鈕按下時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱)。在演奏過程中可通過功能鍵選擇樂曲,暫停,播放。3 總體方案論證與設計總體方案論證與設計本設計是基于單片機的數字音樂盒設計,由單片機 AT89C51 芯片和 LED數碼管為核心,輔以必要的電路,構成的一個單片機電子數字音樂盒。要求利用 I/O 口產生一定頻率的方波,驅動蜂鳴器,發(fā)出不同的音調并采用LCD 顯示信息,從而演奏樂曲,開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱),可通過功能鍵選擇樂曲,暫停,播放。本設計采用 4*4鍵盤,16*2 LCD,七段顯示數碼管 LED。下面對各模塊的

12、設計逐一進行論證比較。3.1 單片機的選取單片機的選取首先選擇單片機中最為普遍的 MCS51 系列。其中 AT89C2051 是美國ATMEL 公司生產的低電壓、高性能 CMOS 8 位單片機,片內含 2k bytes 的可反復擦寫的只讀程序存儲器(PEROM)和 128bytes 的隨機數據存儲器(RAM),器件采用 ATMEL 公司的高密度、非易失性存儲技術生產,兼容標準 MCS-51 指令系統,片內置通用 8 位中央處理器和 Flash 存儲單元,功能強大的 AT89C2051 單片機可應用于許多高性價比的應用場合。主要性能: 和 MCS-51 產品兼容; 2KB 可重編程 FLASH

13、存儲器(1000 次); 2.7-6V 電壓范圍; 全靜態(tài)工作:0Hz-24KHz 2 級程序存儲器保密鎖定 128*8 位內部 RAM 15 條可編程 I/O 線 兩個 16 位定時器/計數器 6 個中斷源 可編程串行通道 高精度電壓比較器(P1.0,P1.1,P3.6) 直接驅動 LED 的輸出端口由于完成核心功能音頻輸出只需一個 I/O 口,并且額外功能 LED移位顯示可根據所選單片機的剩余 I/O 口進行設計,因此 AT89C2051 足以滿足基本要求。其 20 個引腳體積小巧,內部 2k 字節(jié)的程序存儲器容量適中,低壓低頻工作條件,并且價格低廉容易購得。綜上,本次設計選擇 AT89C

14、2051 單片機。3.2 LEDLED 顯示方顯示方選取七段數碼管,當播放數字音符 i(i=1,27)的時候則第i 個數碼管顯示 i,顯示時間與該音的節(jié)拍時間相同。故選用動態(tài)顯示。3.3 系統總體結構框圖系統總體結構框圖 4 系統硬件設計本設計中用到了 AT89C51 單片機,七段數碼管,蜂鳴器,等硬件電路常用元器件。4.1 AT89C51AT89C51 芯片功能和硬件連接芯片功能和硬件連接AT89C51 是一種帶 4K 字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能 CMOS8 位微處理器,俗稱單片機。該器件采用 ATMEL 高密度非易失存儲器制造技術制造,與工業(yè)標準的 MCS-51 指令集

15、和輸出管腳相兼容。由于將多功能 8 位 CPU 和閃爍存儲器組合在單個芯片中,ATMEL 的 AT89C51 是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。4.1.1 主要特性:主要特性:與 MCS-51 兼容 4K 字節(jié)可編程閃爍存儲器壽命:1000 寫/擦循環(huán)數據保留時間:10 年全靜態(tài)工作:0Hz-24Hz三級程序存儲器鎖定128*8 位內部 RAM32 可編程 I/O 線兩個 16 位定時器/計數器5 個中斷源 可編程串行通道低功耗的閑置和掉電模式片內振蕩器和時鐘電路 4.1.2 管腳說明(如圖管腳說明(如圖 3.13.1):): 圖 3.1VCC:供電電壓。

16、 GND:接地。 P0 口:P0 口為一個 8 位漏級開路雙向 I/O 口,每腳可吸收 8TTL 門電流。當 P1 口的管腳第一次寫 1 時,被定義為高阻輸入。P0 能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在 FIASH 編程時,P0 口作為原碼輸入口,當 FIASH 進行校驗時,P0 輸出原碼,此時 P0 外部必須被拉高。 P1 口:P1 口是一個內部提供上拉電阻的 8 位雙向 I/O 口,P1 口緩沖器能接收輸出 4TTL 門電流。P1 口管腳寫入 1 后,被內部上拉為高,可用作輸入,P1 口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在 FLASH 編

17、程和校驗時,P1 口作為第八位地址接收。 P2 口:P2 口為一個內部上拉電阻的 8 位雙向 I/O 口,P2 口緩沖器可接收,輸出 4 個 TTL 門電流,當 P2 口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2 口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2 口當用于外部程序存儲器或 16 位地址外部數據存儲器進行存取時,P2 口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2 口在 FLASH 編程和校驗時接收高八位地址信號和控制信號。 P3 口:P3 口管腳

18、是 8 個帶內部上拉電阻的雙向 I/O 口,可接收輸出4 個 TTL 門電流。當 P3 口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3 口將輸出電流(ILL)這是由于上拉的緣故。P3 口也可作為 AT89C51 的一些特殊功能口,如下表所示:管口管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷 0)P3.3 /INT1(外部中斷 1)P3.4 T0(記時器 0 外部輸入)P3.5 T1(記時器 1 外部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.7 /RD(外部數據存儲器讀選通)P3 口同

19、時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持 RST 腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在 FLASH 編程期間,此引腳用于輸入編程脈沖。在平時,ALE 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的 1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個 ALE 脈沖。如想禁止 ALE 的輸出可在SFR8EH 地址上置 0。此時, ALE 只有在執(zhí)行 MOVX,MOVC 指令是 ALE 才起作用。另外,該引腳被略微拉

20、高。如果微處理器在外部執(zhí)行狀態(tài) ALE 禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN 有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN 信號將不出現。 /EA/VPP:/EA 保持低電平時,在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式 1 時,/EA 將內部鎖定為 RESET;當/EA 端保持高電平時,此間內部程序存儲器。在 FLASH 編程期間,此引腳也用于施加 12V 編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的

21、輸出。 4.24.2.1.1 LED 顯示器的結構顯示器的結構 常用的 LED 顯示器為 8 段。每一個段對應 1 個發(fā)光二極管,這種顯示器有共陽極和共陰極兩種:共陰極 LED 顯示器的發(fā)光二極管的陰極連接在一起,通常此公共陰極接地。當某個發(fā)光二極管的陽極為高電平時,發(fā)光二極管點亮,相應的段被顯示。同樣,共陽極 LED 顯示器的發(fā)光二極管的陽極連接在一起,通常此公共陽極接正電壓,當某個發(fā)光二極管的陰極接低電平時,發(fā)光二極管被點亮,相應的段被顯示。為了使 LED 顯示器顯示不同的符號或數字,就要把不同段的發(fā)光二極管點亮,這樣就要為 LED 提供代碼,因為這些代碼可使 LED 相應的段發(fā)光,從而顯

22、示不同字型,因此該代碼稱為段碼。7 段發(fā)光二極管,再加上 1 個小數點位,共計 8 位。因此提供給 LED 顯示器的段碼正好是 1B。各段與字節(jié)中各位對應關系如下表 3.1: 表 3.1 8 段 LED 結構及外形位碼位D1D2D3D4D5D6D7D80 xfe0 xfd0 xfb0 xf70 xef0 xdf0 xbf0 x7f段碼012345670 x3f0 x060 x5b0 x4f0 x660 x6d0 x7d0 x07 4.24.2.2.2 LED 顯示器工作原理顯示器工作原理由 N 個 LED 顯示塊可以拼接成 N 位的 LED 顯示器。如圖是 LED 顯示器的結構原理圖 3.2。

23、N 個 LED 顯示器有 N 個位選線和 8*N 位 根段碼線。段碼線控制顯示字符的字型,而位選線為各個 LED 顯示塊中各段的公共端,它控制該 LED 顯示位的亮或暗。LED 顯示器 有靜態(tài)顯示和動態(tài)顯示兩種。 4.3 鍵盤鍵盤 鍵盤設置為選歌,按一個按鍵進行一次中斷,故采用優(yōu)先級解碼芯片如 74LS148,把多個中斷源信號作為一個中斷。 4.4 音頻輸出部分音頻輸出部分整個輸出部分由一個 100uF 電容、兩個 S9013 NPN 三極管和一個蜂鳴器/喇叭組成,原理圖如右圖所示:100uF 電容是用來濾波的,兩個 NPN 三極管起到放大信號的作用,最后由蜂鳴器/喇叭表現出信號。用 P3.7

24、 口控制蜂鳴器。輸出顯示電路如圖 3.4所示:圖 3.4 輸出顯示電路4.5 整體硬件電路整體硬件電路4.6 原理說明:原理說明:當鍵盤有鍵按下時,判斷鍵值,并觸發(fā)外部 0 中斷,選擇對應播放的曲目。同時 8 段數碼管動態(tài)顯示所播放的數字音符。按 sw1 可以暫停播放,按快進快退觸發(fā)外部 1 中斷,可以時曲子循環(huán)前進活快退 5 個音符。 5 系統軟件設計系統軟件設計5.1 主模塊的設計主模塊的設計主模塊是系統軟件的主框架。結構化程序設計一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心就是主框架的構建。它的合理與否關系到程序最終的功能的多少和性能的好壞。本系統的主模塊的程序框圖如下

25、圖 6 所示:圖 65.2 外部中斷源系統設計外部中斷源系統設計在本設計中中斷源是采用外部中斷 0 和外部中斷 1 方式,均為負跳變有效。(1)定時器/計數器工作方式寄存器 TMOD 用于選擇定時器/計數器的工作方式和工作模式。其格式如下表 4.1:D7D6D5D4D3D2D1D0GATEM1M0GATEM1M0TMODT1 方式字段T0 方式字段 表 4.1下面表 4.2 對 TMOD 各位進行說明:門控位GATE工作方式選擇位M1、M0M1M0工作方式00方式 0,為 13 位定時器/計數器01方式 1,為 16 位定時器/計數器10方式 2,8 位的常數自動重新裝載的定時器/計數器11方

26、式 3,僅適用于 T0 表 4.2其中,在本設計中采用方式 1 的 16 位定時器/計數器。計數器模式和定時器模式選擇位=0,為定時器模式。=1,為計數模式。定時器/計數器控制寄存器 TCON,其格式如下表 4.3:TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0ITO 表 4.3其各位的功能如下:TF1、TF0計數溢出標志位當計數器溢出時,該位置 1。TR1、TR0計數運行控制位5.2.15.2.1 外部中斷外部中斷 1 1 實現快進快退實現快進快退按下快進快退鍵,進入外部 1 中斷,通過讀取 P34 和 P35 的電平來判斷m 的值。 void int1(

27、) interrupt 2 /外部 1 中斷,快進快退 TR0=0; if(p34=0&p35=1) m=1; /快進 if(p34=1&p35=0) m=0; /快退主程序中會通過 m 的值來判斷是快進還是快退if(m=1) c=(c+5*3)%159;/一次前進活著后退 5 個音符;取余,使之不會超過普子長度m=3;else if(m=0) c=(c-5*3)%159; m=3; 5.2.25.2.2 外部中斷外部中斷 0 0 實現歌曲的選擇實現歌曲的選擇選擇所聽歌曲的按鍵,就會進入外部 0 中斷,通過讀取 P0 口的狀態(tài)來確定status 的值。void int0() i

28、nterrupt 0 /外部 0 中斷,選擇歌曲 c=0;/換曲子時從頭播放 status=0X07&P0; 主程序中通過判斷 status 的值來選擇播放的曲子 switch(status)case 1:case 2:5.3 基本顯示模塊設計基本顯示模塊設計 P1=counttablec;P2=bitcodetablec-1;動態(tài)顯示播放音符所對應的數字譜5.4 系統初始化程序系統初始化程序unsigned char k; p00=0; TMOD=0X01; EA=1;EX0=1;EX1=1;/開外部 0,1 中斷和定時器 0 中斷 ET0=1;ET1=1;/外部中斷 0,1 為脈沖

29、觸發(fā)方式,負跳變有效 IT0=1; c=0;5.5 音調、節(jié)拍以及編碼的確定方法音調、節(jié)拍以及編碼的確定方法一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應幅度的諧波頻率,也就是說不能像電子琴那樣能奏出多種音色的聲音。因此單片機奏樂只需弄清楚兩個概念即可,也就是“音調”和節(jié)拍表示一個音符唱多長的時間。4.5.14.5.1 曲子的編碼曲子的編碼以一小段編碼為例table=/樂譜 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 0,0,0 ;編碼為 3 個一組,每組對應一個音符。以 6,1,1,為例:第一個數代表音符,6 代表數字譜 6 即 La;第二個數

30、代表音調,1 表示低音,同理 2 表示中音,3 表示高音;第三個數代表節(jié)拍,1 表示最小節(jié)拍,此處為半拍,同理 2 就表示 1 拍,3為 1 個半拍,4 為 2 拍;k=tablec+7*tablec-1-1; /找音調 BTH0=th0k; BTL0=tl0k; time=tablec+2; /找節(jié)拍低中高音為 7 個一循環(huán),k 代表音符的位置,比如 6,1,1,則k=6+7*0-1,故低音 6 的頻率就可以在 th0k(頻率的高八位)和 tl0k(頻率的低八位)中尋得th0= /音調頻率的高八位0 xf2,0 xf3,0 xf5,0 xf5,0 xf6,0 xf7,0 xf8,/低音 0

31、xf9,0 xf9,0 xfa,0 xfa,0 xfb,0 xfb,0 xfc, /中音0 xfc,0 xfc,0 xfd,0 xfd,0 xfd,0 xfd,0 xfe, /高音 0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xff; /超高音tl0= /音調頻率的低八位0 x42,0 xc1,0 x17,0 xb6,0 xd0,0 xd1,0 xb6,/低音 0 x21,0 xe1,0 x8c,0 xd8,0 x68,0 xe9,0 x5b, /中音0 x8f,0 xee,0 x44,0 x6b,0 xb4,0 xf4,0 x2d, /高音0 x47,0 x7

32、7,0 xa2,0 xb6,0 xda,0 xfa,0 xe6; /超高音定時器 0 中斷產生方波,放出音調void time0() interrupt 1 using 0/定時中斷,產生音調 TR0=0; p00=p00; TH0=BTH0; TL0=BTL0; TR0=1;6 調試結果調試結果6.1 系統總電路圖系統總電路圖總總 結結 首先要感謝老師的教學才可以讓我對 C51 熟悉起來。我本身很喜歡音樂,所以準備課程設計我馬上就想道要做個音樂播放器出來,自己編寫喜歡的曲子。在圖書館里找了幾本書,看到了一個容易理解的程序。原程序是循環(huán)播放一個音樂,我在次基礎上進行了改變。先是加入了外部 0

33、中斷,聯合 switch 語句可以實現隨時選擇曲子的功能;后來又插進了可以暫停的功能;然后加入了 8 段數碼管動態(tài)顯示曲子的程序;最后加入了外部 1 中斷的快進快退語句。 過程中因為沒有設置外部 0 中斷的負跳變有效,一時沒發(fā)現,讓我困惱了一下午,后來自己都不知怎么就突然想到了沒有設置負跳變有效。其余的也沒多大的障礙,就是有些細節(jié)需要反復調試修改就是了。 制作過程還是很愉快的。參考文獻參考文獻 姜志海.單片機的 C 語言程序設計與應用基于 Proteus 仿真(第 2版).電子工業(yè)出版社,2011附件附件 總程序總程序#includesbit p00=P03;sbit p20=P30;sbit

34、 p34=P34;sbit p35=P35;unsigned int t,c,m=3;unsigned char time;unsigned char keytmp,status=0;unsigned char BTH0,BTL0;unsigned char code count=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, /段碼 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00;unsigned char code bitcode=0 xfe,0 xfd,0 xfb,0

35、 xf7,0 xef,0 xdf,0 xbf,0 x7f; /位碼code unsigned char th0=0 xf2,0 xf3,0 xf5,0 xf5,0 xf6,0 xf7,0 xf8,/音調頻率的高八位 0 xf9,0 xf9,0 xfa,0 xfa,0 xfb,0 xfb,0 xfc, 0 xfc,0 xfc,0 xfd,0 xfd,0 xfd,0 xfd,0 xfe, 0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xff;code unsigned char tl0=0 x42,0 xc1,0 x17,0 xb6,0 xd0,0 xd1,0 xb6

36、,/音調頻率的低八位 0 x21,0 xe1,0 x8c,0 xd8,0 x68,0 xe9,0 x5b, 0 x8f,0 xee,0 x44,0 x6b,0 xb4,0 xf4,0 x2d, 0 x47,0 x77,0 xa2,0 xb6,0 xda,0 xfa,0 xe6;code unsigned char table=/羽根6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,3, 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1,

37、1,2,1, 2,2,1, 3,2,1, 3,2,3, 5,2,1, 6,2,1, 5,2,3, 6,2,1, 5,2,1, 3,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 3,2,1, 6,1,2, 6,1,1, 3,2,1, 6,1,1, 5,1,1, 6,1,3, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 5,1,1, 6,1,3, 0,0,0 ;code unsigned char table1= /奏之曲3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3

38、,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 7,2,1, 5,2,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 3,3,1, 2,3,1, 3,3,1, 6,3,1, 5,3,2, 6,1,1, 7,1,1, 1,2,2, 3,2,2, 2,2,2, 1,2,1, 7,1,1, 6,1,1, 7,1,1, 1,2,1, 7,1,1, 6,1,1, 5,1,1, 6,1,2, 3,2,1, 3,2,1, 3,2,1, 3,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 2,

39、2,1, 3,2,1, 5,2,1, 4,2,1, 3,2,1, 3,2,2, 1,2,1, 3,2,1, 2,2,2, 6,1,2, 1,2,1, 3,2,1, 2,2,2, 5,2,2, 7,1,1, 5,1,1, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,2,1, 7,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,1, 6,2,1, 5,2,1, 2,2,1, 1,3,1, 1,3,1, 1,3,1, 1,3,1, 6,2,1, 7,2,1, 1,3,2, 7,2,1, 1,3,1, 7,2,1, 6,2,1, 5,2,1, 6,2,1, 7,2,1, 0

40、,0,0;code unsigned char table2= /夏日星3,2,1, 3,2,1, 3,2,1, 2,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 2,2,4, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 1,2,3, 2,2,1, 2,2,1, 2,2,1, 3,2,1, 2,2,4, 3,2,3, 3,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 1,2,4, 7,1,3, 7,1,1, 7,1,2, 6,1,1, 5,1,1, 6,1,6, 3,2,1, 3,2,1, 3,2,1

41、, 2,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 2,2,4, 1,2,1, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 1,2,3, 2,2,1, 2,2,1, 2,2,1, 3,2,1, 2,2,4, 3,2,3, 3,2,1, 3,2,2, 5,2,1, 3,2,1, 2,2,3, 3,2,1, 1,2,4, 7,1,3, 7,1,1, 7,1,2, 6,1,1, 5,1,1, 6,1,6, 0,0,0;code unsigned char table3=6,2,1, 7,2,1, 1,3,3, 7,2,1, 1,3,2, 3,3,2,

42、7,2,4, 3,2,1, 3,2,1, 6,2,3, 5,2,1, 6,2,2, 1,3,2, 5,2,4, 3,2,1, 3,2,1, 4,2,3, 3,2,1, 4,2,1, 1,3,3,/天空之城 3,2,3, 1,3,1, 1,3,1, 1,3,1, 7,2,3, 4,2,1, 4,2,2, 7,2,2, 7,2,4, 6,2,1, 7,2,1, 1,3,3, 7,2,1, 1,3,2, 3,3,2, 7,2,4, 3,2,1, 3,2,1, 6,2,3, 5,2,1, 6,2,2, 1,3,2, 5,2,4, 3,2,1, 4,2,2, 1,3,1, 7,2,1, 7,2,2, 1

43、,3,1, 2,3,1, 2,3,1, 3,3,1, 1,3,2, 1,3,2, 7,2,1, 6,2,1, 6,2,1, 7,2,2, 5,2,2, 6,2,3, 1,3,1, 2,3,1, 3,3,3, 2,3,1, 3,3,3, 5,3,2, 2,3,4, 5,2,1, 5,2,1, 1,3,1, 7,2,1, 1,3,2, 3,3,2, 3,3,4, 6,2,1, 7,2,1, 1,3,2, 7,2,2, 2,3,1, 2,3,1, 1,3,3, 5,2,1, 5,2,2, 4,3,2, 3,3,2, 2,3,2, 1,3,2, 3,3,5, 3,3,2, 6,3,4, 5,3,2,

44、5,3,2, 3,3,1, 2,3,1, 1,3,2, 1,3,1, 2,3,2, 1,3,1, 2,3,1, 2,3,1, 5,3,2, 3,3,4, 3,3,2, 6,3,4, 5,3,4, 3,3,1, 2,3,1, 1,3,4, 1,3,1, 2,3,2, 1,3,1, 2,3,1, 2,3,1, 7,2,2, 6,2,4, 0,0,0; void int0() interrupt 0 /外部 0 中斷,選擇歌曲 c=0;/換曲子時從頭播放 status=0X07&P0; void int1() interrupt 2 /外部 1 中斷,快進快退 TR0=0; if(p34=0

45、&p35=1) m=1; /快進 if(p34=1&p35=0) m=0; /快退void delay(unsigned char t) /延遲函數 unsigned char t1; unsigned long t2; for(t1=0;t1t;t1+) for(t2=0;t28000;t2+) void time0() interrupt 1 using 0/定時中斷,產生音調 TR0=0; p00=p00; TH0=BTH0; TL0=BTL0; TR0=1;void sing() /唱歌 if(tablec-3=8) TR0=0; /遇到休止符則暫停 else TH0=BTH0; TL0=BTL0; TR0=1; delay(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論