單片機(jī)課程設(shè)計電子音調(diào)發(fā)生器_第1頁
單片機(jī)課程設(shè)計電子音調(diào)發(fā)生器_第2頁
單片機(jī)課程設(shè)計電子音調(diào)發(fā)生器_第3頁
單片機(jī)課程設(shè)計電子音調(diào)發(fā)生器_第4頁
單片機(jī)課程設(shè)計電子音調(diào)發(fā)生器_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、單片機(jī)課程設(shè)計設(shè) 計 報 告電子音調(diào)發(fā)生器 2016年 4 月 29 日目錄1 課程設(shè)計總體目標(biāo)- 2 -1.1 課題的意義- 2 -1.2 系統(tǒng)的主要功能- 2 -1.3 本人所做的工作- 2 -2 實(shí)驗(yàn)原理及設(shè)計思路- 3 -2.1 樂曲的音調(diào)與節(jié)拍- 3 -2.2 紅外檢測原理- 3 -3 硬件電路設(shè)計及描述- 4 -3.1 硬件連接圖- 4 -3.2 單片機(jī)系統(tǒng)- 5 -3.3 數(shù)碼管顯示電路- 6 -3.4 蜂鳴器電路- 6 -4 軟件設(shè)計流程及描述- 7 -4.1 蜂鳴器發(fā)單音- 7 -4.2 蜂鳴器唱歌- 7 -4.3 數(shù)碼管動態(tài)顯示- 7 -4.4 程序框圖- 8 -4.5 源

2、程序代碼及注釋- 9 -5 實(shí)驗(yàn)結(jié)果- 26-1 總體設(shè)計1.1 課題的意義(1) 通過這個實(shí)際的課題,熟悉51單片機(jī)的開發(fā)環(huán)境,熟悉JD-51的硬件電路圖,并能通過三種調(diào)試模式來調(diào)試程序,為日后進(jìn)行一些基于單片機(jī)的系統(tǒng)開發(fā)打下基礎(chǔ);(2) 掌握使用常用的匯編指令進(jìn)行51單片機(jī)的程序設(shè)計,建立嚴(yán)謹(jǐn)?shù)倪壿嬎季S來編寫程序,學(xué)會畫程序框圖來幫助編程。(3) 通過使用蜂鳴器來產(chǎn)生相應(yīng)音調(diào)的聲音,進(jìn)一步鞏固課上學(xué)到的定時器初始化、賦初值、通過查詢方式來產(chǎn)生一定頻率方波的編程方法;(4) 掌握使數(shù)碼管掃描顯示數(shù)字的方法,并同時讓LED燈亮或滅,學(xué)會如何讓蜂鳴器發(fā)出不同頻率的聲音;(5) 了解NEC協(xié)議下的

3、紅外編碼格式,能夠使用單片機(jī)來解碼收到的紅外信號,并讀取信號中相應(yīng)的信息。1.2 系統(tǒng)的主要功能電子音調(diào)發(fā)生器(1)利用JD51開發(fā)板上的按鍵S1S4進(jìn)行音調(diào)選擇,即按下不同的開關(guān)產(chǎn)生不同的音調(diào),依次按動S1S4 及組合按鍵,蜂鳴器發(fā)出i八個音調(diào);并在數(shù)碼管上顯示。(2)編寫2支歌曲,并可進(jìn)行選擇播放。1.3 本人所做的工作通過學(xué)習(xí)課程平臺上給出的紅外和電子音調(diào)發(fā)生器這兩個程序,將電子音調(diào)發(fā)送器中關(guān)于按鍵掃描的部分換為對接收到的32位紅外信號數(shù)據(jù)中數(shù)據(jù)碼的反碼進(jìn)行按鍵判斷跳轉(zhuǎn)相應(yīng)歌曲或音調(diào)子程序。2 實(shí)驗(yàn)原理及設(shè)計思路2.1 樂曲的音調(diào)與節(jié)拍音調(diào)由不同頻率的方波產(chǎn)生,音調(diào)與頻率的關(guān)系如下表所示

