基于單片機的電子琴課程方案設計書_第1頁
基于單片機的電子琴課程方案設計書_第2頁
基于單片機的電子琴課程方案設計書_第3頁
基于單片機的電子琴課程方案設計書_第4頁
基于單片機的電子琴課程方案設計書_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機應用與仿真訓練設計報告-基于AT89S52單片機簡易電子琴設計姓名:學號:專業(yè)班級: 電信082班指導老師:胡治國劉巍所在學院: 電氣工程與自動化學院 2011年11月22日摘要設計的主要內容是用 AT89S52單片機為核心控制元件,通過脈沖觸發(fā)產生出電子音調,設計一個簡易的電子琴。以單片機作為主控核心,與鍵盤、蜂鳴器等模塊組成控制模塊。該系統(tǒng)運行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比較高等,具有一定的實用與參考價值。關鍵詞:AT89S52;單片機;脈沖觸發(fā);電子琴設計目錄1 概述21.1 功能簡介21.2 功能的實現21.3 音樂產生原理32 系統(tǒng)總體方案及硬件

2、設計42.1 總體方案42.2 硬件部分42.2.1 矩陣鍵盤部分42.2.2 揚聲器接口電路部分53 軟件設計64 Proteus軟件仿真85 課程設計體會9參考文獻10附錄1 源程序代碼10附錄2系統(tǒng)原理圖181 概述1.1 功能簡介電子琴是現代電子科技與音樂結合的產物,是一種新型的鍵盤樂器。它在現代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現特性,它已經溶入現代人們的生活中,成為不可替代的一部分。本簡易電子琴的設計可實現的功能如下:程序中預存了一首音樂月亮代表我的心,通過一個獨立鍵盤可以實現對該音樂的播放和停止操作的控制。4*4矩陣鍵盤的16個按鍵分別對應著16個不同的

3、音符,分為高、低兩個八度,當按下某一按鍵,會發(fā)出相應的音調。按下按鍵時,揚聲器會發(fā)出聲音,松開按鍵后,揚聲器停止發(fā)聲,按鍵的時間越長,發(fā)聲時間越久。連續(xù)按下不同的按鍵,可以實現樂曲的演奏。1.2 功能的實現功能的實現部分分為軟件和硬件兩部分來簡介。1.3 音樂產生原理一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,只需將一首歌的音階和頻率相對應即可。若要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除

4、以2,即為半周期的時間。利用定時器計時半周期時間,每當計時終止后就將P1.0反相,然后重復計時再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89S52的內部定時器使其工作計數器模式(MODE1)下,改變計數值TH0及TL0以產生不同頻率的方法產生不同音階,例如,頻率為523Hz,其周期T1/5231912s,因此只要令計數器計時956s/1s956,每計數956次時將I/O反相,就可得到中音DO(523Hz)。計數脈沖值與頻率的關系式(如式2-1所示)是: Nfi2fr 2-1式中,N是計數值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產生的頻率。其計數初

5、值T的求法如下: T65536N65536fi2fr 2-2 例如:設K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計數值。 T65536N65536fi2fr655362fr65536/fr 低音DO的T65536/26263627 中音DO的T65536/52364580 高音DO的T65536/104665059我們要為這個音符建立一個表格,單片機通過查表的方式來獲得相應的數據,音符表見附錄一。 音樂的音拍,一個節(jié)拍為單位(C調)(如表2-1所示) 表2-1 曲調值表曲調值DELAY曲調值DELAY調4/4125ms調4/462m

6、s調3/4187ms調3/494ms調2/4250ms調2/4125msError! No bookmark name given. 對于不同的曲調我們也可以用單片機的定時/計數器來完成。程序流程圖如圖2.5。2 系統(tǒng)總體方案及硬件設計2.1 總體方案本設計采用4*4鍵盤控制通過程序產生高八度和低八度音律,要考慮到軟件和硬件的匹配以及硬件電路焊接時的排版問題,否則建會帶來不必要的焊接麻煩,在編程序時要注意仿真與實際電路中可能的不符,2.2 硬件部分本設計硬件電路共由以下幾部分構成:矩陣鍵盤部分;揚聲器部分;AT89S52主控電路部分;獨立按鍵部分。2.2.1 矩陣鍵盤部分設計中采用AT89S5

