單片機電子琴方案_第1頁
單片機電子琴方案_第2頁
單片機電子琴方案_第3頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、方案設計1電子琴設計框圖圖1 電子琴設計框圖2總體設計2.1硬件部分采用AT89S52單片機作為主控制部件,AT89S52用上電自動復位,12MHZ 的晶振和兩個電容形成晶振電路。面鍵,用于輸入音符。2.2軟件部分軟件部分采用匯編語言編寫程序,單片機匯編語言程序設計步驟如下:第一步:分析問題。第二步:畫出程序的基本輪廓。第三步:實現該程序。2.3軟硬件調試使用KEIL軟件,將程序輸入進行編譯,編譯通過后,則將制作的電路進行 聯機仿真,檢測功能和設計任務能不能實現。如果不能達到預期效果,則必須重新檢查硬件或修改程序。2.4程序固化經過調試,實現了預期的成果和功能,就可以開始程序固化了。將程序燒錄

2、到AT89S52內部ROM中,然后將單片機放入到電路中,再進行觀察。一. 相關技術簡介用電子琴可以演奏出各種美妙的音樂,而音樂是有音符組成的。不同的音 符是由相應頻率的振動產生不同頻率的聲音電信號經揚聲器發音后,人耳所聽 到的便是不同的聲音,換言之,只要向揚聲器中輸入不同頻率的電信號就可以 產生不同的聲音。若將不同的音節于不同的節拍組合在一起便形成一定的曲 調,因此一個單片機I/O 口,通過軟件,控制其輸出不同頻率的信號,就可以 產生8個基本音節,將音節以一定的節拍進行組合,便可以產生歌曲。樂曲中每一音符對應著確定的頻率,表1給出C調時各音符頻率。如果單片機某個口線輸出“高”“低”電平的頻率和

3、某個音符的頻率一樣,那么將此口線接上喇叭就可以發出此音符。二. 硬件設計1. AT89S52單片機IUKPS31OKKHS1<TKD)P3.I (RXDJF3 0 usid vcc(A15JP2.7 (An)ra 0 <A13)P2.5 AL2P2 (AllJK 3 1A10JP2.2 AffP2.1 AS)P2.032ZZP40P3.6lTr)P3.7辰可KTAL2XTALI <4®P 王 403« 5)L JnF3.3 llNTl :lllg XTALI 嚴 XTALZPR4<AI>7PO.7 CAD6)P0.6Pi.covnso)(AD5

4、>P0.5P1.5CM)OS1>AD4JPO.4PZ(AD3)P0.3PI 3(AD2)P0.2Pl.2as僞盅眺PI.7 P1 <5l-QK圖2 AT89S52單片機< 1)簡介AT89S52是一種低功耗、高性能 CMOS8位微控制器,具有8K在系統可編 程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業 80C51產品指令和引腳完全兼容。片上 Flash允許程序存儲器在系統可編程,亦 適于常規編程器。在單芯片上,擁有靈巧的 8位CPU和在系統可編程Flash, 使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。AT89S

5、52具有以下標準功能:8k字節Flash, 256字節RAM,32位I/O 口線, 看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6向量2級中斷 結構,全雙工串行口,片內晶振及時鐘電路。另外, AT89S52可降至OHz靜態 邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU停止工作,允許 RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為 止。<2) 引腳功能1. VCC :電源2. GND:地3. P0 口: P0 口是一個8位漏極開路的雙向I/O 口。作為輸出口,每位能驅 動8

6、個TTL邏輯電平。對P0端口寫“ 1”時,弓I腳用作高阻抗輸入。當訪問外 部程序和數據存儲器時,P0 口也被作為低8位地址/數據復用。在這種模式下, P0具有內部上拉電阻。在flash編程時,P0 口也用來接收指令字節;在程序校 驗時,輸出指令字節。程序校驗時,需要外部上拉電阻。4. P1 口: P1 口是一個具有內部上拉電阻的 8位雙向I/O 口,pl輸出緩沖 器能驅動4個TTL邏輯電平。對P1端口寫“ 1”時,內部上拉電阻把端口拉 高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳因為內部 電阻的原因,將輸出電流vllL )。此外,P1.0和P1.2分別作定時器/計數器2的 外部