4、。要產(chǎn)生音頻方波,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用計時器計時此半周期時間,每當(dāng)計時到后就將輸出方波的I/O反相,然后重復(fù)計時此半周期時間再對I/O反相,就可在I/O腳得到此頻率的方波。在JD-51單片機(jī)上,產(chǎn)生方波的I/O腳選用P2.4,P2.4口與蜂鳴器相連,這樣通過P2.4口輸出不同頻率的方波就能控制蜂鳴器發(fā)出不同音調(diào)的聲音。音樂的節(jié)拍是由延時實(shí)現(xiàn)的,如果1拍為0.4秒,1/4拍是0.1秒。只要設(shè)定延時時間,就可求得節(jié)拍的時間。延時作為基本延時時間,節(jié)拍值只能是它的整數(shù)倍。音調(diào)1234567I頻率/Hz262294330349392440494

5、523XF921F9E1FA8CFAD8FB68FBE9FC5BFC8F表1 音調(diào)和發(fā)音頻率及定時器初值X的對應(yīng)在定時器工作在工作方式1時每個音節(jié)相應(yīng)的定時器初值x可按下法計算(1/2)(1/f)=(12/fosc)(216-x)x=216-(fosc/24f) (1)其中,f是音調(diào)頻率,JD-51單片機(jī)的晶振fosc=11.0592Mhz。曲調(diào)值DELAY調(diào)4/4125ms調(diào)3/4187ms調(diào)2/4250ms表2 各節(jié)拍延時時間對應(yīng)關(guān)系3 硬件電路設(shè)計及描述3.1 硬件連接圖系統(tǒng)的硬件連接圖包括,晶振電路,復(fù)位電路,數(shù)碼管顯示電路,紅外發(fā)送和接收電路,蜂鳴器電路,硬件連接如下圖所示:圖4 紅

6、外高級電子琴硬件連接圖3.2 單片機(jī)系統(tǒng)ATMEL公司生產(chǎn)的AT89S52單片機(jī)是硬件電路的核心部分,時鐘電路晶振使用12MHz,復(fù)位電路采取按鍵復(fù)位方式。具體連接如下:圖5 單片機(jī)系統(tǒng)的時鐘電路圖6 單片機(jī)系統(tǒng)的復(fù)位電路3.3 數(shù)碼管顯示電路顯示電路采用4個共陽極數(shù)碼管,P0口作為數(shù)碼管的輸入,P2.0、P2.1、P2.2、 P2.3分別控制四個數(shù)碼管的亮與不亮,P0口控制數(shù)碼管亮的是數(shù)字幾。圖7 數(shù)碼管連接圖3.4 蜂鳴器電路我們用的蜂鳴器是直流蜂鳴器,驅(qū)動簡單,一旦在引腳上加入直流電源它就會發(fā)出一定頻率的聲音,此時聲音的音調(diào)和音量是固定的,它與單片機(jī)的連接方式如下圖所示。Buzzer與P

7、2.4相連,P2.4輸出不同頻率的方波信號,蜂鳴器就會發(fā)出不同的聲音。如果控制輸出信號的頻率和音長,蜂鳴器則會發(fā)出音樂。圖8 蜂鳴器電路圖4 軟件設(shè)計流程及描述4.1 蜂鳴器發(fā)單音根據(jù)不同音調(diào)的頻率值算出該給定時器賦的初值,利用定時溢出后P2.4口電平的翻轉(zhuǎn)來產(chǎn)生和音調(diào)頻率相同的方波,雖然不是正弦波,聽起來有點(diǎn)不自然,但也能聽出i這8個音調(diào)。4.2 蜂鳴器播放歌曲蜂鳴器播放歌曲是基于節(jié)拍表和音符表的基礎(chǔ)上的,其基本原理與發(fā)出單個頻率的聲音類似,只不過確定了單個頻率發(fā)聲的時長即節(jié)拍長,和不同頻率發(fā)聲的順序,可以通過查表的方式來使定時器產(chǎn)生不同頻率的方波,加入設(shè)定好的節(jié)拍,就相當(dāng)于延時,便可以聽到