7、1的并行口P3接44矩陣鍵盤,以P3.0P3.3作輸入線,以P3.4P3.7作輸出線。每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數字量“0”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能,在本程序中,當程序檢測

8、到有鍵按下時,將查表使按鍵值與預存數據表中數據對應,并調用發(fā)聲程序。圖2.1 矩陣鍵盤的連接2.2.2 揚聲器接口電路部分仿真中的揚聲器一段接CPU的P24口,另一端接高電平。當P24口有電平變化時,揚聲器被驅動發(fā)聲。而在實物制作中,這樣是難以實現功能的,需要增加模擬電路以除去多余的干擾信號。也可選用集成芯片LM386作為揚聲器的驅動芯片。若使用LM386驅動揚聲器,通過相應的模擬電路的設計,還可以實現音量的調節(jié)。不過,在平時做實物時,我們一般用一個三極管作為放大器,這次我采用的是8050圖2.2揚聲器接口電路3 軟件設計本設計使用Protues仿真軟件進行仿真,在程序設計部分,包括鍵盤掃描程

9、序,音樂發(fā)聲程序。程序見附錄1。4*4矩陣鍵盤是由CPU控制I/O口來實現掃描的。具體程序見附錄二主程序鍵盤掃描部分。鍵盤掃描程序流程圖如圖2.4。程序首先給P3口賦值,然后讀取P3的狀態(tài),將讀取的狀態(tài)值同所賦值相比較,如果二者不相同,則說明有鍵按下,子程序將按鍵值返回主程序;否則,說明沒有鍵按下,程序繼續(xù)進行下一次掃描。 本系統(tǒng)的軟件流程圖如下圖 2.3 系統(tǒng)主程序流程鍵盤掃描程序流程圖圖 2.4鍵盤掃描程序流程圖音樂發(fā)聲程序圖 2.5音樂發(fā)聲程序流程圖4 Proteus軟件仿真仿真電路圖5 課程設計體會將程序燒入芯片,調試成功后,可任意彈奏自己想要的旋律。本設計通過制作電子琴,將幾個模塊很

10、好的融合,對使用單片機設計簡易電子琴進行了分析,并了解了基于單片機電子琴統(tǒng)硬件組成。利用單片機產生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。說明一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,于是我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可,然后我們利用功放電路來將音樂聲音放大。 遇到的問題:在剛剛焊接好后,程序燒入芯片后,發(fā)現并不發(fā)聲,經檢查才發(fā)現是對鍵盤沒看清楚,將鍵盤接亂了,另外,在硬件電路修改好后,發(fā)現每次按鍵時會引起蜂鳴器一

11、直響,再按鍵時有可能會消失,經檢查后知道是再每按鍵件程序后蜂鳴器對應參值沒有直接置零。 總之,這是一次動手能力的鍛煉,也是一次單片機知識的再回顧,還是對自己細心以及耐心能力的考察。參考文獻1 賈立新、王涌.電子系統(tǒng)設計與實踐M,清華大學出版社,2008年2月版; 2 陶春鳴、陳享成、甕嘉民.單片機使用技術M,人民郵電出版社,2008年4月版; 3 余發(fā)山.單片機原理及應用技術M,中國礦業(yè)大學出版社,2003年12月版; 4 李光飛.單片機課程設計實例指導M, 航空航天大學出版社,2004年9月版; 5 余永權.ATMEL89 系列單片機M,北京航空航天大學出版社,2002年4 月版; 6 胡宴

