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

下載本文檔

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

文檔簡介

1、單片機技術(shù)及系統(tǒng)設(shè)計課程設(shè)計題 目: 基于單片機的電子琴制作 專 業(yè): 自動化 班 級: 姓 名: 學 號 摘要: 隨著電子技術(shù)的發(fā)展,尤其是大規(guī)模集成電路的出現(xiàn),給人類生活帶來了根本性的改變。本文首先描述系統(tǒng)硬件工作原理,并附以結(jié)構(gòu)框圖加以說明。著重介紹了本系統(tǒng)所應(yīng)用的各硬件接口技術(shù)和各個接口模塊的功能及工作過程,并且按照設(shè)計要求利用單片機設(shè)計微型電子琴。完成電路原理圖、程序,并進行相關(guān)分析。關(guān)鍵詞:單片機,電子琴,程序一、設(shè)計主要內(nèi)容:(1)鍵盤矩陣識別。即矩陣掃描,顯示當前按鍵。(2)不同頻率音符播放,可以通過按鍵控制16種發(fā)音。(3)可彈奏想要表達的音樂;(4)該電子琴包含1首示例音樂

2、,接通電源可播放示例音樂。二、設(shè)計要求(1)按設(shè)計指標進行電路設(shè)計;(2)列出音階與單片機定時器輸出頻率關(guān)系表格;(3)制作符合設(shè)計指標的硬件電路。三、設(shè)計說明 單片微型計算機是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項重大課題。 電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。

3、本文的主要內(nèi)容是用at89s51單片機為核心控制元件,設(shè)計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個按鍵和揚聲器。 本文主要對使用單片機設(shè)計簡易電子琴進行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細闡述。四、設(shè)計簡單原理介紹一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片

4、機的定時/計數(shù)器t0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當計時終止后就將p1.0反相,然后重復(fù)計時再反相。就可在p1.0引腳上得到此頻率的脈沖。 利用at89c51的內(nèi)部定時器使其工作計數(shù)器模式(mode1)下,改變計數(shù)值th0及tl0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523hz,其周期t1/5231912s,因此只要令計數(shù)器計時956s/1s956,每計數(shù)956次時將i/o反相,就可得到中音do(523hz)。 計數(shù)脈沖值

5、與頻率的關(guān)系式(如式3-1所示)是: nfi÷2÷fr 3-1式中,n是計數(shù)值;fi是機器頻率(晶體振蕩器為12mhz時,其頻率為1mhz);fr是想要產(chǎn)生的頻率。其計數(shù)初值t的求法如下: t65536n65536fi÷2÷fr 例如:設(shè)k65536,fi1mhz,do(523hz)的計數(shù)值。 t65536n65536fi÷2÷fr655361000000÷2÷fr65536500000/f do的t65536500000/52364580 單片機12mhz晶振,高中低音符與計數(shù)t0相關(guān)的計數(shù)值如表4-2所示 表3

6、-2 音符頻率表低音音符頻率hz中音音符頻率hz高音音符頻率hz1261.631523.2511045.52293.672587.3321174.663329.633659.4631318.514349.234698.4641396.925391.995738.9951567.986440.006880.0061760.007493.887987.7671975.52我們要為這個音符建立一個表格,單片機通過查表的方式來獲得相應(yīng)的數(shù)據(jù) 低音019之間,中音在2039之間,高音在4059之間 table: dw 0,63628,63835,64021,64103,64260,64400,64524

7、,0,0 dw 0,63731,63928,0,64185,64331,64463,0,0,0 dw 0,64580,64684,64777,64820,64898,64968,65030,0,0dw 0,64633,64732,0,64860,64934,64994,0,0,0 dw 0,65058,65110,65157,65178,65217,65252,65283,0,0 dw 0,65085,65134,0,65198,65235,65268,0,0,0 dw 0 在這個程序中,彈奏音樂的程序是用定時/計數(shù)器t0來完成的,播放音樂程序則是用定時/計數(shù)器t1來完成的。五、軟件總體方案及

8、設(shè)計流程(1)鍵盤掃描程序:檢測是否有鍵按下,有鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無鍵按下,則返回鍵盤掃描程序繼續(xù)檢測(2)功能轉(zhuǎn)移程序:對檢測到得按鍵值進行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們設(shè)計的功能程序有兩種,即音色調(diào)節(jié)功能和自動播放樂曲功能(3)琴鍵處理程序:根據(jù)檢測到得按鍵值,查詢音律表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音(4)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放好的歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有鍵按下程序簡易流程圖開始鍵盤掃描程序t0初始化并開中