7、計數輸入VP1.0/T2)和時器/計數器2的觸發輸入VP1.1/T2EX),具體如下 表所示。在flash編程和校驗時,P1 口接收低8位地址字節。表1 P1引腳功能引腳號第二功能P1.0T2定時器/計數器T2的外部計數輸入),時鐘輸出P1.1T2EX定時器/計數器T2的捕捉/重載觸發信號和方向控制)P1.5MOSlv在系統編程用)P1.6MlSO在系統編程用)P1.7SCK 在系統編程用)5. P2 口: P2 口是一個具有內部上拉電阻的 8位雙向I/O 口,P2輸出緩沖 器能驅動4個TTL邏輯電平。對P2端口寫“ 1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外

8、部拉低的引腳因為內部 電阻的原因,將輸出電流vllL )。在訪問外部程序存儲器或用16位地址讀取外 部數據存儲器 例如執行MOVX DPTR )時,P2 口送出高八位地址。在這種 應用中,P2 口使用很強的內部上拉發送1。在使用8位地址如MOVX RI ) 訪問外部數據存儲器時,P2 口輸出P2鎖存器的內容。在flash編程和校驗時, P2 口也接收高8位地址字節和一些控制信號。6. p 3 口: P3 口是一個具有內部上拉電阻的 8位雙向I/O 口,p2輸出緩 沖器能驅動4個TTL邏輯電平。對P3端口寫“ 1”時,內部上拉電阻把端口拉 高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的

9、引腳因為內部 電阻的原因,將輸出電流vllL )。P3 口亦作為AT89S52特殊功能 第二功能) 使用,如下表所示。在flash編程和校驗時,P3 口也接收一些控制信號。表2 P3引腳功能引腳號第二功能P3.0RXD串行輸入)P3.1TXD串行輸出)P3.2INT0(外部中斷0P3.3INT0(外部中斷0P3.4T0定時器0外部輸入)P3.5T1定時器1外部輸入)P3.6WR(外部數據存儲器寫選通P3.7RD(外部數據存儲器寫選通7. RST:復位輸入。晶振工作時,RST腳持續2個機器周期高電平將使單 片機復位。看門狗計時完成后,RST腳輸出96個晶振周期的高電平。特殊寄存 器AUXR(地址

10、8EH上的DISRTO位可以使此功能無效。DISRT 0默認狀態 下,復位高電平有效。8. ALE/PROG :地址鎖存控制信號ALE )是訪問外部程序存儲器時,鎖 存低8位地址的輸出脈沖。在flash編程時,此引腳vPROG)也用作編程輸入 脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為 外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為 8EH的SFR的第0位置“ 1”, ALE操作將無效。這一位置 “ 1”,ALE僅在執行MOVX或MOVC指令時有 效。否則,ALE將被微弱拉高。這個ALE使能標志位 地址為

11、8EH的SFR的 第0位)的設置對微控制器處于外部執行模式下無效。9. PSEN:外部程序存儲器選通信號vPSEN)是外部程序存儲器選通信號。 當AT89S52從外部程序存儲器執行外部代碼時,PSEN在每個機器周期被激活 兩次,而在訪問外部數據存儲器時,PSEN將不被激活。10. EA/VPP:訪問外部程序存儲器控制信號。為使能從 0000H到FFFFH 的外部程序存儲器讀取指令,EA必須接GND。為了執行內部程序指令,EA應 該接VCC。在flash編程期間,EA也接收12伏VPP電壓。11. XTAL1:振蕩器反相放大器和內部時鐘發生電路的輸入端。12. XTAL2:振蕩器反相放大器的輸出

12、端。2. 蜂鳴器圖3蜂鳴器蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用 于計算機,打印機,復印機,報警器,電子玩具,汽車電子設備,電話機,定 時器等電子產品中做發聲器件。J 4 4 J r圖4鍵盤本設計鍵盤模塊采用4*4矩陣鍵盤,原理圖如圖 4所示。在鍵盤中按鍵數 量較多時,為了減少I/O 口的占用,通常將按鍵排列成矩陣形式,如圖4所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一 個按鍵加以連接。 這樣,一個端口 <如P1 口)就可以構成4*4=16個按鍵,比 之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多 加一條線就可以構成