12、如,耿蘇燕.模擬電子技術M,高等教育出版社,2007年12月版; 7 趙潤林,張迎輝.單片機原理與應用教程M,北京大學出版社,2007年1月版; 8 馬淑華、王鳳文.單片機原理與接口技術M,北京郵電大學出版社,2005年10月版; 9 李建忠.單片機原理及應用M,西安電子科技大學出版社,2002 年5月版; 10 楊子文.單片機原理及應用M,西安電子科技大學出版社,2006 年4月版附錄1 源程序代碼#include#define uchar unsigned char#define uint unsigned intuint key,i,j,time,m,k。uchar temp。uchar

13、 STH0,STL0,STH1,STL1。sbit sw=P27。sbit speaker=P24。sbit P37=P37。sbit P36=P36。sbit P35=P35。sbit P34=P34。/月亮代表我的心數據表code unsigned char sszymmh= 0,2,1, 5,1,1, 1,2,3, 3,2,1, 5,2,3, 1,2,1, 7,1,3, 3,2,1, 5,2,2, 0,2,1, 5,2,1, 6,2,1, 7,2,2, 1,3,3, 6,2,1, 6,2,1, 5,2,1, 5,2,5, 3,2,1, 2,2,1, 1,2,3, 1,2,1, 1,2,2

14、, 3,2,1, 2,2,1, 1,2,3, 1,2,1, 1,2,2, 2,2,1, 3,2,1,2,2,2, 1,2,1,6,1,2, 2,2,1, 3,2,1, 2,2,5, 。/ 音階頻率表高八位code unsigned char FREQH= 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, /1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, 。/ 音階頻率表低

15、八位code unsigned char FREQL= 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, /1,2,3,4,5,6,7,8,i 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, 。unsigned int code tab= 64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,651

16、57,65178,65217。void key_music()unsigned char tmp。P3=0xff。P34=0。temp=P3。temp=temp&0x0f。tmp = temp。if(temp!=0x0f)for(i=50。i0。i-) for(j=200。j0。j-)。 temp=P3。temp=temp&0x0f。/(temp!=0x0f)if(temp=tmp)temp=P3。temp=temp&0x0f。switch(temp)case 0x0e: key=0。 break。 case 0x0d: key=1。 break。 case 0x0b: key=2。 brea

17、k。 case 0x07: key=3。 break。/speaker=speaker。STH1=tabkey/256。STL1=tabkey%256。temp=P3。temp=temp & 0x0f。 while(temp!=0x0f) TR0=1。 temp=P3。 temp=temp & 0x0f。 TR0=0。speaker = 0。P3=0xff。P35=0。temp=P3。temp=temp&0x0f。tmp = temp。if(temp!=0x0f)for(i=50。i0。i-) for(j=200。j0。j-)。 temp=P3。temp=temp&0x0f。/(temp!=0

18、x0f)if(temp=tmp)temp=P3。temp=temp&0x0f。switch(temp)case 0x0e: key=4。 break。 case 0x0d: key=5。 break。 case 0x0b: key=6。 break。 case 0x07: key=7。 break。/speaker=speaker。STH1=tabkey/256。STL1=tabkey%256。temp=P3。temp=temp & 0x0f。 while(temp!=0x0f) TR0=1。 temp=P3。 temp=temp & 0x0f。 TR0=0。speaker = 0。P3=0x

19、ff。P36=0。temp=P3。temp=temp&0x0f。tmp = temp。if(temp!=0x0f)for(i=50。i0。i-) for(j=200。j0。j-)。 temp=P3。temp=temp&0x0f。/(temp!=0x0f)if(temp=tmp)temp=P3。temp=temp&0x0f。switch(temp)case 0x0e: key=8。 break。 case 0x0d: key=9。 break。 case 0x0b: key=10。 break。 case 0x07: key=11。 break。/speaker=speaker。STH1=tabkey/256。STL1=tabkey%256。temp=P3。temp=temp & 0x0f。 while(temp!=0x0f) TR0=1。 temp=P3。 temp=temp & 0x0f。 TR0=0。speaker = 0。P3=0xff。P37=0。temp=P3。temp=temp&0x0f。tmp = temp。if(temp!=0x0f)for(i=50。i0。i-) for(j=

溫馨提示

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

評論

0/150

提交評論