![基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc_第1頁](http://file4.renrendoc.com/view/f59fefe66236d4df8140e41a7444748f/f59fefe66236d4df8140e41a7444748f1.gif)
![基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc_第2頁](http://file4.renrendoc.com/view/f59fefe66236d4df8140e41a7444748f/f59fefe66236d4df8140e41a7444748f2.gif)
![基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc_第3頁](http://file4.renrendoc.com/view/f59fefe66236d4df8140e41a7444748f/f59fefe66236d4df8140e41a7444748f3.gif)
![基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc_第4頁](http://file4.renrendoc.com/view/f59fefe66236d4df8140e41a7444748f/f59fefe66236d4df8140e41a7444748f4.gif)
![基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc_第5頁](http://file4.renrendoc.com/view/f59fefe66236d4df8140e41a7444748f/f59fefe66236d4df8140e41a7444748f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載
*****************基于MATLAB的數(shù)字電子琴設(shè)計【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載實(shí)踐教學(xué)*******************題目:基于MATLAB的數(shù)字電子琴設(shè)計專業(yè)班級:姓名:學(xué)號:指導(dǎo)教師:成績:摘要本次課設(shè)的任務(wù)是基于MATLAB設(shè)計一個數(shù)字電子琴,首先實(shí)現(xiàn)數(shù)字信號發(fā)生器的設(shè)計。數(shù)字信號發(fā)生器是一種基于軟硬件實(shí)現(xiàn)的波形發(fā)生器,可以實(shí)現(xiàn)各種基本波形的產(chǎn)生。在工程的各種復(fù)雜信號是由這些基本信號疊加產(chǎn)生,因此它在工程分析和實(shí)驗(yàn)教學(xué)中有著廣泛的應(yīng)用,可用MATLAB實(shí)現(xiàn)。MATLAB是一個數(shù)據(jù)分析和處理功能十分強(qiáng)大的工程實(shí)用軟件,它的數(shù)據(jù)采集工具箱為實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出提供了十分方便的函數(shù)和命令,在數(shù)字信號處理方面方便實(shí)用.本文首先詳細(xì)介紹了基于MATLAB的數(shù)字發(fā)生器的設(shè)計過程,實(shí)現(xiàn)了簡單波形(正弦波、方波、三角波、鋸齒波、白噪聲、脈沖、階躍)信號的具體實(shí)現(xiàn)方法。其次介紹了利用該數(shù)字信號發(fā)生器產(chǎn)生的正弦波信號和聲卡設(shè)計的簡易電子琴.關(guān)鍵詞:MATLAB;數(shù)字信號發(fā)生器;簡易電子琴目錄TOC\o"1-2”\h\uHYPERLINK\l”_Toc393375326"前言1HYPERLINK\l”_Toc393375327"一、數(shù)字信號發(fā)生器2HYPERLINK\l”_Toc393375328"1.1圖形用戶界面的簡介2HYPERLINK\l”_Toc393375329"1.2設(shè)計流程2_Toc393375332"2.1簡易數(shù)字電子琴的簡介6HYPERLINK\l”_Toc393375333”2.2實(shí)現(xiàn)原理6三、基于MATLAB的仿真及結(jié)果分析8HYPERLINK\l”_Toc393375335"3.1GUI界面8總結(jié)19HYPERLINK\l”_Toc393375339"參考文獻(xiàn)20_Toc393375341”致謝34前言MATLAB(矩陣實(shí)驗(yàn)室)是MatrixLaboratory的縮寫,是一種用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級計算機(jī)語言和交互式環(huán)境.MATLAB可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)圖像和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計算、控制設(shè)計、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計與分析等領(lǐng)域.Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口、光標(biāo)、按鍵、菜單、文字說明等對象構(gòu)成的一個用戶界面,可在圖形用戶界面內(nèi)根據(jù)需要搭建圖形,并對控件的回調(diào)函數(shù)進(jìn)行編寫,完成最完整的GUI界面編輯即可運(yùn)行。本文主要利用MATLAB的圖形用戶界面設(shè)計數(shù)字信號發(fā)生器,在數(shù)字信號發(fā)生的基礎(chǔ)上實(shí)現(xiàn)簡易電子琴的設(shè)計。信號發(fā)生器又稱信號源或振蕩器,是一種能提供各種頻率、波形和輸出電平電信號的儀器,數(shù)字信號發(fā)生器只是信號發(fā)生器的一種,在生產(chǎn)實(shí)踐和科技領(lǐng)域中有著廣泛的應(yīng)用.信號發(fā)生器按信號波形可分為正弦信號、函數(shù)(波形)信號、脈沖信號和隨機(jī)信號發(fā)生器等四大類。能夠產(chǎn)生多種波形,如正弦波、三角波、鋸齒波、矩形波(含方波)、階躍信號、脈沖信號的電路被稱為函數(shù)信號發(fā)生器。本文設(shè)計了一種基于MATLAB圖形用戶界面的可以產(chǎn)生正弦波、方波、三角波、鋸齒波、白噪聲、脈沖信號、階躍信號的虛擬數(shù)字信號發(fā)生器。一、數(shù)字信號發(fā)生器1.1圖形用戶界面的簡介圖形用戶界面即GraphicalUserInterface,簡稱GUI,又稱圖形用戶接口。Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口、光標(biāo)、按鍵、菜單、文字說明等對象構(gòu)成的一個用戶界面.用戶通過一定的方法(如鼠標(biāo)或鍵盤)選擇、激活這些圖形對象,使計算機(jī)產(chǎn)生某種動作或變化,比如實(shí)現(xiàn)計算、繪圖等.MATLAB的用戶,在指令窗中運(yùn)行demo打開那圖形界面后,只要用鼠標(biāo)進(jìn)行選擇和點(diǎn)擊,就可產(chǎn)生豐富的內(nèi)容。對圖形用戶界面的操作一般有兩個部分,首先按照設(shè)計的原理、要求,根據(jù)需要選擇適當(dāng)?shù)膱D形對象搭建合理的GUI界面;然后對每個控件的回調(diào)函數(shù)在M文件內(nèi)進(jìn)行編寫,使搭建的GUI界面能夠運(yùn)行。數(shù)字信號發(fā)生器的設(shè)計所使用的工具即GUI界面,用到的圖形對象有pushbutton、Aexs、Slider、StaticText、EditText。模擬了七種信號:正弦波、方波、三角波、階躍信號、斜波信號、鋸齒波以及白噪聲信號。具體的實(shí)現(xiàn)原理如下。1。2設(shè)計流程根據(jù)設(shè)計的要求分析出數(shù)字信號發(fā)生器的GUI界面構(gòu)圖,然后在MATLAB的workplace界面中輸入guide,打開GUI界面.在GUI界面中搭建好具體的數(shù)字信號發(fā)生器的界面,并對每個控件的回調(diào)函數(shù)進(jìn)行編寫、保存M文件。運(yùn)行,若結(jié)果正確,再同一個GUI界面中搭建好電子琴的GUI界面,利用數(shù)字信號發(fā)生器產(chǎn)生的正弦波,對電子琴每個控件的回調(diào)函數(shù)進(jìn)行編寫、保存M文件。運(yùn)行,觀察仿真結(jié)果.若數(shù)字信號發(fā)生器的仿真結(jié)果不正確,檢查控件的回調(diào)函數(shù),修改并保存M文件,再次運(yùn)行觀察仿真結(jié)果。具體的設(shè)計流程圖如下:1.3波形實(shí)現(xiàn)的基本原理1.3.1正弦波的實(shí)現(xiàn)正弦信號的數(shù)學(xué)表達(dá)式如下:(1.1)其中:為幅值;為頻率;為相位。在MATLAB中,由于處理對象均是離散的數(shù)字信號,將時間變量離散化并構(gòu)造成一個一維數(shù)組用其中:為采樣頻率。但的值不能太大,否則波形顯示會很慢。相應(yīng)的正弦波信號的數(shù)字信號表達(dá)式為(1。2)幅值、頻率、相位參數(shù)可以由用戶界面上的滑動條或編輯框輸入。在分別得到與的離散值后,用plot作圖函數(shù)即可獲得相應(yīng)波形顯示。1。3。2方波信號的實(shí)現(xiàn)方波信號的數(shù)學(xué)表達(dá)式為(1.3)該式可直接生成一個周期為,峰值為,占空比為的方波信號,的默認(rèn)值為50%。在MATLAB中可得到幅值、頻率、相位可調(diào)的方波信號函數(shù)(1.4)1。3.3三角波信號的實(shí)現(xiàn)在MATLAB中,可以用函數(shù)直接生成一個三角波信號,該函數(shù)可生成一個周期為,峰值為,最大值出現(xiàn)在位置的三角波。利用該函數(shù),可得到幅值、頻率、相位可調(diào)的三角波信號函數(shù)(1。5)1。3.4鋸齒波信號的實(shí)現(xiàn)由于鋸齒波信號與三角波信號相似,所以將函數(shù)中的參數(shù)值設(shè)為1,可得到鋸齒波。該函數(shù)得到的幅值、頻率、相位可調(diào)的鋸齒波信號函數(shù)(1。6)1。3.5脈沖信號的實(shí)現(xiàn)由于脈沖信號與方波信號波形相似,用方波信號函數(shù)函數(shù)為基礎(chǔ),將其函數(shù)值加1,可得到最大值為2,最小值為0的脈沖波形,原函數(shù)的參數(shù)可用來調(diào)節(jié)脈沖的寬度。用該函數(shù),得到幅值、頻率、相位可調(diào)的脈沖信號函數(shù)。(1.7)1。3。6階躍信號的實(shí)現(xiàn)由于階躍信號比較特殊,可用函數(shù)直接表示,其函數(shù)表達(dá)式為(1.8)1。3.7白噪聲信號的實(shí)現(xiàn)白噪聲信號是指功率譜密度在整個頻域內(nèi)均勻分布的噪聲。白噪聲的實(shí)現(xiàn)可借助于MATLAB中的函數(shù),它的功能是產(chǎn)生一個均值為0,標(biāo)準(zhǔn)差為1的隨機(jī)數(shù)列或矩陣函數(shù),可得到一個均值為0,標(biāo)準(zhǔn)差為的維的隨機(jī)矩陣。二、電子琴的實(shí)現(xiàn)2。1簡易數(shù)字電子琴的簡介在設(shè)計界面中包含A、B、C、D、E、F、G共7個琴鍵,由于低音頻率區(qū)分不是很明顯,此次課設(shè)選擇的是中音頻率,其中每個按鍵對應(yīng)一個頻率的正弦波信號,各按鍵對應(yīng)的信號頻率分別為392、440、494、523、587、659、698、784Hz。當(dāng)用鼠標(biāo)按下相應(yīng)的鍵時發(fā)聲,松開時發(fā)聲停止,然后將數(shù)字信號寫入聲卡的緩沖區(qū),由聲卡播放出相應(yīng)的聲音。當(dāng)用鼠標(biāo)按下對應(yīng)的鍵時即可發(fā)出相應(yīng)頻率的聲音。2.2實(shí)現(xiàn)原理電子琴的實(shí)現(xiàn)基于之前設(shè)計的數(shù)字信號發(fā)生器,選擇數(shù)字發(fā)生器產(chǎn)生的正弦波信號作為發(fā)聲及顯示波形,由回調(diào)函數(shù)和數(shù)字信號發(fā)生器結(jié)合起來,實(shí)現(xiàn)對波形的調(diào)用。每個鍵對應(yīng)一定的頻率,在各個鍵的回調(diào)函數(shù)中設(shè)置好頻率及頻譜顯示,實(shí)現(xiàn)每個鍵有自己特定頻率的功能,為了使最終仿真結(jié)果更好,選擇音階中音調(diào)高的頻率作為調(diào)試頻率。當(dāng)鍵按下的時候,首先由相應(yīng)的鍵和數(shù)字信號關(guān)聯(lián)起來,隨后將數(shù)字信號寫入聲卡的緩沖區(qū),由聲卡發(fā)出相應(yīng)頻率的聲音,并顯示波形及對應(yīng)頻率的頻譜圖,當(dāng)鍵松開時聲音即停止.此次電子琴的設(shè)計實(shí)現(xiàn)了正弦波顯示、頻譜顯示以及發(fā)聲的功能,從而實(shí)現(xiàn)虛擬電子琴的模仿功能。具體的實(shí)現(xiàn)流程圖如下:開始開始打開MATLAB打開MATLAB搭建電子琴的GUI界面搭建電子琴的GUI界面執(zhí)行并觀察仿真結(jié)果執(zhí)行并觀察仿真結(jié)果結(jié)束結(jié)束圖2.1電子琴的實(shí)現(xiàn)流程圖三、基于MATLAB的仿真及結(jié)果分析3.1GUI界面3.1.1搭建數(shù)字信號發(fā)生器的GUI界面搭建的GUI界面如下圖3。1:圖3.1數(shù)字信號發(fā)生器的GUI界面3。1.2電子琴的GUI界面.搭建的數(shù)字電子琴GUI界面如圖3。2所示:圖3。2數(shù)字電子琴的GUI界面G該界面主要由琴鍵組成,每個按鍵對應(yīng)一定的頻率,模擬電子琴的發(fā)聲功能,它的波形顯示及頻譜圖在數(shù)字信號發(fā)生器中。3.2編寫M文件3。2。1數(shù)字信號發(fā)生器的M文件(1)正弦信號的實(shí)現(xiàn)由正弦信號的數(shù)學(xué)表達(dá)式可知在程序中用到的具體表達(dá)式為(3。1)將時間變量離散化并構(gòu)造成一個一維數(shù)組,要求采樣頻率不能太大,否則波形顯示會很慢(2)方波信號的實(shí)現(xiàn)用函數(shù)直接生成一個方波信號,程序中使用的具體函數(shù)為(3。2)(3)三角波的實(shí)現(xiàn)函數(shù)直接生成一個三角波信號,程序中用到的具體實(shí)現(xiàn)函數(shù)為(3.3)(4)鋸齒波信號的實(shí)現(xiàn)具體的函數(shù)實(shí)現(xiàn)形式為(3.4)(5)脈沖信號的實(shí)現(xiàn)抽樣頻率為8000,時間范圍為[0,1],坐標(biāo)抽為[0,a+1]。得到的幅值、頻率、相位可調(diào)的脈沖信號函數(shù)。具體的函數(shù)(3.5)(6)階躍信號的實(shí)現(xiàn)取1,A取1,t取[0,2],時間間隔為/100。階躍信號的函數(shù)表達(dá)式為(3.6)(7)白噪聲信號的實(shí)現(xiàn)白噪聲是指功率譜密度在整個頻域內(nèi)均勻分布的噪聲。白噪聲的實(shí)現(xiàn)可借于MATLAB中的函數(shù),產(chǎn)生一個均值為0,標(biāo)準(zhǔn)差為1的隨機(jī)數(shù)列或矩陣該函數(shù)可得到一個均值為0,標(biāo)準(zhǔn)差為的維的隨機(jī)矩陣.(3。7)3。3仿真結(jié)果數(shù)字信號發(fā)生器的仿真結(jié)果如下:正弦波的仿真結(jié)果圖3.3數(shù)字信號發(fā)生器的正弦波波形方波信號的仿真結(jié)果圖3.4方波信號的波形(3)三角波信號仿真結(jié)果圖3.5三角波信號的波形階躍信號仿真結(jié)果圖3。6階躍信號的仿真結(jié)果(5)斜波信號圖3.7斜波信號的仿真結(jié)果(6)鋸齒波信號的仿真結(jié)果圖3。8階躍信號的仿真結(jié)果(7)白噪聲仿真結(jié)果(1)按鍵A的仿真結(jié)果圖3。10按下A鍵,電子琴演奏時的效果(2)按鍵B的仿真結(jié)果圖3.11按下B鍵,電子琴演奏時的效果(3)按鍵C的仿真結(jié)果圖3.12按下C鍵,電子琴演奏時的效果總結(jié)本次的課程設(shè)計的任務(wù)是基于MATLAB設(shè)計一個數(shù)字電子琴,首先設(shè)計一個數(shù)字信號發(fā)生器。數(shù)字信號發(fā)生器和電子琴的搭建都是在GUI界面中進(jìn)行搭建的,在GUI界面中搭建好具體的數(shù)字信號發(fā)生器的界面,并對每個控件的回調(diào)函數(shù)進(jìn)行編寫、保存M文件。運(yùn)行,若結(jié)果正確,再同一個GUI界面中搭建好電子琴的GUI界面,利用數(shù)字信號發(fā)生器產(chǎn)生的正弦波,對電子琴每個控件的回調(diào)函數(shù)進(jìn)行編寫、保存M文件搭建完成之后對各個控件進(jìn)行回調(diào)函數(shù)的編寫.如果數(shù)字信號發(fā)生器的運(yùn)行結(jié)果正確,則繼續(xù)搭建電子琴否則修改直到正確為止。在本次的課程設(shè)計中,確實(shí)遇到了很多問題,但通過大家的幫助和自己的努力,最終實(shí)現(xiàn)所有的設(shè)計要求。本次課程設(shè)計也許還存在著一些不足,在以后學(xué)習(xí)生活中會更加努力,爭取做得更好.參考文獻(xiàn)[1]丁玉美.數(shù)字信號處理[M]。西安電子科技大學(xué)出版社,2003,3。[2]朱冰蓮。數(shù)字信號處理[M]。電子工業(yè)出版社,2003,7。[3]程佩青。數(shù)字信號處理教程(第二版)[M]。北京:清華大學(xué)出版社,2001.[4]韓紀(jì)慶,張磊,鄭鐵然。語音信號處理[M]。北京:清華大學(xué)出版社,2004.[5]王濟(jì),胡曉.MATLAB在振動信號處理中的應(yīng)用[M].北京:中國水利水電出版社:知識產(chǎn)權(quán)出版社,2006.[6]周祥才,楊錚.基于MATLAB的信號采樣與重構(gòu)的實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2007,24[7]張志涌等.精通MATLAB[M].北京:北京航空航天大學(xué)出版社,2003.[8]車子萍?;贛atlab的虛擬信號發(fā)生器設(shè)計[J]。電腦學(xué)習(xí),2010。1.[9]李益華。MATLAB輔助現(xiàn)代工程數(shù)字信號處理(第2版)。西安:西安電子科技大學(xué)出版社,2010[10]楊潔芳.基于MATLAB與聲卡的低頻信號發(fā)生器的設(shè)計與實(shí)現(xiàn)。電腦學(xué)習(xí),2006附錄:functionpushbutton16_Callback(hObject,eventdata,handles)Fs=8000;t=(0:2000)/Fs;pit=2*pi*t;a1=523;y=sin(a1*pit);axes(handles。axes1);plot(t,y);title(’時域波形')xlabel(’t’)ylabel(’y’)axis([0,。01,—2,2])axes(handles。axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024));plot(w,F);title(’頻譜圖’)xlabel('w’)ylabel(’F(w)')sound(y);functionpushbutton24_Callback(hObject,eventdata,handles)Fs=8000;t=(0:2000)/Fs;pit=2*pi*t;a2=587;y=sin(a2*pit);axes(handles.axes1);plot(t,y);title('時域波形')xlabel('t')ylabel('y’)axis([0,.01,—2,2])axes(handles.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1-512)/512;F=abs(f1(513:1024));plot(w,F(xiàn));title('頻譜圖')xlabel(’w’)ylabel(’F(w)')sound(y);functionpushbutton25_Callback(hObject,eventdata,handles)Fs=8000;t=(0:2000)/Fs;pit=2*pi*t;a3=659;y=sin(a3*pit);axes(handles。axes1);plot(t,y);title('時域波形’)xlabel('t')ylabel(’y')axis([0,。01,—2,2])axes(handles.axes2);f=fft(y,1024);f1=fftshift(f);w1=513:1024;w=4000*(w1—512)/512;F=abs(f1(513:1024));plot(w,F);title(’頻譜圖')xlabel(’w’)ylabel(’F(w)’)sound(y);functionpushbutton26_Callback(hObject,eventdata,handles)Fs=8000;t=(0:2000)/Fs;pit=2*pi*t;a4=698;y=sin(a4*pit);axes(handles.axes1);plot(t,y);title(’時域波形')xlabel('t’)ylabel('y’)axis([0,。01,—2,2])axes(handles。axes2);faxes(handles。axes1);plot(t,y);title('時域波形')xlabel(’t')ylabel(’y’)axis([0,。01,—2,2])axes(handles。axes2);f=fft=0:1/fs:1。0;y=a*sin(2*pi*(f*t+q/360));axes(handles.axes1);plot(t,y);title('時域波形');xlabel(’t’);ylabel('y');gridon;axis([0,。01,-2,2]);allback(hObject,eventdata,handles)t=(0:pi/100:2*pi);t0=1;A=1;y=0*(t〈t0)+A*(t〉t0);endt=0:1/fs:1.0;y=randn(size(t));title(’時域波形’);plot(t,y);title(’時域波形');xlabel(’t');ylabel(’y’);gridon;axis([0,Ts,—(a+1),(a+1)]);functionslider1_Callback(hObject,eventdata,handles)w=get(hObject,'value');set(handles。edit1,’string’,num2str(w));functionslider1_CreateFcn(hObject,eventdata,handles)ifisequal(get(hObject,’BackgroundColor’),get(0,’defaultUicontrolBackgroundColor'))functionslider2_Callback(hObject,eventdata,handles)w=get(hObject,’value');set(handles.edit2,’string',num2str(w));functionslider2_CreateFcn(hObject,eventdata,handles)ifisequal(get(hObject,’BackgroundColor'),get(0,'defaultUicontrolBackgroundColor’))set(hObject,’BackgroundColor',[.9。9。9]);endfunctionedit1_Callback(hObject,eventdata,handles)v=get(hObject,’string');set(handles。slider1,’value',str2double(v));functionedit1_CreateFcn(hObject,eventdata,handles)ifispc&&isequal(get(hObject,’BackgroundColor’),get(0,'defaultUicontrolBackgroundColor'))endfunctionedit3_Callback(hObject,eventdata,handles)v=get(hObject,'string’);set(handles。slider3,'value’,str2double(v));functionedit3_CreateFcn(hObject,eventdata,handles)get(0,'defaultUicontrolBackgroundColor'))set(hObject,’BackgroundColor','white');end致謝本次課設(shè),我遇到了很多問題,首先感謝我的課程設(shè)計指導(dǎo)教師老師在這段時間一直給我的支持與鼓勵。認(rèn)真負(fù)責(zé)的監(jiān)督我們課程設(shè)計的進(jìn)度,耐心的指導(dǎo)我們使我們能夠按時的完成任務(wù)。同時還要感謝在設(shè)計過程中同學(xué)們尤其是同組成員給給了我很大的幫助,對我課設(shè)過程中不明白的問題給予了即使的、耐心的幫助,讓我對此次課設(shè)涉及的知識有了更加深刻的把握。他們提出了許多寶貴的建議使我們的設(shè)計能得到更好的完善,也加快設(shè)計的進(jìn)程.還有感謝學(xué)校為我們提供的良好實(shí)驗(yàn)環(huán)境以及充足的實(shí)驗(yàn)設(shè)備,為我們的設(shè)計和調(diào)試提供了很大的方便.在這段時間學(xué)到了很多,雖然由于自身的不足沒有能夠?yàn)橄到y(tǒng)提出更好的解決方案.但這對我來說絕對是一個非常寶貴的歷練.從中我切身體會到了理論和現(xiàn)實(shí)的差距,只有真正動手去做才能發(fā)現(xiàn)問題.同時,小組成員相互商討解決方案,發(fā)現(xiàn)設(shè)計中的不足之處,使錯誤得到了即使改正,在此衷心地感謝老師以及這幾周的殷切指導(dǎo)以及同學(xué)們提出諸多寶貴意見真誠地道一聲,謝謝!單片機(jī)課程設(shè)計報告書小組成員:呂夢莎吳玉鳳學(xué)號:1121307211213078班級:自動化1106指導(dǎo)教師:于振宇基于AT89C51的屏幕聲光式可錄音電子琴北京交通大學(xué)電子信息工程學(xué)院呂夢莎吳玉鳳摘要:本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,通過脈沖觸發(fā)產(chǎn)生出電子音調(diào),與按鍵、揚(yáng)聲器、LCD顯示屏等模塊組成控制模塊,設(shè)計一個電子琴。該系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比較高等,具有一定的實(shí)用與參考價值。關(guān)鍵詞:AT89C51、脈沖觸發(fā)、屏幕聲光式、錄音、播放、演奏、電子琴。第一章引言1.1設(shè)計背景單片微型計算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬第四代電子計算機(jī),它具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。
電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。
本文對利用單片機(jī)設(shè)計簡易電子琴進(jìn)行了分析,分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細(xì)闡述。本系統(tǒng)是簡易電子琴的設(shè)計,按下四角自鎖開關(guān)會使LCD顯示屏顯示當(dāng)前音符名稱、播放的歌曲名稱或播放的錄音名稱,同時揚(yáng)聲器播放對應(yīng)的音符,LED閃爍相應(yīng)的節(jié)奏。通過設(shè)計本系統(tǒng)可熟悉掌握單片機(jī)的基本功能。1。2
設(shè)計任務(wù)
1、設(shè)計以單片機(jī)為核心的簡易電子琴系統(tǒng),可隨意彈奏想要表達(dá)的音樂;
2、針對要求控制的對象完成程序的編制;3、硬件軟件聯(lián)調(diào),完成題目所要求的功能;
1.3設(shè)計思路1、發(fā)聲部分設(shè)計思路音樂是由不同頻率的聲音組成的。利用程序來控制單處機(jī)某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波。利用延時程序控制“高”“低"電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào).于是產(chǎn)生do,re,mi,fa,so,la,xi七個音符的變換。2、顯示部分設(shè)計思路考慮到信息的多媒體傳播已經(jīng)成為信息化時代的主流,我們給電子琴設(shè)計了LCD顯示器和節(jié)拍指示LED燈,帶來視聽雙重沖擊。LCD具有功耗低,顯示質(zhì)量高,數(shù)字式接口更加穩(wěn)定可靠的優(yōu)點(diǎn).演示過程中可顯示歡迎語,當(dāng)前功能,按下的音符名稱,當(dāng)前播放的歌曲名稱等。第二章方案論證采用AT89C51單片機(jī)作為主控芯片,設(shè)置獨(dú)立按鍵、揚(yáng)聲器、LCD顯示屏等外圍器件,另外還用到一些簡單器件如NPN型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;LCD顯示屏進(jìn)行被操作的按鍵顯示;用PNP型三極管2N2907實(shí)現(xiàn)低音頻功率放大;最后用揚(yáng)聲器發(fā)音。
主控芯片采用AT89C51單片機(jī),它是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。避免了由于元器件種類、個數(shù)繁多,而過于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過大等不利因素.同時具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,由于本設(shè)計主要用于娛樂方面,因此在設(shè)計上盡量使其安全以及簡單易操作。具有經(jīng)濟(jì)可行性、技術(shù)可行性、實(shí)物應(yīng)用性。第三章硬件系統(tǒng)設(shè)計3.1時鐘電路MCS-51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端輸出端。本圖采用內(nèi)部時鐘電路,如圖3-1所示,通常在引腳XTALl和XTAL2上跨接石英晶體X1和兩個補(bǔ)償電容C1、C2構(gòu)成自激振蕩器.可以根據(jù)情況選擇2~12MHz頻率之間的石英晶體,補(bǔ)償電容通常選擇30pF左右的瓷片電容。圖3-1時鐘電路3。2復(fù)位電路單片機(jī)小系統(tǒng)常采用上電自動復(fù)位和手動按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)的復(fù)位操作。本實(shí)驗(yàn)采用上電自動復(fù)位方式,其結(jié)構(gòu)圖如圖3—2所示。上電復(fù)位要求接通電源后,自動實(shí)現(xiàn)復(fù)位操作。復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。對于MCS—51單片機(jī),只要在RST復(fù)位端接一個電容至VCC和一個電阻至VSS即可.在加電瞬間,RST端出現(xiàn)一定時間的高電平,只要高電平保持時間足夠長,就可以使MCS—51復(fù)位。圖3—2復(fù)位電路3。3原理框圖本系統(tǒng)有主控芯片AT89C52、揚(yáng)聲器、顯示模塊、按鍵模塊和晶振復(fù)位電路組成。圖3-3原理框圖3。4顯示部分設(shè)計為了讓電子琴能夠顯示出音調(diào),我們另外附加了一個LCD1602提供屏幕式音調(diào)顯示,LCD1602屬于字符型液晶,可以顯示字母和數(shù)字等字符。LCD1602是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。圖3-4顯示電路3。5按鍵部分設(shè)計3.5.1鍵盤設(shè)計鍵盤可以分為2類:獨(dú)立連接式鍵盤和矩陣式鍵盤.本設(shè)計采用獨(dú)立式鍵盤。獨(dú)立式按鍵是直接用I/O口線構(gòu)成的單個按鍵電路,其特點(diǎn)是每個按鍵單獨(dú)占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單。獨(dú)立式按鍵軟件常采用查詢式結(jié)構(gòu)。先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序.由于本程序較為簡單,為了使用方便及節(jié)省資源,選擇獨(dú)立式鍵盤。下圖為獨(dú)立式鍵盤電路圖:圖3-5獨(dú)立式鍵盤電路圖3。5.2去抖動鍵盤編程中主要考慮去抖動的問題。當(dāng)測試表明有鍵被按下之后,緊接著就進(jìn)行去抖動處理.因?yàn)榘存I是機(jī)械開關(guān)結(jié)構(gòu),由于機(jī)械觸點(diǎn)的彈性及電壓突跳等原因,在觸點(diǎn)閉合或斷開的瞬間會出現(xiàn)電壓抖動。為保證鍵識別的準(zhǔn)確,在電壓信號抖動的情況下不能進(jìn)行行狀態(tài)輸入。為此需進(jìn)行去抖動處理。去抖動有硬件和軟件兩種方法。硬件方法就是加去抖動CPU便確認(rèn)此按鍵己按下,消除了抖動。本實(shí)驗(yàn)采用軟件消抖法,在按鍵按下后,執(zhí)行一段延時程序。3.6發(fā)音部分設(shè)計如下圖所示,發(fā)音電路是由揚(yáng)聲器、三極管、變位器構(gòu)成.由三極管來驅(qū)動揚(yáng)聲器發(fā)音的,同時加上變位器實(shí)現(xiàn)電阻的可調(diào)來增強(qiáng)驅(qū)動電流,提高驅(qū)動能力,從而調(diào)節(jié)揚(yáng)聲器的音效。
圖3-6揚(yáng)聲器電路圖第四章軟件系統(tǒng)設(shè)計4。1
系統(tǒng)分析
4。1.1系統(tǒng)軟件的組成
(1)鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。
(2)功能轉(zhuǎn)移程序:對檢測到的按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們設(shè)計的功能程序有三種,即音色調(diào)節(jié)功能、自動播放樂曲和錄音的功能.
(3)琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音。
(4)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲或錄音歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有按鍵按下。(5)錄音程序:檢測到按鍵按下的是錄音功能鍵后執(zhí)行該程序,跳轉(zhuǎn)到鍵盤掃描程序,檢測是否有鍵按下,有按鍵按下則記錄按下鍵值,根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音并跳轉(zhuǎn)到功能轉(zhuǎn)移程序。4.1.2
系統(tǒng)總體功能流程圖開始開始初始化T0初始化T0鍵盤掃描鍵盤掃描程序演奏功能鍵按下自動播放鍵按下錄音功能鍵按下NN演奏功能鍵按下自動播放鍵按下錄音功能鍵按下YYY記錄音符記錄音符播放內(nèi)部存儲的音樂查表得到按鍵音符頻率播放內(nèi)部存儲的音樂查表得到按鍵音符頻率查表得到按鍵音符頻率查表得到按鍵音符頻率播放音符播放音符播放音符播放音符4。2
參數(shù)計算
4.2.1發(fā)音原理
若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當(dāng)計時終止后就將P1.0反相,然后重復(fù)計時再反相。就可在P1。0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階.音調(diào)的確定音調(diào)是唱曲時樂音的發(fā)音,一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡譜的1、2、3、4、5、6、7,相當(dāng)于漢字“多來米發(fā)梭拉西"的讀音。例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO(523Hz)。計數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr,式中,N是計數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產(chǎn)生的頻率.其計數(shù)初值T的求法如下:T=65536-N=65536-fi÷2÷fr例如:設(shè)K=65536,fi=1MHz,求中音DO(261Hz)。T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。由音符的頻率值可以計算得出各個音調(diào)的計數(shù)值,如表4-1所示:(﹟叫升記號,表示把音在原來的基礎(chǔ)上升高半音,b叫降記音,表示在原來的基礎(chǔ)上降低半音。)表4—1音調(diào)頻率與計數(shù)初值對照音符頻率(Hz)計數(shù)值(T值)音符頻率(Hz)計數(shù)值(T值)低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964103中7SI96865030#4FA#37064185低1DO104665058低SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO52364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序進(jìn)行查表時,可以為這個音符建立一個表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù).4.2.3節(jié)拍的確定若要構(gòu)成音樂,光有音調(diào)是不夠的,還需要節(jié)拍,讓音樂具有旋律(固定的律動),而且可以調(diào)節(jié)各個音的快滿度?!肮?jié)拍”,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實(shí)0。5s,則1/4拍為0。125s,只要設(shè)定延遲時間就可以求得節(jié)拍的時間,假設(shè)1拍為4DELAY,則1/4應(yīng)為1DELAY,以此類推,得到如表4-2所示的節(jié)拍與延遲時間對照表。休止符表示暫停發(fā)音。表4—21/4和1/8節(jié)拍的時間設(shè)定曲調(diào)值DELAY曲調(diào)值DELAY調(diào)4/4125毫秒調(diào)4/462毫秒調(diào)3/4187毫秒調(diào)3/494毫秒調(diào)2/4250毫秒調(diào)2/4125毫秒4.3程序設(shè)計4.3.1播放子程序(包括自動播放存儲音樂和按鍵發(fā)音)
本設(shè)計共兩種播放模式,包括自動播放存儲音樂和按鍵發(fā)音。上電后,首先開中斷并設(shè)定定時器0為工作方式1,當(dāng)自動播放鍵按下時,進(jìn)入中斷,根據(jù)樂譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即開始播放音樂。當(dāng)DO、RE、MI、FA、SO、LA、SI七種音符鍵按下時,根據(jù)音符值在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即按鍵發(fā)音.開始開始開中斷并設(shè)定工作寄存器開中斷并設(shè)定工作寄存器有鍵按下有鍵按下自動播放鍵按下自動播放鍵按下進(jìn)入中斷N進(jìn)入中斷YY根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷給定時器T0賦值根據(jù)樂譜在數(shù)組中查找相應(yīng)音律給定時器T0賦值根據(jù)樂譜在數(shù)組中查找相應(yīng)音律播放鍵值對應(yīng)的音符播放鍵值對應(yīng)的音符給定時器T0賦值給定時器T0賦值播放音樂播放音樂
第五章
實(shí)驗(yàn)結(jié)果5.1硬件調(diào)試
硬件調(diào)試主要是針對單片機(jī)部分進(jìn)行的調(diào)試.
在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個調(diào)試工作的第一步,也是非常重要的一個步驟。在這部分調(diào)試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務(wù)。注意焊點(diǎn)之間,確保焊點(diǎn)沒有短接在一起,同時注意焊點(diǎn)的美觀,確保沒有開路以及短路的現(xiàn)象出現(xiàn)。在確保硬件電路正常且無異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗(yàn)電路是否接錯,同時還要檢驗(yàn)原理是否正確,在本次設(shè)計中,上電調(diào)試主要是檢測單片機(jī)控制部分、數(shù)碼管點(diǎn)亮部分、和音頻轉(zhuǎn)換電路硬件調(diào)試.
1、數(shù)碼管LED電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到數(shù)碼管顯示數(shù)字。
2、鍵盤單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動鍵盤可以發(fā)現(xiàn)各個按鍵對應(yīng)的音正確.
5.2
軟件調(diào)試
調(diào)試主要方法和技巧:通常一個調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點(diǎn)、查看變量、更改數(shù)值。整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運(yùn)行,各個模塊的子程序的正確與平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序模塊進(jìn)行分別調(diào)試.5.3仿真結(jié)果第六章總結(jié)本次51單片機(jī)課程設(shè)計我們組做的是《基于AT89C51單片機(jī)的屏幕式聲光電子琴的設(shè)計》,通過這次的DIY制作的學(xué)習(xí),我學(xué)到了不少知識,真正體會到了學(xué)以致用的快感,通過自己動手制作小作品不僅加深了我們對51單片機(jī)的理解,而且也增強(qiáng)了我們對音樂的興趣,也因此喜歡上了各種基于51單片機(jī)的小制作,從而更好地將課本知識與實(shí)踐過程相結(jié)合。在這次課程設(shè)計中,主要涉及了軟件和硬件兩個方面的內(nèi)容。在軟件方面,我們掌握了仿真軟件proteus的仿真方法,實(shí)現(xiàn)了7音符的發(fā)聲、錄音以及音樂的自動播放功能,同時也提高了我們用匯編語言編程的能力;在硬件方面,我們對電子產(chǎn)品的開發(fā)流程和功能應(yīng)用有了一定的了解,進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本方法和步驟。并且提高了我們運(yùn)用所學(xué)的專業(yè)基礎(chǔ)知識來解決實(shí)際問題的能力,加深了對所學(xué)理論知識的理解和運(yùn)用,動手能力也得到了相應(yīng)的提高,創(chuàng)新意識得到了鍛煉。在本次的實(shí)驗(yàn)設(shè)計中,我們在借鑒前人的基礎(chǔ)上也對自己的作品進(jìn)行了一部分創(chuàng)新,①在設(shè)置錄音功能方面,根據(jù)隨機(jī)彈奏的音調(diào),將其偏移地址存入36H單元中,然后通過查詢音調(diào)表,使其發(fā)出相應(yīng)頻率的聲音,從而彈奏出事先錄好的一段音樂.②在控制節(jié)奏方面,我們設(shè)置了休止符,來控制節(jié)奏的停頓,這樣就能產(chǎn)生有停頓感的音樂,而不是連續(xù)的,使音樂聽起來更加悅耳。而這些創(chuàng)新均基于匯編語言的學(xué)習(xí).總體來說,此次單片機(jī)課程設(shè)計使我們收獲良多,雖然課程設(shè)計的過程中遇到了很多困難與問題,但我們最終還是完成了設(shè)計的任務(wù)及要求.也讓我認(rèn)識到,無論做什么事情,只要你足夠堅強(qiáng),有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的.最后,衷心感謝老師給我們提供了這樣一次難得的機(jī)會來展示自己的作品,激發(fā)了我們對單片機(jī)DIY小制作的興趣,也感謝老師在這個學(xué)期孜孜不倦的教悔,讓我們在學(xué)習(xí)單片機(jī)的基礎(chǔ)知識的同時,真正體會到學(xué)以致用帶來的快感。由此我覺得,我們的學(xué)習(xí)不僅要在教師引導(dǎo)和幫助下順利入門,還要掌握自動控制原理課程的精髓和要點(diǎn),并且能夠“由厚及薄",達(dá)到對課程整體的把握,具有一定的工程概念和實(shí)踐能力。附錄一:源程序RSEQUP3.5RWEQUP3.6EEQUP3。7ORG00HSJMPMAINORG00BHMOVTH0,33HMOVTL0,34HCPLP3.4RETI;!!??!!!!?。?!!!!!!?。?!!!!!!!!!!!!!!!!!ORG001BHINC3CH;中斷服務(wù),中斷計數(shù)器加1MOVTH1,#0D8HMOVTL1,#0EFH;12M晶振,形成10毫秒中斷RETI;!??!!!?。。?!!!!!?。。。?!!!?。。?!!!!!!!?。。?!!!!!??!!!!!!!??!!!!!!!!!ORG30HMAIN:SETBP3.4;關(guān)閉揚(yáng)聲器LCALLCSH1602;初始化1602MOVTMOD,#11H;設(shè)置定時器0為工作模式1SETBEA;開總中斷SETBET0;開定時器0中斷HUANYING:MOVP1,#80H;歡迎語顯示地址LCALLENABLEMOVDPTR,#TAB_HYMOV30H,#00LP:MOVA,30HMOVCA,@A+DPTRJZKEYLCALLDELAY_100MSLCALLWRITE_1602INC30HSJMPLPKEY:MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_YANZHOUMOV30H,#00LP7:MOVA,30HMOVCA,@A+DPTRJZKEY_0LCALLWRITE_1602INC30HSJMPLP7KEY_0:MOVP1,#0C0H;音符的顯示地址LCALLENABLEMOV38H,#16;寫入1602的顯示地址指針MOV35H,#2;控制節(jié)拍KEY_1:MOVP2,#0FFH;置P2為輸入JBP2.0,KEY_2;K1鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對地址LCALLBOFANG_YFKEY_2:JBP2。1,KEY_3;K2鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.1,$MOV36H,#2LCALLBOFANG_YFKEY_3:JBP2。2,KEY_4;K3鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。2,$MOV36H,#4LCALLBOFANG_YFKEY_4:JBP2。3,KEY_5;K4鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。3,$MOV36H,#6LCALLBOFANG_YFKEY_5:JBP2.4,KEY_6;K5鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。4,$MOV36H,#8LCALLBOFANG_YFKEY_6:JBP2.5,KEY_7;K6鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFKEY_7:JBP2。6,KEY_9;K7鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFKEY_9:JBP3.2,KEY_1;K9鍵沒按下,重新掃描LCALLDELAY_10MS;延時消抖JNBP3。2,$LCALLDELAY_10MS;—-—---—----播放音樂程序段-—-——--———-MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_PLAYMOV30H,#00LP8:MOVA,30HMOVCA,@A+DPTRJZPLAYLCALLWRITE_1602INC30HSJMPLP8PLAY:MOVP2,#0FFH;置P2為輸入JBP2。0,PLAY_2;K1鍵沒按下,轉(zhuǎn)移MOVDPTR,#TAB_GEQU1;存曲目標(biāo)志LCALLBOFANG_GEQUPLAY_2:JBP2.1,PLAY_3;K2鍵沒按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab2movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT2LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_3:JBP2.2,PLAY_4;K3鍵沒按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab1movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT1LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_4:JBP2。3,PLAY_9MOVR1,#50HLCALLBOFANG_LUYINPLAY_9:JBP3.2,PLAY;K8鍵沒按下,重新掃描LCALLDELAY_10MS;延時消抖JNBP3.2,$LCALLDELAY_10MS;—--—-—-----—錄音程序段—-——--————-MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_RECORDMOV30H,#00LP9:MOVA,30HMOVCA,@A+DPTRJZRECORD_0LCALLWRITE_1602INC30HSJMPLP9RECORD_0:MOVR1,#50H;錄取音符存放地址MOV35H,#3;控制節(jié)拍MOVP1,#0C0H;音符的顯示地址LCALLENABLEMOV38H,#16;寫入1602的顯示地址指針;—----—-——寫入錄音的名字----——---MOV30H,#00C5:MOVA,30HLCALLTAB_RECORDINGMOV@R1,A INCR1?INC30H?CJNEA,#0FEH,C5RECORD_1:MOVP2,#0FFH;置P2為輸入JBP2.0,RECORD_2;K1鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對地址LCALLBOFANG_YFLCALLCUNCU;調(diào)存音符子程序RECORD_2:JBP2.1,RECORD_3;K2鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。1,$MOV36H,#2LCALLBOFANG_YFLCALLCUNCURECORD_3:JBP2.2,RECORD_4;K3鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.2,$MOV36H,#4LCALLBOFANG_YFLCALLCUNCURECORD_4:JBP2。3,RECORD_5;K4鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.3,$MOV36H,#6LCALLBOFANG_YFLCALLCUNCURECORD_5:JBP2.4,RECORD_6;K5鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。4,$MOV36H,#8LCALLBOFANG_YFLCALLCUNCURECORD_6:JBP2.5,RECORD_7;K6鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFLCALLCUNCURECORD_7:JBP2。6,RECORD_8;K7鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFLCALLCUNCURECORD_8:JBP2.7,RECORD_9;K8鍵沒按下,轉(zhuǎn)移LCALLDELAY_10MS;延時消抖JNBP2。7,$MOV36H,#42;休止符標(biāo)志存36HLCALLDELAY_100MSLCALLCUNCURECORD_9:JNBP3.2,J0;K8鍵沒按下,重新掃描?LJMPRECORD_1J0:LCALLDELAY_10MS;延時消抖JNBP3.2,$LCALLDELAY_10MS?MOV@R1,#255;寫入歌曲結(jié)束標(biāo)志?LJMPKEY;回演奏模式;***********子程序區(qū)***************;=======初始化1602顯示器========CSH1602:MOVP3,#0FFHMOVP1,#01HACALLENABLEMOVP1,#38HACALLENABLEMOVP1,#0CHACALLENABLEMOVP1,#06HACALLENABLERET;====1602發(fā)命令子程序====ENABLE:CLRRSCLRRWCLREACALLDELAY_2MSSETBERET;=====讀1602IR中命令子程序======ENABLE_1:CLRRSSETBRWCLREACALLDELAY_2MSSETBERET;====寫數(shù)據(jù)子程序(1602)====WRITE_1602:MOVP1,ASETBRSCLRRWCLREMOVR5,#50;延時100us(12M晶振)DJNZR5,$SETBERET;===========播放一個音符并顯示音符和頻譜=========BOFANG_YF:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動定時器0MOVA,36H;取音符的顯示碼LCALLTAB_YF1LCALLWRITE_1602DEC38HMOVA,36HINCALCALLTAB_YF1LCALLWRITE_1602DJNZ38H,D2;1602一行沒寫滿,轉(zhuǎn)移MOV30H,#16;1602滿行清行并從頭開始寫MOVP1,#0C0HLCALLENABLEMOVA,?!?LP10:LCALLWRITE_1602DJNZ30H,LP10MOV38H,#16MOVP1,#0C0HLCALLENABLE;——-—--—-—-顯示頻譜分析條程序段—-—---—-—-D2:MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護(hù)音符碼對應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,?!怠疍5:LCALLWRITE_1602DJNZ39H,D5;————控制節(jié)拍時長程序段--—-—---—MOV37H,35H;保護(hù)循環(huán)次數(shù)控制(節(jié)拍)LP1:ACALLDELAY_100MSDJNZ35H,LP1;延時次數(shù)控制MOV35H,37H;--———---—發(fā)音結(jié)束,清除頻譜分析條---—-—--———-MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#'’MOV39H,3AHD6:LCALLWRITE_1602DJNZ39H,D6MOVA,#10H;釋放音符碼顯示地址CLRCSUBBA,38HADDA,#0C0HMOVP1,ALCALLENABLECLRTR0;關(guān)定時器0RET;===========播放一個音符并顯示頻譜=========BOFANG_YF_1:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動定時器0;—-——-—---—顯示頻譜分析條程序段——-—--—MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護(hù)音符碼對應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,#'>'D7:LCALLWRITE_1602DJNZ39H,D7;——------控制節(jié)拍時長程序段——--—--——MOV37H,35H;保護(hù)循環(huán)次數(shù)控制(節(jié)拍)LP11:ACALLDELAY_100MSDJNZ35H,LP11;延時次數(shù)控制MOV35H,37H;--—--——--發(fā)音結(jié)束,清除頻譜分析條--——----—-—-MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#''MOV39H,3AHD8:LCALLWRITE_1602DJNZ39H,D8CLRTR0;關(guān)定時器0RET;============播放一首歌并顯示歌名=============;—---—-(一個音符2字節(jié)存儲,音符碼存低字節(jié),節(jié)拍存高字節(jié);254為歌曲名結(jié)束標(biāo)志,255為歌曲結(jié)束標(biāo)志)---——-—BOFANG_GEQU:MOVP1,#0C0H;歌名顯示地址LCALLENABLEMOV30H,#00LP2: MOVA,30H?MOVCA,@A+DPTR?INC30H CJNEA,#254,XIANSHI_GEMING SJMPC1XIANSHI_GEMING:MOVP1,ALCALLWRITE_1602? SJMPLP2C1:? MOVP1,#0C0H;歌詞顯示地址? LCALLENABLELP3: ?MOVA,30HMOVCA,@A+DPTR;取音符碼??CJNEA,#0FFH,C6? SJMPS0C6:??CJNEA,#42,C0;音符碼為休止符不開定時器,直接調(diào)用延時INC30H MOVA,30H? MOVCA,@A+DPTR INC30H??MOV35H,ALP12:LCALLDELAY_100MSDJNZ35H,LP12 ?SJMPLP3C0: ?MOV36H,A? INC30H??MOVA,30H MOVCA,@A+DPTR? MOV35H,A ?INC30H??LCALLBOFANG_YF_1??SJMPLP3S0:??RET;============播放一錄音并顯示歌名和歌詞=============;-———--(一個音符2字節(jié)存儲,音符碼存低字節(jié),節(jié)拍存高字節(jié);254為歌曲名結(jié)束標(biāo)志,255為歌曲結(jié)束標(biāo)志)—-—---—---BOFANG_LUYIN:MOVP1,#0C0H;歌名顯示地址LCALLENABLELP4:?MOVA,@R1?INCR1?CJNEA,#254,XIANSHI_LUYIN?SJMPC2XIANSHI_LUYIN:MOVP1,ALCALLWRITE_1602? SJMPLP4C2: MOVP1,#0C0H;歌詞顯示地址??LCALLENABLELP5:?MOVA,@R1;取音符碼? CJNEA,#255,C3 ?SJMPS2C3: CJNEA,#42,C4;音符碼為休止符不開定時器,直接調(diào)用延時INCR1? MOVA,@R1 ?MOV35H,A ?INCR1LP6:LCALLDELAY_100MSDJNZ35H,LP6? SJMPLP5C4:MOV36H,A ?INCR1 ?MOVA,@R1??MOV35H,A INCR1??LCALLBOFANG_YF_1? SJMPLP5S2: ?RET;============存音符子程序==============CUNCU:CJNER1,#0F0H,CUNCU_1MOV@R1,#255SJMPS1;滿160字節(jié)不存儲CUNCU_1:MOV@R1,36HINCR1MOV@R1,35HINCR1S1:RET;=========延時100ms(12M晶振)========DELAY_100MS:MOV31H,R6MOV32H,R7MOVR7,#200D1:MOVR6,#250DJNZR6,$DJNZR7,D1MOVR7,32HMOVR6,31HRET;====延時10MS(12MHz晶振)====DELAY_10MS:MOV31H,R6MOV32H,R7MOVR6,#20D0:MOVR7,#248DJNZR7,$DJNZR6,D0MOVR7,32HMOVR6,31HRET;======延時2MS(12M晶振)========DELAY_2MS:MOV31H,R6MOV32H,R7MOVR7,#4D3:MOVR6,#255D4:DJNZR6,D4DJNZR7,D3MOVR7,32HMOVR6,31HRET;!!!!!!!!!!?。???!!!!?。???!!!!!!!!?。。。。?!!!!!MUSIc0:MOV3DH,R2MOV3EH,R3MOVTH1,#0FFHMOVTL1,#0FFH;表頭地址送DPTRMOV3CH,#00H;中斷計數(shù)器清0MOVB,#00H;表序號清0MUSIC1:NOPCLRAM
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- PB-22-7-Hydroxyquinoline-isomer-生命科學(xué)試劑-MCE-6693
- 9-Keto-tafluprost-生命科學(xué)試劑-MCE-9653
- 二零二五年度未簽勞動合同員工勞動仲裁應(yīng)對與勞動權(quán)益保障協(xié)議
- 2025年度文化創(chuàng)意產(chǎn)業(yè)計件工資與創(chuàng)意成果量化勞動合同
- 2025年度二零二五年度化妝品銷售提成獎勵合同
- 科技孵化器創(chuàng)新創(chuàng)業(yè)者的搖籃
- 跨學(xué)科視角下的小學(xué)生音樂素養(yǎng)培養(yǎng)研究
- 小學(xué)心理健康教育的實(shí)踐與思考
- 校園體育活動安全與防護(hù)措施
- 產(chǎn)品銷售合同補(bǔ)充協(xié)議
- 護(hù)理人文知識培訓(xùn)課件
- 建筑工程施工安全管理課件
- 2025年春新人教版數(shù)學(xué)七年級下冊教學(xué)課件 7.2.3 平行線的性質(zhì)(第1課時)
- 安徽省合肥市2025年高三第一次教學(xué)質(zhì)量檢測地理試題(含答案)
- 2025年新合同管理工作計劃
- 統(tǒng)編版八年級下冊語文第三單元名著導(dǎo)讀《經(jīng)典常談》閱讀指導(dǎo) 學(xué)案(含練習(xí)題及答案)
- 風(fēng)光儲儲能項(xiàng)目PCS艙、電池艙吊裝方案
- 《志愿軍-存亡之戰(zhàn)》觀后感小學(xué)生
- 統(tǒng)編小學(xué)《道德與法治》三年級上下冊教材的解讀
- 人教版(2024)英語七年級上冊單詞表
- 產(chǎn)業(yè)鏈競爭關(guān)聯(lián)度
評論
0/150
提交評論