13、 20鍵的鍵盤,而直接用端口線則只能多出一鍵 <9鍵)。 由此可見,在鍵盤中按鍵數量較多時,為了減少I/O 口的占用,通常將按鍵排列成矩陣形式。4.時鐘電路<1 )振蕩電路AT89S52內部有一個用于構成振蕩器的可控高增益反向放大器, 兩個引腳XTAL1和 XTAL2分別是該放大器的輸入端和輸出端,其中匹配電 容C1 1和C12要根據石英晶體振蕩器的要求選取,一般選用2 0 3 0 PF 的瓷片電容。振蕩頻率根據實際要求的工作速度,從幾百KHZ 2 4MHZ 中適當選取。< 2)時鐘電路圖5定時電路5丄ED數碼管圖6 LED顯示顯示模塊是利用AT89S52單片機的P0端口的P

14、O.O P0.7連接到一個共陽 數碼管的a h的筆段上。在數碼管上循環顯示 0 7數字,時間間隔0.2秒。 LED顯示模塊七段LED數碼管內部由七個條形發光二極管和一個小圓點發光 二極管組成,根據各管的極管的接線形式,可分成共陰極型和共陽極型。LED數碼管的七個發光二極管因加正電壓而發亮,因加零電壓而不以發亮,不同亮 暗的組合就能形成不同的字形,這種組合稱之為字形碼,表3給出了共陰極 LED數碼管的字形碼表。表3共陽極LED數碼管的字形碼表顯示字符共陽極段選碼顯示字符共陽極段選碼0C0H880H1F9H990H2A4HA88H3BOHB83H499HCC6H592HDA1H682HE86H7F

15、8HF8EH三. 軟件設計圖7主程序流程圖1 .發聲程序表4音符頻率表音符頻率簡譜碼中fa69864820低dao26263628中sao78464898低fe29463835中la88064968低mi33064021中xi98865030低fa34964103高dao104665058低sao39264260高re117565110低la4406440高mi131865157低xi49464524咼fa139765178中dao52364580高sao156865217中re58764684咼la176065252中mi65964777咼xi196765283TO中斷入口圖8發聲程序流程圖

16、2.定時中斷圖9定時中斷程序框圖中斷是單片機適時的處理內部或外部事件的一種內部機制,當某種內部或 外部事件發生時,單片機中斷系統將迫使CPU暫停正在執行的程序,轉而去 進行中斷事件的處理,中斷處理完畢后,又返回被中斷程序處,繼續向下執 行。AT89S52有6個中斷源:兩個外部中斷INTO和INT1 ),三個定時中斷定時器0、1、2)和一個串行中斷。每個中斷源都可以通過置位或清除特殊寄 存器IE中的相關中斷允許控制位分別使得中斷源有效或無效。IE還包括一個中斷允許總控制位EA,它能一次禁止所有中斷。如表 5所示,IE.6位是不可用 的。對于AT89S52,IE.5位也是不能用的。用戶軟件不應給這

17、些位寫1。它們為AT89系列新產品預留。定時器 2可以被寄存器T2CON中的TF2和EXF2的 或邏輯觸發。程序進入中斷服務后,這些標志位都可以由硬件清0。實際上,中斷服務程序必須判定是否是 TF2或EXF2激活中斷,標志位也必須由軟件清 0。定時器0和定時器1標志位TFO和TF1在計數溢出的那個周期的 S5P2被置 位。它們的值一直到下一個周期被電路捕捉下來。然而,定時器2的標志位TF2在計數溢出的那個周期的S2P2被置位,在同一個周期被電路捕捉下來。表5中斷允許控制寄存器<MSB)EAET2中斷允許控制位=1,允許中斷允許控制位=0,禁止符號位地址功能EAIE.7中斷 自的-IE.6

18、預留ET2IE.5定時ESIE.4串行ET1IE.3定時EX1IE.2外部ET0IE.1定時EX0IE.0外部五設計感受這次專業設計結束了,我對于5 2單片機又有了一個全新的認識,原來以 前的學習還差很多,在對于學科和未來的工作上,我還有很長的一段路要走。 學海無涯,這句話雖然有點老生常談,但卻是我現在最真實的心理感受,電子 琴的設計其實難度并不大,而如今如此吃力的原因值得我好好反思。最后,感謝老師對于我們專業設計無私的指導和幫助。六附錄/簡易電子琴#include<reg52.h> /sbit P14=P1A4。/sbit P15=PM5 。/sbit P16=P1A6 。/sb

