版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于MATLAB的數(shù)字電子琴設(shè)計(jì)【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載
*****************基于MATLAB的數(shù)字電子琴設(shè)計(jì)【實(shí)用文檔】doc文檔可直接使用可編輯,歡迎下載實(shí)踐教學(xué)*******************題目:基于MATLAB的數(shù)字電子琴設(shè)計(jì)專業(yè)班級(jí):姓名:學(xué)號(hào):指導(dǎo)教師:成績(jī):摘要本次課設(shè)的任務(wù)是基于MATLAB設(shè)計(jì)一個(gè)數(shù)字電子琴,首先實(shí)現(xiàn)數(shù)字信號(hào)發(fā)生器的設(shè)計(jì)。數(shù)字信號(hào)發(fā)生器是一種基于軟硬件實(shí)現(xiàn)的波形發(fā)生器,可以實(shí)現(xiàn)各種基本波形的產(chǎn)生。在工程的各種復(fù)雜信號(hào)是由這些基本信號(hào)疊加產(chǎn)生,因此它在工程分析和實(shí)驗(yàn)教學(xué)中有著廣泛的應(yīng)用,可用MATLAB實(shí)現(xiàn)。MATLAB是一個(gè)數(shù)據(jù)分析和處理功能十分強(qiáng)大的工程實(shí)用軟件,它的數(shù)據(jù)采集工具箱為實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出提供了十分方便的函數(shù)和命令,在數(shù)字信號(hào)處理方面方便實(shí)用.本文首先詳細(xì)介紹了基于MATLAB的數(shù)字發(fā)生器的設(shè)計(jì)過(guò)程,實(shí)現(xiàn)了簡(jiǎn)單波形(正弦波、方波、三角波、鋸齒波、白噪聲、脈沖、階躍)信號(hào)的具體實(shí)現(xiàn)方法。其次介紹了利用該數(shù)字信號(hào)發(fā)生器產(chǎn)生的正弦波信號(hào)和聲卡設(shè)計(jì)的簡(jiǎn)易電子琴.關(guān)鍵詞:MATLAB;數(shù)字信號(hào)發(fā)生器;簡(jiǎn)易電子琴目錄TOC\o"1-2”\h\uHYPERLINK\l”_Toc393375326"前言1HYPERLINK\l”_Toc393375327"一、數(shù)字信號(hào)發(fā)生器2HYPERLINK\l”_Toc393375328"1.1圖形用戶界面的簡(jiǎn)介2HYPERLINK\l”_Toc393375329"1.2設(shè)計(jì)流程2_Toc393375332"2.1簡(jiǎn)易數(shù)字電子琴的簡(jiǎn)介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的縮寫(xiě),是一種用于算法開(kāi)發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)計(jì)算機(jī)語(yǔ)言和交互式環(huán)境.MATLAB可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)圖像和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語(yǔ)言的程序等,主要應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號(hào)處理與通訊、圖像處理、信號(hào)檢測(cè)、金融建模設(shè)計(jì)與分析等領(lǐng)域.Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口、光標(biāo)、按鍵、菜單、文字說(shuō)明等對(duì)象構(gòu)成的一個(gè)用戶界面,可在圖形用戶界面內(nèi)根據(jù)需要搭建圖形,并對(duì)控件的回調(diào)函數(shù)進(jìn)行編寫(xiě),完成最完整的GUI界面編輯即可運(yùn)行。本文主要利用MATLAB的圖形用戶界面設(shè)計(jì)數(shù)字信號(hào)發(fā)生器,在數(shù)字信號(hào)發(fā)生的基礎(chǔ)上實(shí)現(xiàn)簡(jiǎn)易電子琴的設(shè)計(jì)。信號(hào)發(fā)生器又稱信號(hào)源或振蕩器,是一種能提供各種頻率、波形和輸出電平電信號(hào)的儀器,數(shù)字信號(hào)發(fā)生器只是信號(hào)發(fā)生器的一種,在生產(chǎn)實(shí)踐和科技領(lǐng)域中有著廣泛的應(yīng)用.信號(hào)發(fā)生器按信號(hào)波形可分為正弦信號(hào)、函數(shù)(波形)信號(hào)、脈沖信號(hào)和隨機(jī)信號(hào)發(fā)生器等四大類。能夠產(chǎn)生多種波形,如正弦波、三角波、鋸齒波、矩形波(含方波)、階躍信號(hào)、脈沖信號(hào)的電路被稱為函數(shù)信號(hào)發(fā)生器。本文設(shè)計(jì)了一種基于MATLAB圖形用戶界面的可以產(chǎn)生正弦波、方波、三角波、鋸齒波、白噪聲、脈沖信號(hào)、階躍信號(hào)的虛擬數(shù)字信號(hào)發(fā)生器。一、數(shù)字信號(hào)發(fā)生器1.1圖形用戶界面的簡(jiǎn)介圖形用戶界面即GraphicalUserInterface,簡(jiǎn)稱GUI,又稱圖形用戶接口。Matlab環(huán)境下的圖形用戶界面(GUI)是由窗口、光標(biāo)、按鍵、菜單、文字說(shuō)明等對(duì)象構(gòu)成的一個(gè)用戶界面.用戶通過(guò)一定的方法(如鼠標(biāo)或鍵盤(pán))選擇、激活這些圖形對(duì)象,使計(jì)算機(jī)產(chǎn)生某種動(dòng)作或變化,比如實(shí)現(xiàn)計(jì)算、繪圖等.MATLAB的用戶,在指令窗中運(yùn)行demo打開(kāi)那圖形界面后,只要用鼠標(biāo)進(jìn)行選擇和點(diǎn)擊,就可產(chǎn)生豐富的內(nèi)容。對(duì)圖形用戶界面的操作一般有兩個(gè)部分,首先按照設(shè)計(jì)的原理、要求,根據(jù)需要選擇適當(dāng)?shù)膱D形對(duì)象搭建合理的GUI界面;然后對(duì)每個(gè)控件的回調(diào)函數(shù)在M文件內(nèi)進(jìn)行編寫(xiě),使搭建的GUI界面能夠運(yùn)行。數(shù)字信號(hào)發(fā)生器的設(shè)計(jì)所使用的工具即GUI界面,用到的圖形對(duì)象有pushbutton、Aexs、Slider、StaticText、EditText。模擬了七種信號(hào):正弦波、方波、三角波、階躍信號(hào)、斜波信號(hào)、鋸齒波以及白噪聲信號(hào)。具體的實(shí)現(xiàn)原理如下。1。2設(shè)計(jì)流程根據(jù)設(shè)計(jì)的要求分析出數(shù)字信號(hào)發(fā)生器的GUI界面構(gòu)圖,然后在MATLAB的workplace界面中輸入guide,打開(kāi)GUI界面.在GUI界面中搭建好具體的數(shù)字信號(hào)發(fā)生器的界面,并對(duì)每個(gè)控件的回調(diào)函數(shù)進(jìn)行編寫(xiě)、保存M文件。運(yùn)行,若結(jié)果正確,再同一個(gè)GUI界面中搭建好電子琴的GUI界面,利用數(shù)字信號(hào)發(fā)生器產(chǎn)生的正弦波,對(duì)電子琴每個(gè)控件的回調(diào)函數(shù)進(jìn)行編寫(xiě)、保存M文件。運(yùn)行,觀察仿真結(jié)果.若數(shù)字信號(hào)發(fā)生器的仿真結(jié)果不正確,檢查控件的回調(diào)函數(shù),修改并保存M文件,再次運(yùn)行觀察仿真結(jié)果。具體的設(shè)計(jì)流程圖如下:1.3波形實(shí)現(xiàn)的基本原理1.3.1正弦波的實(shí)現(xiàn)正弦信號(hào)的數(shù)學(xué)表達(dá)式如下:(1.1)其中:為幅值;為頻率;為相位。在MATLAB中,由于處理對(duì)象均是離散的數(shù)字信號(hào),將時(shí)間變量離散化并構(gòu)造成一個(gè)一維數(shù)組用其中:為采樣頻率。但的值不能太大,否則波形顯示會(huì)很慢。相應(yīng)的正弦波信號(hào)的數(shù)字信號(hào)表達(dá)式為(1。2)幅值、頻率、相位參數(shù)可以由用戶界面上的滑動(dòng)條或編輯框輸入。在分別得到與的離散值后,用plot作圖函數(shù)即可獲得相應(yīng)波形顯示。1。3。2方波信號(hào)的實(shí)現(xiàn)方波信號(hào)的數(shù)學(xué)表達(dá)式為(1.3)該式可直接生成一個(gè)周期為,峰值為,占空比為的方波信號(hào),的默認(rèn)值為50%。在MATLAB中可得到幅值、頻率、相位可調(diào)的方波信號(hào)函數(shù)(1.4)1。3.3三角波信號(hào)的實(shí)現(xiàn)在MATLAB中,可以用函數(shù)直接生成一個(gè)三角波信號(hào),該函數(shù)可生成一個(gè)周期為,峰值為,最大值出現(xiàn)在位置的三角波。利用該函數(shù),可得到幅值、頻率、相位可調(diào)的三角波信號(hào)函數(shù)(1。5)1。3.4鋸齒波信號(hào)的實(shí)現(xiàn)由于鋸齒波信號(hào)與三角波信號(hào)相似,所以將函數(shù)中的參數(shù)值設(shè)為1,可得到鋸齒波。該函數(shù)得到的幅值、頻率、相位可調(diào)的鋸齒波信號(hào)函數(shù)(1。6)1。3.5脈沖信號(hào)的實(shí)現(xiàn)由于脈沖信號(hào)與方波信號(hào)波形相似,用方波信號(hào)函數(shù)函數(shù)為基礎(chǔ),將其函數(shù)值加1,可得到最大值為2,最小值為0的脈沖波形,原函數(shù)的參數(shù)可用來(lái)調(diào)節(jié)脈沖的寬度。用該函數(shù),得到幅值、頻率、相位可調(diào)的脈沖信號(hào)函數(shù)。(1.7)1。3。6階躍信號(hào)的實(shí)現(xiàn)由于階躍信號(hào)比較特殊,可用函數(shù)直接表示,其函數(shù)表達(dá)式為(1.8)1。3.7白噪聲信號(hào)的實(shí)現(xiàn)白噪聲信號(hào)是指功率譜密度在整個(gè)頻域內(nèi)均勻分布的噪聲。白噪聲的實(shí)現(xiàn)可借助于MATLAB中的函數(shù),它的功能是產(chǎn)生一個(gè)均值為0,標(biāo)準(zhǔn)差為1的隨機(jī)數(shù)列或矩陣函數(shù),可得到一個(gè)均值為0,標(biāo)準(zhǔn)差為的維的隨機(jī)矩陣。二、電子琴的實(shí)現(xiàn)2。1簡(jiǎn)易數(shù)字電子琴的簡(jiǎn)介在設(shè)計(jì)界面中包含A、B、C、D、E、F、G共7個(gè)琴鍵,由于低音頻率區(qū)分不是很明顯,此次課設(shè)選擇的是中音頻率,其中每個(gè)按鍵對(duì)應(yīng)一個(gè)頻率的正弦波信號(hào),各按鍵對(duì)應(yīng)的信號(hào)頻率分別為392、440、494、523、587、659、698、784Hz。當(dāng)用鼠標(biāo)按下相應(yīng)的鍵時(shí)發(fā)聲,松開(kāi)時(shí)發(fā)聲停止,然后將數(shù)字信號(hào)寫(xiě)入聲卡的緩沖區(qū),由聲卡播放出相應(yīng)的聲音。當(dāng)用鼠標(biāo)按下對(duì)應(yīng)的鍵時(shí)即可發(fā)出相應(yīng)頻率的聲音。2.2實(shí)現(xiàn)原理電子琴的實(shí)現(xiàn)基于之前設(shè)計(jì)的數(shù)字信號(hào)發(fā)生器,選擇數(shù)字發(fā)生器產(chǎn)生的正弦波信號(hào)作為發(fā)聲及顯示波形,由回調(diào)函數(shù)和數(shù)字信號(hào)發(fā)生器結(jié)合起來(lái),實(shí)現(xiàn)對(duì)波形的調(diào)用。每個(gè)鍵對(duì)應(yīng)一定的頻率,在各個(gè)鍵的回調(diào)函數(shù)中設(shè)置好頻率及頻譜顯示,實(shí)現(xiàn)每個(gè)鍵有自己特定頻率的功能,為了使最終仿真結(jié)果更好,選擇音階中音調(diào)高的頻率作為調(diào)試頻率。當(dāng)鍵按下的時(shí)候,首先由相應(yīng)的鍵和數(shù)字信號(hào)關(guān)聯(lián)起來(lái),隨后將數(shù)字信號(hào)寫(xiě)入聲卡的緩沖區(qū),由聲卡發(fā)出相應(yīng)頻率的聲音,并顯示波形及對(duì)應(yīng)頻率的頻譜圖,當(dāng)鍵松開(kāi)時(shí)聲音即停止.此次電子琴的設(shè)計(jì)實(shí)現(xiàn)了正弦波顯示、頻譜顯示以及發(fā)聲的功能,從而實(shí)現(xiàn)虛擬電子琴的模仿功能。具體的實(shí)現(xiàn)流程圖如下:開(kāi)始開(kāi)始打開(kāi)MATLAB打開(kāi)MATLAB搭建電子琴的GUI界面搭建電子琴的GUI界面執(zhí)行并觀察仿真結(jié)果執(zhí)行并觀察仿真結(jié)果結(jié)束結(jié)束圖2.1電子琴的實(shí)現(xiàn)流程圖三、基于MATLAB的仿真及結(jié)果分析3.1GUI界面3.1.1搭建數(shù)字信號(hào)發(fā)生器的GUI界面搭建的GUI界面如下圖3。1:圖3.1數(shù)字信號(hào)發(fā)生器的GUI界面3。1.2電子琴的GUI界面.搭建的數(shù)字電子琴GUI界面如圖3。2所示:圖3。2數(shù)字電子琴的GUI界面G該界面主要由琴鍵組成,每個(gè)按鍵對(duì)應(yīng)一定的頻率,模擬電子琴的發(fā)聲功能,它的波形顯示及頻譜圖在數(shù)字信號(hào)發(fā)生器中。3.2編寫(xiě)M文件3。2。1數(shù)字信號(hào)發(fā)生器的M文件(1)正弦信號(hào)的實(shí)現(xiàn)由正弦信號(hào)的數(shù)學(xué)表達(dá)式可知在程序中用到的具體表達(dá)式為(3。1)將時(shí)間變量離散化并構(gòu)造成一個(gè)一維數(shù)組,要求采樣頻率不能太大,否則波形顯示會(huì)很慢(2)方波信號(hào)的實(shí)現(xiàn)用函數(shù)直接生成一個(gè)方波信號(hào),程序中使用的具體函數(shù)為(3。2)(3)三角波的實(shí)現(xiàn)函數(shù)直接生成一個(gè)三角波信號(hào),程序中用到的具體實(shí)現(xiàn)函數(shù)為(3.3)(4)鋸齒波信號(hào)的實(shí)現(xiàn)具體的函數(shù)實(shí)現(xiàn)形式為(3.4)(5)脈沖信號(hào)的實(shí)現(xiàn)抽樣頻率為8000,時(shí)間范圍為[0,1],坐標(biāo)抽為[0,a+1]。得到的幅值、頻率、相位可調(diào)的脈沖信號(hào)函數(shù)。具體的函數(shù)(3.5)(6)階躍信號(hào)的實(shí)現(xiàn)取1,A取1,t取[0,2],時(shí)間間隔為/100。階躍信號(hào)的函數(shù)表達(dá)式為(3.6)(7)白噪聲信號(hào)的實(shí)現(xiàn)白噪聲是指功率譜密度在整個(gè)頻域內(nèi)均勻分布的噪聲。白噪聲的實(shí)現(xiàn)可借于MATLAB中的函數(shù),產(chǎn)生一個(gè)均值為0,標(biāo)準(zhǔn)差為1的隨機(jī)數(shù)列或矩陣該函數(shù)可得到一個(gè)均值為0,標(biāo)準(zhǔn)差為的維的隨機(jī)矩陣.(3。7)3。3仿真結(jié)果數(shù)字信號(hào)發(fā)生器的仿真結(jié)果如下:正弦波的仿真結(jié)果圖3.3數(shù)字信號(hào)發(fā)生器的正弦波波形方波信號(hào)的仿真結(jié)果圖3.4方波信號(hào)的波形(3)三角波信號(hào)仿真結(jié)果圖3.5三角波信號(hào)的波形階躍信號(hào)仿真結(jié)果圖3。6階躍信號(hào)的仿真結(jié)果(5)斜波信號(hào)圖3.7斜波信號(hào)的仿真結(jié)果(6)鋸齒波信號(hào)的仿真結(jié)果圖3。8階躍信號(hào)的仿真結(jié)果(7)白噪聲仿真結(jié)果(1)按鍵A的仿真結(jié)果圖3。10按下A鍵,電子琴演奏時(shí)的效果(2)按鍵B的仿真結(jié)果圖3.11按下B鍵,電子琴演奏時(shí)的效果(3)按鍵C的仿真結(jié)果圖3.12按下C鍵,電子琴演奏時(shí)的效果總結(jié)本次的課程設(shè)計(jì)的任務(wù)是基于MATLAB設(shè)計(jì)一個(gè)數(shù)字電子琴,首先設(shè)計(jì)一個(gè)數(shù)字信號(hào)發(fā)生器。數(shù)字信號(hào)發(fā)生器和電子琴的搭建都是在GUI界面中進(jìn)行搭建的,在GUI界面中搭建好具體的數(shù)字信號(hào)發(fā)生器的界面,并對(duì)每個(gè)控件的回調(diào)函數(shù)進(jìn)行編寫(xiě)、保存M文件。運(yùn)行,若結(jié)果正確,再同一個(gè)GUI界面中搭建好電子琴的GUI界面,利用數(shù)字信號(hào)發(fā)生器產(chǎn)生的正弦波,對(duì)電子琴每個(gè)控件的回調(diào)函數(shù)進(jìn)行編寫(xiě)、保存M文件搭建完成之后對(duì)各個(gè)控件進(jìn)行回調(diào)函數(shù)的編寫(xiě).如果數(shù)字信號(hào)發(fā)生器的運(yùn)行結(jié)果正確,則繼續(xù)搭建電子琴否則修改直到正確為止。在本次的課程設(shè)計(jì)中,確實(shí)遇到了很多問(wèn)題,但通過(guò)大家的幫助和自己的努力,最終實(shí)現(xiàn)所有的設(shè)計(jì)要求。本次課程設(shè)計(jì)也許還存在著一些不足,在以后學(xué)習(xí)生活中會(huì)更加努力,爭(zhēng)取做得更好.參考文獻(xiàn)[1]丁玉美.數(shù)字信號(hào)處理[M]。西安電子科技大學(xué)出版社,2003,3。[2]朱冰蓮。數(shù)字信號(hào)處理[M]。電子工業(yè)出版社,2003,7。[3]程佩青。數(shù)字信號(hào)處理教程(第二版)[M]。北京:清華大學(xué)出版社,2001.[4]韓紀(jì)慶,張磊,鄭鐵然。語(yǔ)音信號(hào)處理[M]。北京:清華大學(xué)出版社,2004.[5]王濟(jì),胡曉.MATLAB在振動(dòng)信號(hào)處理中的應(yīng)用[M].北京:中國(guó)水利水電出版社:知識(shí)產(chǎn)權(quán)出版社,2006.[6]周祥才,楊錚.基于MATLAB的信號(hào)采樣與重構(gòu)的實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2007,24[7]張志涌等.精通MATLAB[M].北京:北京航空航天大學(xué)出版社,2003.[8]車子萍?;贛atlab的虛擬信號(hào)發(fā)生器設(shè)計(jì)[J]。電腦學(xué)習(xí),2010。1.[9]李益華。MATLAB輔助現(xiàn)代工程數(shù)字信號(hào)處理(第2版)。西安:西安電子科技大學(xué)出版社,2010[10]楊潔芳.基于MATLAB與聲卡的低頻信號(hào)發(fā)生器的設(shè)計(jì)與實(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(’時(shí)域波形')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('時(shí)域波形')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('時(shí)域波形’)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(’時(shí)域波形')xlabel('t’)ylabel('y’)axis([0,。01,—2,2])axes(handles。axes2);faxes(handles。axes1);plot(t,y);title('時(shí)域波形')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('時(shí)域波形');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(’時(shí)域波形’);plot(t,y);title(’時(shí)域波形');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è),我遇到了很多問(wèn)題,首先感謝我的課程設(shè)計(jì)指導(dǎo)教師老師在這段時(shí)間一直給我的支持與鼓勵(lì)。認(rèn)真負(fù)責(zé)的監(jiān)督我們課程設(shè)計(jì)的進(jìn)度,耐心的指導(dǎo)我們使我們能夠按時(shí)的完成任務(wù)。同時(shí)還要感謝在設(shè)計(jì)過(guò)程中同學(xué)們尤其是同組成員給給了我很大的幫助,對(duì)我課設(shè)過(guò)程中不明白的問(wèn)題給予了即使的、耐心的幫助,讓我對(duì)此次課設(shè)涉及的知識(shí)有了更加深刻的把握。他們提出了許多寶貴的建議使我們的設(shè)計(jì)能得到更好的完善,也加快設(shè)計(jì)的進(jìn)程.還有感謝學(xué)校為我們提供的良好實(shí)驗(yàn)環(huán)境以及充足的實(shí)驗(yàn)設(shè)備,為我們的設(shè)計(jì)和調(diào)試提供了很大的方便.在這段時(shí)間學(xué)到了很多,雖然由于自身的不足沒(méi)有能夠?yàn)橄到y(tǒng)提出更好的解決方案.但這對(duì)我來(lái)說(shuō)絕對(duì)是一個(gè)非常寶貴的歷練.從中我切身體會(huì)到了理論和現(xiàn)實(shí)的差距,只有真正動(dòng)手去做才能發(fā)現(xiàn)問(wèn)題.同時(shí),小組成員相互商討解決方案,發(fā)現(xiàn)設(shè)計(jì)中的不足之處,使錯(cuò)誤得到了即使改正,在此衷心地感謝老師以及這幾周的殷切指導(dǎo)以及同學(xué)們提出諸多寶貴意見(jiàn)真誠(chéng)地道一聲,謝謝!單片機(jī)課程設(shè)計(jì)報(bào)告書(shū)小組成員:呂夢(mèng)莎吳玉鳳學(xué)號(hào):1121307211213078班級(jí):自動(dòng)化1106指導(dǎo)教師:于振宇基于AT89C51的屏幕聲光式可錄音電子琴北京交通大學(xué)電子信息工程學(xué)院呂夢(mèng)莎吳玉鳳摘要:本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,通過(guò)脈沖觸發(fā)產(chǎn)生出電子音調(diào),與按鍵、揚(yáng)聲器、LCD顯示屏等模塊組成控制模塊,設(shè)計(jì)一個(gè)電子琴。該系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比較高等,具有一定的實(shí)用與參考價(jià)值。關(guān)鍵詞:AT89C51、脈沖觸發(fā)、屏幕聲光式、錄音、播放、演奏、電子琴。第一章引言1.1設(shè)計(jì)背景單片微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬第四代電子計(jì)算機(jī),它具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開(kāi)發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。
電子琴是現(xiàn)代電子科技與音樂(lè)結(jié)合的產(chǎn)物,是一種新型的鍵盤(pán)樂(lè)器。它在現(xiàn)代音樂(lè)扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。
本文對(duì)利用單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴進(jìn)行了分析,分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來(lái)詳細(xì)闡述。本系統(tǒng)是簡(jiǎn)易電子琴的設(shè)計(jì),按下四角自鎖開(kāi)關(guān)會(huì)使LCD顯示屏顯示當(dāng)前音符名稱、播放的歌曲名稱或播放的錄音名稱,同時(shí)揚(yáng)聲器播放對(duì)應(yīng)的音符,LED閃爍相應(yīng)的節(jié)奏。通過(guò)設(shè)計(jì)本系統(tǒng)可熟悉掌握單片機(jī)的基本功能。1。2
設(shè)計(jì)任務(wù)
1、設(shè)計(jì)以單片機(jī)為核心的簡(jiǎn)易電子琴系統(tǒng),可隨意彈奏想要表達(dá)的音樂(lè);
2、針對(duì)要求控制的對(duì)象完成程序的編制;3、硬件軟件聯(lián)調(diào),完成題目所要求的功能;
1.3設(shè)計(jì)思路1、發(fā)聲部分設(shè)計(jì)思路音樂(lè)是由不同頻率的聲音組成的。利用程序來(lái)控制單處機(jī)某個(gè)口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波。利用延時(shí)程序控制“高”“低"電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào).于是產(chǎn)生do,re,mi,fa,so,la,xi七個(gè)音符的變換。2、顯示部分設(shè)計(jì)思路考慮到信息的多媒體傳播已經(jīng)成為信息化時(shí)代的主流,我們給電子琴設(shè)計(jì)了LCD顯示器和節(jié)拍指示LED燈,帶來(lái)視聽(tīng)雙重沖擊。LCD具有功耗低,顯示質(zhì)量高,數(shù)字式接口更加穩(wěn)定可靠的優(yōu)點(diǎn).演示過(guò)程中可顯示歡迎語(yǔ),當(dāng)前功能,按下的音符名稱,當(dāng)前播放的歌曲名稱等。第二章方案論證采用AT89C51單片機(jī)作為主控芯片,設(shè)置獨(dú)立按鍵、揚(yáng)聲器、LCD顯示屏等外圍器件,另外還用到一些簡(jiǎn)單器件如NPN型三極管及電阻等。利用按鍵實(shí)現(xiàn)音符和音調(diào)的輸入;LCD顯示屏進(jìn)行被操作的按鍵顯示;用PNP型三極管2N2907實(shí)現(xiàn)低音頻功率放大;最后用揚(yáng)聲器發(fā)音。
主控芯片采用AT89C51單片機(jī),它是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。避免了由于元器件種類、個(gè)數(shù)繁多,而過(guò)于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過(guò)大等不利因素.同時(shí)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,由于本設(shè)計(jì)主要用于娛樂(lè)方面,因此在設(shè)計(jì)上盡量使其安全以及簡(jiǎn)單易操作。具有經(jīng)濟(jì)可行性、技術(shù)可行性、實(shí)物應(yīng)用性。第三章硬件系統(tǒng)設(shè)計(jì)3.1時(shí)鐘電路MCS-51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端輸出端。本圖采用內(nèi)部時(shí)鐘電路,如圖3-1所示,通常在引腳XTALl和XTAL2上跨接石英晶體X1和兩個(gè)補(bǔ)償電容C1、C2構(gòu)成自激振蕩器.可以根據(jù)情況選擇2~12MHz頻率之間的石英晶體,補(bǔ)償電容通常選擇30pF左右的瓷片電容。圖3-1時(shí)鐘電路3。2復(fù)位電路單片機(jī)小系統(tǒng)常采用上電自動(dòng)復(fù)位和手動(dòng)按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)的復(fù)位操作。本實(shí)驗(yàn)采用上電自動(dòng)復(fù)位方式,其結(jié)構(gòu)圖如圖3—2所示。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號(hào)。對(duì)于MCS—51單片機(jī),只要在RST復(fù)位端接一個(gè)電容至VCC和一個(gè)電阻至VSS即可.在加電瞬間,RST端出現(xiàn)一定時(shí)間的高電平,只要高電平保持時(shí)間足夠長(zhǎng),就可以使MCS—51復(fù)位。圖3—2復(fù)位電路3。3原理框圖本系統(tǒng)有主控芯片AT89C52、揚(yáng)聲器、顯示模塊、按鍵模塊和晶振復(fù)位電路組成。圖3-3原理框圖3。4顯示部分設(shè)計(jì)為了讓電子琴能夠顯示出音調(diào),我們另外附加了一個(gè)LCD1602提供屏幕式音調(diào)顯示,LCD1602屬于字符型液晶,可以顯示字母和數(shù)字等字符。LCD1602是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。圖3-4顯示電路3。5按鍵部分設(shè)計(jì)3.5.1鍵盤(pán)設(shè)計(jì)鍵盤(pán)可以分為2類:獨(dú)立連接式鍵盤(pán)和矩陣式鍵盤(pán).本設(shè)計(jì)采用獨(dú)立式鍵盤(pán)。獨(dú)立式按鍵是直接用I/O口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會(huì)影響其它I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單。獨(dú)立式按鍵軟件常采用查詢式結(jié)構(gòu)。先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對(duì)應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序.由于本程序較為簡(jiǎn)單,為了使用方便及節(jié)省資源,選擇獨(dú)立式鍵盤(pán)。下圖為獨(dú)立式鍵盤(pán)電路圖:圖3-5獨(dú)立式鍵盤(pán)電路圖3。5.2去抖動(dòng)鍵盤(pán)編程中主要考慮去抖動(dòng)的問(wèn)題。當(dāng)測(cè)試表明有鍵被按下之后,緊接著就進(jìn)行去抖動(dòng)處理.因?yàn)榘存I是機(jī)械開(kāi)關(guān)結(jié)構(gòu),由于機(jī)械觸點(diǎn)的彈性及電壓突跳等原因,在觸點(diǎn)閉合或斷開(kāi)的瞬間會(huì)出現(xiàn)電壓抖動(dòng)。為保證鍵識(shí)別的準(zhǔn)確,在電壓信號(hào)抖動(dòng)的情況下不能進(jìn)行行狀態(tài)輸入。為此需進(jìn)行去抖動(dòng)處理。去抖動(dòng)有硬件和軟件兩種方法。硬件方法就是加去抖動(dòng)CPU便確認(rèn)此按鍵己按下,消除了抖動(dòng)。本實(shí)驗(yàn)采用軟件消抖法,在按鍵按下后,執(zhí)行一段延時(shí)程序。3.6發(fā)音部分設(shè)計(jì)如下圖所示,發(fā)音電路是由揚(yáng)聲器、三極管、變位器構(gòu)成.由三極管來(lái)驅(qū)動(dòng)揚(yáng)聲器發(fā)音的,同時(shí)加上變位器實(shí)現(xiàn)電阻的可調(diào)來(lái)增強(qiáng)驅(qū)動(dòng)電流,提高驅(qū)動(dòng)能力,從而調(diào)節(jié)揚(yáng)聲器的音效。
圖3-6揚(yáng)聲器電路圖第四章軟件系統(tǒng)設(shè)計(jì)4。1
系統(tǒng)分析
4。1.1系統(tǒng)軟件的組成
(1)鍵盤(pán)掃描程序:檢測(cè)是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無(wú)按鍵按下,則返回鍵盤(pán)掃描程序繼續(xù)檢測(cè)。
(2)功能轉(zhuǎn)移程序:對(duì)檢測(cè)到的按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們?cè)O(shè)計(jì)的功能程序有三種,即音色調(diào)節(jié)功能、自動(dòng)播放樂(lè)曲和錄音的功能.
(3)琴鍵處理程序:根據(jù)檢測(cè)到的按鍵值,查詢音調(diào)表,給計(jì)時(shí)器賦值,使發(fā)出相應(yīng)頻率的聲音。
(4)自動(dòng)播放歌曲程序:檢測(cè)到按鍵按下的是自動(dòng)播放歌曲功能鍵后執(zhí)行該程序,電子琴會(huì)自動(dòng)播放事先已經(jīng)存放的歌曲或錄音歌曲,歌曲播放完畢之后自動(dòng)返回至鍵盤(pán)掃描程序,繼續(xù)等待是否有按鍵按下。(5)錄音程序:檢測(cè)到按鍵按下的是錄音功能鍵后執(zhí)行該程序,跳轉(zhuǎn)到鍵盤(pán)掃描程序,檢測(cè)是否有鍵按下,有按鍵按下則記錄按下鍵值,根據(jù)檢測(cè)到的按鍵值,查詢音調(diào)表,給計(jì)時(shí)器賦值,使發(fā)出相應(yīng)頻率的聲音并跳轉(zhuǎn)到功能轉(zhuǎn)移程序。4.1.2
系統(tǒng)總體功能流程圖開(kāi)始開(kāi)始初始化T0初始化T0鍵盤(pán)掃描鍵盤(pán)掃描程序演奏功能鍵按下自動(dòng)播放鍵按下錄音功能鍵按下NN演奏功能鍵按下自動(dòng)播放鍵按下錄音功能鍵按下YYY記錄音符記錄音符播放內(nèi)部存儲(chǔ)的音樂(lè)查表得到按鍵音符頻率播放內(nèi)部存儲(chǔ)的音樂(lè)查表得到按鍵音符頻率查表得到按鍵音符頻率查表得到按鍵音符頻率播放音符播放音符播放音符播放音符4。2
參數(shù)計(jì)算
4.2.1發(fā)音原理
若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P1.0反相,然后重復(fù)計(jì)時(shí)再反相。就可在P1。0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階.音調(diào)的確定音調(diào)是唱曲時(shí)樂(lè)音的發(fā)音,一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡(jiǎn)譜的1、2、3、4、5、6、7,相當(dāng)于漢字“多來(lái)米發(fā)梭拉西"的讀音。例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs/1μs=956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr,式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率.其計(jì)數(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。由音符的頻率值可以計(jì)算得出各個(gè)音調(diào)的計(jì)數(shù)值,如表4-1所示:(﹟叫升記號(hào),表示把音在原來(lái)的基礎(chǔ)上升高半音,b叫降記音,表示在原來(lái)的基礎(chǔ)上降低半音。)表4—1音調(diào)頻率與計(jì)數(shù)初值對(duì)照音符頻率(Hz)計(jì)數(shù)值(T值)音符頻率(Hz)計(jì)數(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)行查表時(shí),可以為這個(gè)音符建立一個(gè)表格,有助于單片機(jī)通過(guò)查表的方式來(lái)獲得相應(yīng)的數(shù)據(jù).4.2.3節(jié)拍的確定若要構(gòu)成音樂(lè),光有音調(diào)是不夠的,還需要節(jié)拍,讓音樂(lè)具有旋律(固定的律動(dòng)),而且可以調(diào)節(jié)各個(gè)音的快滿度?!肮?jié)拍”,即Beat,簡(jiǎn)單說(shuō)就是打拍子,就像我們聽(tīng)音樂(lè)不自主的隨之拍手或跺腳。若1拍實(shí)0。5s,則1/4拍為0。125s,只要設(shè)定延遲時(shí)間就可以求得節(jié)拍的時(shí)間,假設(shè)1拍為4DELAY,則1/4應(yīng)為1DELAY,以此類推,得到如表4-2所示的節(jié)拍與延遲時(shí)間對(duì)照表。休止符表示暫停發(fā)音。表4—21/4和1/8節(jié)拍的時(shí)間設(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è)計(jì)4.3.1播放子程序(包括自動(dòng)播放存儲(chǔ)音樂(lè)和按鍵發(fā)音)
本設(shè)計(jì)共兩種播放模式,包括自動(dòng)播放存儲(chǔ)音樂(lè)和按鍵發(fā)音。上電后,首先開(kāi)中斷并設(shè)定定時(shí)器0為工作方式1,當(dāng)自動(dòng)播放鍵按下時(shí),進(jìn)入中斷,根據(jù)樂(lè)譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時(shí)器賦初值,即開(kāi)始播放音樂(lè)。當(dāng)DO、RE、MI、FA、SO、LA、SI七種音符鍵按下時(shí),根據(jù)音符值在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時(shí)器賦初值,即按鍵發(fā)音.開(kāi)始開(kāi)始開(kāi)中斷并設(shè)定工作寄存器開(kāi)中斷并設(shè)定工作寄存器有鍵按下有鍵按下自動(dòng)播放鍵按下自動(dòng)播放鍵按下進(jìn)入中斷N進(jìn)入中斷YY根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷根據(jù)yinfu和工作方式取值,并在數(shù)組中查找相應(yīng)音律進(jìn)入中斷給定時(shí)器T0賦值根據(jù)樂(lè)譜在數(shù)組中查找相應(yīng)音律給定時(shí)器T0賦值根據(jù)樂(lè)譜在數(shù)組中查找相應(yīng)音律播放鍵值對(duì)應(yīng)的音符播放鍵值對(duì)應(yīng)的音符給定時(shí)器T0賦值給定時(shí)器T0賦值播放音樂(lè)播放音樂(lè)
第五章
實(shí)驗(yàn)結(jié)果5.1硬件調(diào)試
硬件調(diào)試主要是針對(duì)單片機(jī)部分進(jìn)行的調(diào)試.
在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個(gè)調(diào)試工作的第一步,也是非常重要的一個(gè)步驟。在這部分調(diào)試中主要使用的工具是萬(wàn)用表,用來(lái)完成檢測(cè)電路中是否存在斷路或者短路情況的任務(wù)。注意焊點(diǎn)之間,確保焊點(diǎn)沒(méi)有短接在一起,同時(shí)注意焊點(diǎn)的美觀,確保沒(méi)有開(kāi)路以及短路的現(xiàn)象出現(xiàn)。在確保硬件電路正常且無(wú)異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗(yàn)電路是否接錯(cuò),同時(shí)還要檢驗(yàn)原理是否正確,在本次設(shè)計(jì)中,上電調(diào)試主要是檢測(cè)單片機(jī)控制部分、數(shù)碼管點(diǎn)亮部分、和音頻轉(zhuǎn)換電路硬件調(diào)試.
1、數(shù)碼管LED電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到數(shù)碼管顯示數(shù)字。
2、鍵盤(pán)單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動(dòng)鍵盤(pán)可以發(fā)現(xiàn)各個(gè)按鍵對(duì)應(yīng)的音正確.
5.2
軟件調(diào)試
調(diào)試主要方法和技巧:通常一個(gè)調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點(diǎn)、查看變量、更改數(shù)值。整個(gè)程序是一個(gè)主程序調(diào)用各個(gè)子程序?qū)崿F(xiàn)功能的過(guò)程,要使主程序和整個(gè)程序都能平穩(wěn)運(yùn)行,各個(gè)模塊的子程序的正確與平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個(gè)子程序模塊進(jìn)行分別調(diào)試.5.3仿真結(jié)果第六章總結(jié)本次51單片機(jī)課程設(shè)計(jì)我們組做的是《基于AT89C51單片機(jī)的屏幕式聲光電子琴的設(shè)計(jì)》,通過(guò)這次的DIY制作的學(xué)習(xí),我學(xué)到了不少知識(shí),真正體會(huì)到了學(xué)以致用的快感,通過(guò)自己動(dòng)手制作小作品不僅加深了我們對(duì)51單片機(jī)的理解,而且也增強(qiáng)了我們對(duì)音樂(lè)的興趣,也因此喜歡上了各種基于51單片機(jī)的小制作,從而更好地將課本知識(shí)與實(shí)踐過(guò)程相結(jié)合。在這次課程設(shè)計(jì)中,主要涉及了軟件和硬件兩個(gè)方面的內(nèi)容。在軟件方面,我們掌握了仿真軟件proteus的仿真方法,實(shí)現(xiàn)了7音符的發(fā)聲、錄音以及音樂(lè)的自動(dòng)播放功能,同時(shí)也提高了我們用匯編語(yǔ)言編程的能力;在硬件方面,我們對(duì)電子產(chǎn)品的開(kāi)發(fā)流程和功能應(yīng)用有了一定的了解,進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的基本方法和步驟。并且提高了我們運(yùn)用所學(xué)的專業(yè)基礎(chǔ)知識(shí)來(lái)解決實(shí)際問(wèn)題的能力,加深了對(duì)所學(xué)理論知識(shí)的理解和運(yùn)用,動(dòng)手能力也得到了相應(yīng)的提高,創(chuàng)新意識(shí)得到了鍛煉。在本次的實(shí)驗(yàn)設(shè)計(jì)中,我們?cè)诮梃b前人的基礎(chǔ)上也對(duì)自己的作品進(jìn)行了一部分創(chuàng)新,①在設(shè)置錄音功能方面,根據(jù)隨機(jī)彈奏的音調(diào),將其偏移地址存入36H單元中,然后通過(guò)查詢音調(diào)表,使其發(fā)出相應(yīng)頻率的聲音,從而彈奏出事先錄好的一段音樂(lè).②在控制節(jié)奏方面,我們?cè)O(shè)置了休止符,來(lái)控制節(jié)奏的停頓,這樣就能產(chǎn)生有停頓感的音樂(lè),而不是連續(xù)的,使音樂(lè)聽(tīng)起來(lái)更加悅耳。而這些創(chuàng)新均基于匯編語(yǔ)言的學(xué)習(xí).總體來(lái)說(shuō),此次單片機(jī)課程設(shè)計(jì)使我們收獲良多,雖然課程設(shè)計(jì)的過(guò)程中遇到了很多困難與問(wèn)題,但我們最終還是完成了設(shè)計(jì)的任務(wù)及要求.也讓我認(rèn)識(shí)到,無(wú)論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒(méi)有什么辦不到的.最后,衷心感謝老師給我們提供了這樣一次難得的機(jī)會(huì)來(lái)展示自己的作品,激發(fā)了我們對(duì)單片機(jī)DIY小制作的興趣,也感謝老師在這個(gè)學(xué)期孜孜不倦的教悔,讓我們?cè)趯W(xué)習(xí)單片機(jī)的基礎(chǔ)知識(shí)的同時(shí),真正體會(huì)到學(xué)以致用帶來(lái)的快感。由此我覺(jué)得,我們的學(xué)習(xí)不僅要在教師引導(dǎo)和幫助下順利入門(mén),還要掌握自動(dòng)控制原理課程的精髓和要點(diǎn),并且能夠“由厚及薄",達(dá)到對(duì)課程整體的把握,具有一定的工程概念和實(shí)踐能力。附錄一:源程序RSEQUP3.5RWEQUP3.6EEQUP3。7ORG00HSJMPMAINORG00BHMOVTH0,33HMOVTL0,34HCPLP3.4RETI;!!!!!!!!!!!!!!!!??!!!!!!!!!!!!?。?!!!!ORG001BHINC3CH;中斷服務(wù),中斷計(jì)數(shù)器加1MOVTH1,#0D8HMOVTL1,#0EFH;12M晶振,形成10毫秒中斷RETI;!!!!!?。。。?!!!?。。。。?!?。。?!!!!!!!?。。?!!!!?。?!!!!!!!??!!!!??!!!!ORG30HMAIN:SETBP3.4;關(guān)閉揚(yáng)聲器LCALLCSH1602;初始化1602MOVTMOD,#11H;設(shè)置定時(shí)器0為工作模式1SETBEA;開(kāi)總中斷SETBET0;開(kāi)定時(shí)器0中斷HUANYING:MOVP1,#80H;歡迎語(yǔ)顯示地址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;寫(xiě)入1602的顯示地址指針MOV35H,#2;控制節(jié)拍KEY_1:MOVP2,#0FFH;置P2為輸入JBP2.0,KEY_2;K1鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對(duì)地址LCALLBOFANG_YFKEY_2:JBP2。1,KEY_3;K2鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.1,$MOV36H,#2LCALLBOFANG_YFKEY_3:JBP2。2,KEY_4;K3鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。2,$MOV36H,#4LCALLBOFANG_YFKEY_4:JBP2。3,KEY_5;K4鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。3,$MOV36H,#6LCALLBOFANG_YFKEY_5:JBP2.4,KEY_6;K5鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。4,$MOV36H,#8LCALLBOFANG_YFKEY_6:JBP2.5,KEY_7;K6鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFKEY_7:JBP2。6,KEY_9;K7鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFKEY_9:JBP3.2,KEY_1;K9鍵沒(méi)按下,重新掃描LCALLDELAY_10MS;延時(shí)消抖JNBP3。2,$LCALLDELAY_10MS;—-—---—----播放音樂(lè)程序段-—-——--———-MOVP1,#01H;清屏ACALLENABLEMOVP1,#80HLCALLENABLEMOVDPTR,#TAB_PLAYMOV30H,#00LP8:MOVA,30HMOVCA,@A+DPTRJZPLAYLCALLWRITE_1602INC30HSJMPLP8PLAY:MOVP2,#0FFH;置P2為輸入JBP2。0,PLAY_2;K1鍵沒(méi)按下,轉(zhuǎn)移MOVDPTR,#TAB_GEQU1;存曲目標(biāo)志LCALLBOFANG_GEQUPLAY_2:JBP2.1,PLAY_3;K2鍵沒(méi)按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab2movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT2LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_3:JBP2.2,PLAY_4;K3鍵沒(méi)按下,轉(zhuǎn)移SETBET1MOV3BH,TMODMOVTMOD,#11Hmovdptr,#tab1movp1,#0c0hlcallenablelcallwrite1MOVDPTR,#DAT1LCALLMUSIc0CLRTR1CLRET1MOVTMOD,3BHPLAY_4:JBP2。3,PLAY_9MOVR1,#50HLCALLBOFANG_LUYINPLAY_9:JBP3.2,PLAY;K8鍵沒(méi)按下,重新掃描LCALLDELAY_10MS;延時(shí)消抖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;寫(xiě)入1602的顯示地址指針;—----—-——寫(xiě)入錄音的名字----——---MOV30H,#00C5:MOVA,30HLCALLTAB_RECORDINGMOV@R1,A INCR1?INC30H?CJNEA,#0FEH,C5RECORD_1:MOVP2,#0FFH;置P2為輸入JBP2.0,RECORD_2;K1鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.0,$MOV36H,#0;裝入1的音符碼相對(duì)地址LCALLBOFANG_YFLCALLCUNCU;調(diào)存音符子程序RECORD_2:JBP2.1,RECORD_3;K2鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。1,$MOV36H,#2LCALLBOFANG_YFLCALLCUNCURECORD_3:JBP2.2,RECORD_4;K3鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.2,$MOV36H,#4LCALLBOFANG_YFLCALLCUNCURECORD_4:JBP2。3,RECORD_5;K4鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.3,$MOV36H,#6LCALLBOFANG_YFLCALLCUNCURECORD_5:JBP2.4,RECORD_6;K5鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。4,$MOV36H,#8LCALLBOFANG_YFLCALLCUNCURECORD_6:JBP2.5,RECORD_7;K6鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.5,$MOV36H,#10LCALLBOFANG_YFLCALLCUNCURECORD_7:JBP2。6,RECORD_8;K7鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2.6,$MOV36H,#12LCALLBOFANG_YFLCALLCUNCURECORD_8:JBP2.7,RECORD_9;K8鍵沒(méi)按下,轉(zhuǎn)移LCALLDELAY_10MS;延時(shí)消抖JNBP2。7,$MOV36H,#42;休止符標(biāo)志存36HLCALLDELAY_100MSLCALLCUNCURECORD_9:JNBP3.2,J0;K8鍵沒(méi)按下,重新掃描?LJMPRECORD_1J0:LCALLDELAY_10MS;延時(shí)消抖JNBP3.2,$LCALLDELAY_10MS?MOV@R1,#255;寫(xiě)入歌曲結(jié)束標(biāo)志?LJMPKEY;回演奏模式;***********子程序區(qū)***************;=======初始化1602顯示器========CSH1602:MOVP3,#0FFHMOVP1,#01HACALLENABLEMOVP1,#38HACALLENABLEMOVP1,#0CHACALLENABLEMOVP1,#06HACALLENABLERET;====1602發(fā)命令子程序====ENABLE:CLRRSCLRRWCLREACALLDELAY_2MSSETBERET;=====讀1602IR中命令子程序======ENABLE_1:CLRRSSETBRWCLREACALLDELAY_2MSSETBERET;====寫(xiě)數(shù)據(jù)子程序(1602)====WRITE_1602:MOVP1,ASETBRSCLRRWCLREMOVR5,#50;延時(shí)100us(12M晶振)DJNZR5,$SETBERET;===========播放一個(gè)音符并顯示音符和頻譜=========BOFANG_YF:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動(dòng)定時(shí)器0MOVA,36H;取音符的顯示碼LCALLTAB_YF1LCALLWR(shí)ITE_1602DEC38HMOVA,36HINCALCALLTAB_YF1LCALLWRITE_1602DJNZ38H,D2;1602一行沒(méi)寫(xiě)滿,轉(zhuǎn)移MOV30H,#16;1602滿行清行并從頭開(kāi)始寫(xiě)MOVP1,#0C0HLCALLENABLEMOVA,?!?LP10:LCALLWRITE_(tái)1602DJNZ30H,LP10MOV38H,#16MOVP1,#0C0HLCALLENABLE;——-—--—-—-顯示頻譜分析條程序段—-—---—-—-D2:MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護(hù)音符碼對(duì)應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,?!怠疍5:LCALLWRITE_(tái)1602DJNZ39H,D5;————控制節(jié)拍時(shí)長(zhǎng)程序段--—-—---—MOV37H,35H;保護(hù)循環(huán)次數(shù)控制(節(jié)拍)LP1:ACALLDELAY_100MSDJNZ35H,LP1;延時(shí)次數(shù)控制MOV35H,37H;--———---—發(fā)音結(jié)束,清除頻譜分析條---—-—--———-MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#'’MOV39H,3AHD6:LCALLWR(shí)ITE_1602DJNZ39H,D6MOVA,#10H;釋放音符碼顯示地址CLRCSUBBA,38HADDA,#0C0HMOVP1,ALCALLENABLECLRTR0;關(guān)定時(shí)器0RET;===========播放一個(gè)音符并顯示頻譜=========BOFANG_YF_1:MOVA,36HLCALLTAB_YFMOV33H,AMOVA,36HINCALCALLTAB_YFMOV34H,AMOVTH0,33HMOVTL0,34HSETBTR0;啟動(dòng)定時(shí)器0;—-——-—---—顯示頻譜分析條程序段——-—--—MOVA,36H;音符碼轉(zhuǎn)換為相應(yīng)鍵值MOVB,#2DIVABADDA,#1MOV39H,AMOV3AH,39H;保護(hù)音符碼對(duì)應(yīng)的鍵值MOVP1,#85H;設(shè)定頻譜分析條顯示初地址LCALLENABLEMOVA,#'>'D7:LCALLWRITE_1602DJNZ39H,D7;——------控制節(jié)拍時(shí)長(zhǎng)程序段——--—--——MOV37H,35H;保護(hù)循環(huán)次數(shù)控制(節(jié)拍)LP11:ACALLDELAY_100MSDJNZ35H,LP11;延時(shí)次數(shù)控制MOV35H,37H;--—--——--發(fā)音結(jié)束,清除頻譜分析條--——----—-—-MOVP1,#85H;頻譜分析條顯示的初地址LCALLENABLEMOVA,#''MOV39H,3AHD8:LCALLWR(shí)ITE_1602DJNZ39H,D8CLRTR0;關(guān)定時(shí)器0RET;============播放一首歌并顯示歌名=============;—---—-(一個(gè)音符2字節(jié)存儲(chǔ),音符碼存低字節(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_(tái)1602? SJMPLP2C1:? MOVP1,#0C0H;歌詞顯示地址? LCALLENABLELP3: ?MOVA,30HMOVCA,@A+DPTR;取音符碼??CJNEA,#0FFH,C6? SJMPS0C6:??CJNEA,#42,C0;音符碼為休止符不開(kāi)定時(shí)器,直接調(diào)用延時(shí)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;============播放一錄音并顯示歌名和歌詞=============;-———--(一個(gè)音符2字節(jié)存儲(chǔ),音符碼存低字節(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;音符碼為休止符不開(kāi)定時(shí)器,直接調(diào)用延時(shí)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é)不存儲(chǔ)CUNCU_1:MOV@R1,36HINCR1MOV@R1,35HINCR1S1:RET;=========延時(shí)100ms(12M晶振)========DELAY_100MS:MOV31H,R6MOV32H,R7MOVR7,#200D1:MOVR6,#250DJNZR6,$DJNZR7,D1MOVR7,32HMOVR6,31HRET;====延時(shí)10MS(12MHz晶振)====DELAY_10MS:MOV31H,R6MOV32H,R7MOVR6,#20D0:MOVR7,#248DJNZR7,$DJNZR6,D0MOVR7,32HMOVR6,31HRET;======延時(shí)2MS(12M晶振)========DELAY_2MS:MOV31H,R6MOV32H,R7MOVR7,#4D3:MOVR6,#255D4:DJNZR6,D4DJNZR7,D3MOVR7,32HMOVR6,31HRET;!!!!!!!!!!!!!!!!!!??!!!!!!!!!!?。。。。?!!!!!!!MUSIc0:MOV3DH,R2MOV3EH,R3MOVTH1,#0FFHMOVTL1,#0FFH;表頭地址送DPTRMOV3CH,#00H;中斷計(jì)數(shù)器清0MOVB,#00H;表序號(hào)清0MUSIC1:NOPCLRAM
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公積金個(gè)人貸款合同模板
- 銀行授信保證合同模板
- 苗木供應(yīng)商招募公告
- 標(biāo)準(zhǔn)家庭服務(wù)合同案例
- 沼氣工程可行性研究
- 租房協(xié)議合同的簽訂技巧與流程
- 安全欄桿采購(gòu)合同
- 漁業(yè)產(chǎn)品買(mǎi)賣(mài)合同
- 在線電子購(gòu)銷合同制作
- 藥材進(jìn)出口合同
- 運(yùn)用PDCA提高患者身份識(shí)別正確率課件
- 部編版八年級(jí)上冊(cè)語(yǔ)文標(biāo)點(diǎn)符號(hào)考點(diǎn)匯總
- 國(guó)家開(kāi)放大學(xué)電大《藥物化學(xué)》期末題庫(kù)及答案
- T∕CTSS 38-2021 滇紅工夫紅茶
- 品管圈PDCA持續(xù)質(zhì)量改進(jìn)提高靜脈血栓栓塞癥規(guī)范預(yù)防率
- 綜合計(jì)算工時(shí)工作制實(shí)施方案42620
- 重力學(xué):第二章 地球正常重力場(chǎng)
- 路面基層厚度、芯樣完整性試驗(yàn)檢測(cè)記錄表(鉆芯法)
- 露天礦采場(chǎng)現(xiàn)場(chǎng)安全檢查表
- 基于MATLAB的三相交流電機(jī)調(diào)壓調(diào)速系統(tǒng)的仿真
- 事業(yè)單位管理崗位職員等級(jí)晉升審批表
評(píng)論
0/150
提交評(píng)論