9、斷允許t0中斷t1初始化并開中斷允許t1中斷有鍵按下否 否延時去抖動識別按鍵功能 是是否彈奏鍵播放鍵 否 是取相應(yīng)的音符碼裝入t1根據(jù)按鍵功能裝入相應(yīng)音符值到t0啟動t1啟動t0按鍵釋放成功否按鍵釋放成功否停止t1工作停止t0工作彈奏程序流程圖彈奏子程序取鍵值開始計時開中斷并允許中斷設(shè)定定時器工作方式根據(jù)鍵值查音律表給定時器t0賦值進入中斷cpl p3.0 p3.0退出中斷延時返回鍵盤掃描程序自動播放歌曲程序流程圖自動播放音樂程序a<< 0,dptr<<歌譜地址開中斷,設(shè)定定時器t1工作模式a=0取簡譜碼取該音符的節(jié)拍碼stop y na=0ffh y 休止符返回鍵盤掃

10、描 y n查音律表,給定時器賦值 inc dptr開始計時進入中斷cpl3.0退出中斷延時六、硬件總體方案及說明51單片機p1口通過連接4*4的矩陣鍵盤,作為琴鍵鍵盤;p2.0接播放音樂鍵;p3.0口接喇叭,通過執(zhí)行相應(yīng)的功能程序使電子琴發(fā)出不同音色的聲音。(一)芯片介紹:在本次電子琴設(shè)計中,我們組成員單片機芯片選用了at89c51芯片,而89c51系列的兼容性也比較好。p3口也可作為at89c51的一些特殊功能口,如下表所示:p3口引腳特殊功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.3(外部中斷1)p3.4t0(定時器0外部輸入)p3.5t1(定時

11、器1外部輸入)p3.6wr(外部數(shù)據(jù)存儲器寫選通)p3.7rd(外部數(shù)據(jù)存儲器讀先通)p3口同時為閃爍編程和編程校驗接收一些控制信號。(二)硬件接線:(1)利用p1口為按鍵接入口,形成4×4組成16個按鍵矩陣,設(shè)計成16個音,下圖所示:0123456789abcdef所對應(yīng)的鍵碼為: (2)p3.0口音頻輸出,接一個喇叭。(3)復(fù)位電路我們本來在方案選擇的時候有兩種選擇的,上電復(fù)位和按扭復(fù)位,上電復(fù)位是利用電容充電來實現(xiàn)的,而按扭復(fù)位是電源對外節(jié)電容的充電使rst為高電平,復(fù)位松開后,電容通過下拉電阻放電,使rst恢復(fù)低電平。為了制作軟件的方便我們還是選擇用按扭復(fù)位,因為它比較直觀。

12、(4)電路設(shè)計圖如下:七、設(shè)計儀器、設(shè)備和材料清單主要儀器設(shè)備:個人計算機和相關(guān)的軟件主要元器件: 獨立按鍵16個單片機芯片at80c51一片12mhz晶振一個s8550三極管一個不同阻值電阻數(shù)個開關(guān)一個usb電源插口一個喇叭一個10uf、30pf電容數(shù)個電路板一塊電烙鐵一個等八、設(shè)計源程序buff equ 30hsth0 equ 31hstl0 equ 32htemp equ 33h org 00h ljmp start org 0bh ljmp int_t0 org 001bh ljmp tim1start: mov tmod,#01h ;設(shè)置t0工作方式 setb et0 setb ea

13、 ;啟動t0main: mov p1,#0ffh ;p1全置1 clr p1.4 ;開始掃描第一行 mov a,p1 anl a,#0fh ;屏蔽高四位 xrl a,#0fh ;低位 有”0”則有鍵按下,否則無 jz kkey1 ; 判斷有無鍵按下,有則繼續(xù),沒有則轉(zhuǎn)移到kkey1 lcall dely10ms ;調(diào)用延時程序 mov a,p1 ;重新開始判斷有無鍵按下 anl a,#0fh xrl a,#0fh jz kkey1 mov a,p1 anl a,#0fh ;求鍵值 cjne a,#0eh,ckk1 ;相等說明該行第一列有鍵按下,不等則轉(zhuǎn)移 mov buff,#0 ;該鍵值為0

14、ljmp ndk1 ;跳到ndk1執(zhí)行相應(yīng)的功能程序ckk1: cjne a,#0dh,kk2;相等說明該行第二列有鍵按下,不等則轉(zhuǎn)移 mov buff,#1;該鍵值為1 ljmp ndk1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk2: cjne a,#0bh,kk3;相等說明該行第三列有鍵按下,不等則轉(zhuǎn)移 mov buff,#2;該鍵值為2 ljmp ndk1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk3: cjne a,#07h,kk4;相等說明該行第四列有鍵按下,不等則轉(zhuǎn)移 mov buff,#3;該鍵值為2 ljmp ndk1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk4: nopndk1: mov a,b

15、uff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk1a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk1a clr tr0kkey1: mov p1,#0ffh ;開始掃描第二行 clr p1.5 mov a,p1 an