8、音樂。4.3 數(shù)碼管動態(tài)顯示所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。對于每一位顯示器來說,每隔一段時間點(diǎn)亮一次。顯示器的亮度既與導(dǎo)通電流有關(guān),也與點(diǎn)亮?xí)r間和間隔時間的比例有關(guān)。通過調(diào)時間參數(shù),可以既保證亮度,又保證顯示。透過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位元數(shù)碼管的點(diǎn)亮?xí)r間為12ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會有閃爍感

9、,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的資源,而且功耗更低。開始4.4 程序框圖將開關(guān)狀態(tài)送P3.2,P3.3,P3.4,P3.1,P3.6查詢鍵盤按鍵狀態(tài)跳轉(zhuǎn)到相應(yīng)子程序令P3.5口發(fā)出相應(yīng)頻率的方波圖9 電子音調(diào)發(fā)生器流程圖4.5 源程序代碼及注釋/*- = 電子音調(diào)發(fā)生器 =*程序功能說明*通過s1,s2,s3,s4四個按鍵組合,根據(jù)按鍵組合值讓蜂鳴器播放i相應(yīng)的音調(diào),以及兩首歌*/ORG 0000HLJMP KEYP0KEYP0: MOV R0,#00H ; CLR TR0 ; SETB P2.4 ;關(guān)蜂鳴器 CLR P2.0 CLR P2.1 CLR P2.2 CLR P2

10、.3 ;關(guān)用于表示音調(diào)的數(shù)碼管 SETB P2.0 ;關(guān)用于表示模式的數(shù)碼管 WU: MOV R0,P3 ;掃描鍵盤輸入 CJNE R0,#0FFH,KEYPO1 ;有輸入時跳轉(zhuǎn) JMP KEYP0KEYPO1:CJNE R0,#0FBH,KEYPO2 ; SETB P2.4 ;蜂鳴器置于高電平 MOV R3,#200MAIN01:MOV TMOD,#01H ;初始化,工作方式1 MOV TL0,#21H ;寫入計數(shù)初值 MOV TH0,#0F9H SETB TR0 ;啟動計數(shù) WAIT1:JNB TF0,WAIT1 CLR TF0 CPL P2.4 ;蜂鳴器響 CLR P2.3 ;數(shù)碼管顯示

11、1 MOV A,#B MOV P0,A DJNZ R3,MAIN01 LJMP KEYP0 ;返回程序KEYP0 KEYPO2:CJNE R0,#0F7H,KEYPO3 ; SETB P2.4 ;蜂鳴器置于高電平 MOV R3,#200 MAIN02:MOV TMOD,#01H MOV TL0,#0E1H ;寫入計數(shù)初值 MOV TH0,#0F9H SETB TR0WAIT2:JNB TF0,WAIT2 CLR TF0 CPL P2.4 ;蜂鳴器響 CLR P2.3 ; MOV A,#B MOV P0,A DJNZ R3,MAIN02LJMP KEYP0KEYPO3:CJNE R0,#0EFH

12、,KEYPO4 ; SETB P2.4 ;蜂鳴器置于高電平 MOV R3,#200MAIN03:MOV TMOD,#01H MOV TL0,#08CH MOV TH0,#0FAH SETB TR0WAIT3:JNB TF0,WAIT3 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN03LJMP KEYP0KEYPO4:CJNE R0,#0DFH,KEYPO5 ; SETB P2.4MOV R3,#200MAIN04:MOV TMOD,#01H MOV TL0,#0D8H MOV TH0,#0FAH SETB TR0WAIT4:J

13、NB TF0,WAIT4 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN04LJMP KEYP0KEYPO5:CJNE R0,#0F3H,KEYPO6 ; SETB P2.4MOV R3,#200 MAIN05:MOV TMOD,#01H MOV TL0,#068H MOV TH0,#0FBH SETB TR0WAIT5:JNB TF0,WAIT5 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN05LJMP KEYP0KEYPO6:CJNE R0,#0E7H,KE

14、YPO7 ; SETB P2.4MOV R3,#200 MAIN06:MOV TMOD,#01H MOV TL0,#0E9H MOV TH0,#0FBH SETB TR0WAIT6:JNB TF0,WAIT6 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN06LJMP KEYP0KEYPO7:CJNE R0,#0CFH,KEYPO8 ; SETB P2.4MOV R3,#200 MAIN07:MOV TMOD,#01H MOV TL0,#05BH MOV TH0,#0FCH SETB TR0WAIT7:JNB TF0,WAIT7