19、it P17=P1A7 。/unsigned char keyval 。 sbit sound=P3A6 。/unsigned int C 。 / unsigned int f 。 /包含 51 單片機寄存器定義的頭文件將P14位定義為P1.4引腳將P15位定義為P1.5引腳將P16位定義為P1.6引腳將P17位定義為P1.7引腳/ 定義變量儲存按鍵值將 sound 位定義為 P3.7 全局變量,儲存定時器的定時常數 全局變量,儲存音階的頻率/ 以下是 C 調低音的音頻宏定義#define l_dao 262 / #define l_re 286 / #define l_mi 311/#def

20、ine l_fa 349 / #define l_sao 392 / #define l_la 440 /將“ l_dao ”宏定義為低音“ 1”的頻率262Hz 將“l_re ”宏定義為低音“ 2”的頻率286Hz 將“ l_mi ”宏定義為低音“ 3”的頻率311Hz 將“l_fa ”宏定義為低音“ 4”的頻率349Hz 將“ l_sao ”宏定義為低音“ 5”的頻率392Hz 將“ l_a ”宏定義為低音“ 6”的頻率440Hz#define l_xi 494 /將“ l_xi ”宏定義為低音7”的頻率 494Hz/ 以下是C調中音的音頻宏定義#define dao 523/將“ dao

21、”宏定義為中音“ 1”的頻率523Hz#define re 587/將“re”宏定義為中音“ 2”的頻率587Hz#define mi 659/#define fa 698/#define sao 784/#define la 880/#define xi 987/將“mi”宏定義為中音“ 3”的頻率659Hz 將“fa ”宏定義為中音“ 4”的頻率698Hz 將“ sao”宏定義為中音“ 5”的頻率784Hz 將“la ”宏定義為中音“ 6”的頻率880Hz 將“xi ”宏定義為中音“ 7”的頻率53/以下是C調高音的音頻宏定義#define h_dao 1046/#define h_re

22、1174 / #define h_mi 1318 /#define h_fa 1396/#define h_sao 1567 /#define h_la 1760/#define h_xi 1975/將“ h_dao”宏定義為高音“1”的頻率1046Hz 將“ h_re ”宏定義為高音“ 2”的頻率1174Hz 將“ h_mi”宏定義為高音“ 3”的頻率1318Hz將“h_fa”宏定義為高音“ 4”的頻率1396Hz 將“ h_sao”宏定義為高音“ 5”的頻率1567Hz 將“ h_la ”宏定義為高音“ 6”的頻率1760Hz 將“ h_xi ”宏定義為高音“ 7”的頻率1975Hz函數功