16、l a,#0fh xrl a,#0fh jz kkey2 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey2 mov a,p1 anl a,#0fh cjne a,#0eh,kk5 mov buff,#4 ljmp ndk2kk5: cjne a,#0dh,kk6 mov buff,#5 ljmp ndk2kk6: cjne a,#0bh,kk7 mov buff,#6 ljmp ndk2kk7: cjne a,#07h,kk8 mov buff,#7 ljmp ndk2kk8: nopndk2: mov a,buff mov dptr

17、,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk2a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk2a clr tr0kkey2: mov p1,#0ffh ;開始掃描第三行 clr p1.6 mov a,p1 anl a,#0fh xrl

18、 a,#0fh jz kkey3 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey3 mov a,p1 anl a,#0fh cjne a,#0eh,kk9 mov buff,#8 ljmp ndk3kk9: cjne a,#0dh,kk10 mov buff,#9 ljmp ndk3kk10: cjne a,#0bh,kk11 mov buff,#10 ljmp ndk3kk11: cjne a,#07h,kk12 mov buff,#11 ljmp ndk3kk12: nopndk3: mov a,buff mov dptr,#ta

19、ble movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk3a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk3a clr tr0kkey3: mov p1,#0ffh;開始掃描第四行 clr p1.7 mov a,p1 anl a,#0fh xrl a,#0

20、fh jz kkey4 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey4 mov a,p1 anl a,#0fh cjne a,#0eh,kk13 mov buff,#12 ljmp ndk4kk13: cjne a,#0dh,kk14 mov buff,#13 ljmp ndk4kk14: cjne a,#0bh,kk15 mov buff,#14 ljmp ndk4kk15: cjne a,#07h,kk16 mov buff,#15 ljmp ndk4kk16: nopndk4: mov a,buff mov dptr,#tab

21、le movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk4a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk4a clr tr0kkey4: mov a,#0ffhmov p2,a mov a,p2jb acc.0, kkey5lcall dely10msmo

22、v a,p2jb acc.0, kkey5mov buff,#16ljmp start22start22: mov a,buffcjne a,#16,kkey5ljmp start2kkey5: ljmp main start2: mov tmod,#10h ;設(shè)t1在m1 mov ie,#88h ;中斷使能 start0: mov 30h,#00 ;取簡譜碼指針 next: mov a,30h ;簡譜碼指針載入a mov dptr,#tab ;至tab取簡譜碼 movc a,a+dptr ;mov r2,a ;渠道的簡譜碼暫存于r2 jz end0 ;是否渠道00(結(jié)束碼) anl a,#0

23、fh ;不是,則取低4位(節(jié)拍碼) mov r5,a ;將節(jié)拍碼存入r5 mov a,r2 ;將取到的簡譜碼再載入a swap a ;高低4位交換 anl a,#0fh ;取低4位(音符碼) jnz sing ;取到的音符碼是否為0? clr tr1 ;開始,則不發(fā)音 sjmp d1 ;跳至d1 sing: dec a ;取到的音符碼減1(不含0) mov 22h,a ;存入(22h) rl a ;乘2 mov dptr,#tab1 ;至table1取相對的高位字節(jié)計數(shù)值 movc a,a+dptr ; mov th1,a ;取到的高位字節(jié)存入th0 mov 21h,a ;取到的高位字節(jié)存入(

24、21h) mov a,22h ;在載入取到的音符碼 rl a ;乘2 inc a ;加1 movc a,a+dptr ;至table1取相對的低位字節(jié)計數(shù)值 mov tl1,a ;取到的低位字節(jié)存入tl0 mov 20h,a ;取到的低位字節(jié)存入(20h) setb tr1 ;啟動timer0d1: lcall delay ;其本單位時間1/4拍187毫秒 inc 30h ;取簡譜碼指針加1 jmp next ;取下一個簡譜碼 end0: clr tr1 ;停止timer0 ljmp main ;重復(fù)循環(huán) tim1: push acc ;將a的值暫存于堆棧 push psw ;將psw的值暫存

25、于堆棧 mov tl1,20h ;重設(shè)計數(shù)值 mov th1,21h ; cpl p3.0 ;將p1.0位反相,控制蜂鳴器發(fā)聲 pop psw ;至堆棧取回psw的值 pop acc ;至堆棧取回a的值 reti delay: mov r7,#02 d2: mov r4,#187 d3: mov r3,#248 djnz r3,$ djnz r4,d3 djnz r7,d2 ret dely10ms: mov r6,#10d10: mov r7,#248 djnz r7,$ djnz r6,d10 retint_t0: mov th0,sth0 mov tl0,stl0 cpl p3.0 re

26、titable: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71htable1: dw 64021,64103,64260,64400 dw 64524,64580,64684,64777 dw 64820,64898,64968,65030 dw 65058,65110,65157,65178 tab1: ;決定節(jié)拍 dw 64260,64400,64521,64580 dw 64684,64777,64820,64898 dw 64968,65030,65058,65110 dw 65157,65178,65217 tab: ;樂曲 db 02h,82h,62h,52h

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論