15、 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN07LJMP KEYP0KEYPO8:CJNE R0,#0DBH,KEYPO9 ; SETB P2.4 MOV R3,#200 MAIN08:MOV TMOD,#01H MOV TL0,#08FH MOV TH0,#0FCH SETB TR0WAIT8:JNB TF0,WAIT8 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#B MOV P0,A DJNZ R3,MAIN08LJMP KEYP0KEYPO9:CJNE R0,#0EBH,KEYPO10 ;跳轉(zhuǎn)到第

16、一首歌程序 LJMP MUSTART1KEYPO10:CJNE R0,#0D7H,JIELI ;跳轉(zhuǎn)到第二首歌程序 LJMP MUSTART2 JIELI:JMP KEYP0 ;返回主程序 MUSTART1: ;播放第一首歌 MOV R0,#00H ;將節(jié)拍表指針置零 MOV R1,#00H ;將音符表指針置零 RTAB:MOV A,R0 MOV DPTR,#RYTH MOVC A,A+DPTR ;利用查表法將一個節(jié)拍數(shù)據(jù)取出放R2計數(shù)器中 MOV R2,ATTAB:MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R3,A ;取出音符表高8位 INC R1

17、;指針加1 MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R4,A ;取出音符表低8位 SETB P2.4 ;輸出相應(yīng)音調(diào)的方波 LOOP:MOV R5,#3BHMAIN:MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAIT:JNB TF0,WAIT CLR TF0 CPL P2.4MAYA:JB P3.2,MAYB ;判斷P3.2口是否有為1 JB P3.4,MAYB ;判斷P3.4口是否有為1 LJMP RA ;P3.4口為0則跳轉(zhuǎn)到程序RA MAYB:JB P3.3,JIELI ;判斷P3.3口是否有為1

18、JB P3.5,JIELI ;判斷P3.5口是否有為1 LJMP MUSTART2 ;P3.5口為0則放第二首歌 RA: DJNZ R5,MAIN ;無打斷則繼續(xù)放第一首歌 DJNZ R2,LOOPINC R0 ;兩個表的指針都加1 INC R1CJNE R1,#88,RTAB ;判斷是否取完 LJMP KEYP0TONE:DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH

19、,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHRYTH:DB 04,04,04,04

20、,04,04,04,04,04,04DB 04,05,04,04,04,04,04,04,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,04MUSTART2: MOV R0,#00H MOV R1,#00HRTAB2: MOV A,R1 MOV DPTR,#TABLE1 MOVC A,A+DPTR MOV R2,ATTAB2: MOV A,R1 MOV DPTR,#TONE2 MOVC A,A+DPTR MOV R3,A INC R1 MOV A,R1 MOV DPTR,#TON

21、E2 MOVC A,A+DPTR MOV R4,A SETB P2.4LOOP2: MOV R5,#9BHMAIN2: MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAITR:JNB TF0,WAITR CLR TF0 CPL P2.4MAYA1:JB P3.3,MAYB1 JB P3.5,MAYB1 LJMP RBMAYB1:JB P3.2,BACK JB P3.4,BACK LJMP MUSTART1BACK:LJMP JIELIRB: DJNZ R5,MAIN2 DJNZ R2,LOOP2 INC R0INC R1CJNE R1,#64,RTA

22、B2LJMP KEYP0TONE2:DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB 0FBH,0E9H,0FBH,0E9H,0FBH,

23、68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHTABLE1:DB 04,04,04,04,04,04,04,04,04,04DB 04,05,04,04,04,04,04,04,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,04 END【電子音調(diào)發(fā)生的部分C語言程序】/*鍵盤輸入函數(shù)*/uchar keyscan(uchar key)if(K1=1&K2=1&K3=1&K4=1) /初始化delay(20);if(K1=1&K2=1&K3=1&K4=1)key=0;if(K1=0&K2=1&K3=1&K4=1) /1音,SB1按下delay(20);if(K1=0&K2=1&K3=1&K4=1)key=1; if(K1=1&K2=0&K3=1&K4=1) /2音,SB2按下delay(20);

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論