23、能:軟件延時子程序void delay20ms(void>unsigned char i,j 。 for(i=0 。 i<100 。 i+> for(j=0 。 j<60 。 j+>*函數功能:節拍的延時的基本單位,延時 200ms */ void delay(>unsigned char i,j 。for(i=0 。 i<250 。 i+>for(j=0 。 j<250 。 j+>/* 函數功能:輸出音頻入口參數: F*/void Output_Sound(void>C=(46083/f>*10 。TH0=(8192-C

24、>/32 。TL0=(8192-C>%32。 TR0=1 。/ 計算定時常數/ 可證明這是13位計數器TH0高8位的賦初值方法delay(> 。 /TR0=0 。/延時200ms播放音頻關閉定時器sound=1 。/keyval=0xff 。關閉蜂鳴器/ 播放按鍵音頻后,將按鍵值更改,停止播放/ 可證明這是13位計數器TL0低5位的賦初值方法 開定時 T0函數功能:主函數void main(void>EA=1 。 /ET0=1 。/ET1=1。TR1=1。 TMOD=0x10 。 / TH1=(65536-500>/256開總中斷定時器 T0 中斷允許/定時器 T

25、1 中斷允許/定時器 T1 啟動,開始鍵盤掃描分別使用定時器T1的模式1,T0的模式0 。 / 定時器 T1 的高 8位賦初值TL1=(65536-500>%256。 / 定時器 T1 的高 8位賦初值while(1> / 無限循環switch(keyval>case 1:f=dao 。/如果第 1 個鍵按下,將中音 1 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。 case 2:f=l_xi/ 如果第 2 個鍵按下,將低音 7 的頻率賦給 f Output_Sound(> 。 /轉去計算定時常數case 3:f=l_la將低音 6

26、的頻率賦給 fbreak 。/ 如果第 3 個鍵按下,Output_Sound(>/轉去計算定時常數break 。case 4:f=l_sao 。/如果第 4 個鍵按下,將低音 5 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。case 5:f=sao/如果第 5 個鍵按下,將中音 5 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。 case 6:f=fa/如果第 6 個鍵按下,將中音 4 的頻率賦給 fOutput_Sound(>。 /轉去計算定時常數case 7:f=mi將中音 3 的頻率賦給 f/break

27、。如果第 7 個鍵按下,Output_Sound(>/轉去計算定時常數break 。case 8:f=re 。/如果第 8 個鍵按下,將中音 2 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。case 9:f=h/ 如果第 9 個鍵按下,將高音 2 的頻率賦給 fOutput_Sound(> 。/轉去計算定時常數break 。case 10:f=h_dao/ 如果第 10 個鍵按下,將高音 1 的頻率賦給 fOutput_Sound(>/轉去計算定時常數case 11:f=xi將中音 7 的頻率賦給 f/break 。如果第 11 個鍵按下,

28、Output_Sound(>/ 轉去計算定時常數break 。case 12:f=la 。/如果第 12個鍵按下,將中音 6 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。 case 13:f=hla/ 如果第 13 個鍵按下,將高音 6 的頻率賦給 fOutput_Sound(> 。/轉去計算定時常數break 。case 14:f=h_sao/ 如果第 14 個鍵按下,將高音 5 的頻率賦給 fOutput_Sound(> 。/轉去計算定時常數case 15:f=h_fa將高音 4 的頻率賦給 fbreak 。/ 如果第 15 個鍵按下,

29、Output_Sound(>/轉去計算定時常數break 。case 16:f=h_mi 。/如果第 16個鍵按下,將高音 3 的頻率賦給 fOutput_Sound(>/轉去計算定時常數break 。/*函數功能:定時器TO的中斷服務子程序,使P3.7引腳輸出音頻方波*/void TimeO_serve(void > interrupt 1 using 1 TH0=(8192-C>/32。/可證明這是13位計數器TH0高8位的賦初值方法TL0=(8192-C>%32。/可證明這是13位計數器TL0低5位的賦初值方法sound=!sound/將 P3.7 引腳取反

30、,輸出音頻方波/* 函數功能:定時器 T1 的中斷服務子程序,進行鍵盤掃描,判斷鍵位*/void time1_serve(void> interrupt 3 using 2 / 為 3 ,使用第 2 組寄存器TR1=0 。P1=0xf0 。為高電平“ 1”定時器 T1 的中斷編號/關閉定時器 T0所有行線置為低電平“ 0”,所有列線置if(P1&0xf0>!=0xf0>/列線中有一位為低電平“ 0”,說明有鍵按下delay20ms(> 。/延時一段時間、軟P1=0xfd0”) if(P14=0> 0” keyval=5P1.4 引腳的列線為低電平/可判斷是

31、 S5 鍵P1=0xfe 平“ 0”<P1.0 輸出低電平“ 0”)if(P14=0>。/第一行置為低電如果檢測到接P1.4 引腳的列線為低電平“0”keyval=1。/可判斷是 S1 鍵被按下if(P15=0>/如果檢測到接P1.5 引腳的列線為低電平“0”keyval=2。/可判斷是 S2 鍵被按下if(P16=0>/如果檢測到接P1.6 引腳的列線為低電平“0”keyval=3。/可判斷是 S3 鍵被按下if(P17=0>/如果檢測到接P1.7 引腳的列線為低電平“0”keyval=4。/可判斷是 S4 鍵被按下件消抖確實有鍵按下/第二行置為低電平/oif(P1&0xf0>!=0xf0>/ 如果 檢 測到接0”<P1.1 輸出低電平“if(P15=0>/如果檢測到接被按下keyval=6。/可判斷是 S6 鍵if(P16=0>0”/如果檢測到接keyval=7。/可判斷是 S7 鍵if(P17=

溫馨提示

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

評論

0/150

提交評論