微機原理課程設(shè)計-電子琴的設(shè)計_第1頁
微機原理課程設(shè)計-電子琴的設(shè)計_第2頁
微機原理課程設(shè)計-電子琴的設(shè)計_第3頁
微機原理課程設(shè)計-電子琴的設(shè)計_第4頁
微機原理課程設(shè)計-電子琴的設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

微機原理課程設(shè)計—電子琴的設(shè)計微機原理課程設(shè)計—電子琴的設(shè)計微機原理課程設(shè)計—電子琴的設(shè)計資料僅供參考文件編號:2022年4月微機原理課程設(shè)計—電子琴的設(shè)計版本號:A修改號:1頁次:1.0審核:批準:發(fā)布日期:課程設(shè)計任務(wù)書學(xué)生姓名:劉沛專業(yè)班級:電氣0901指導(dǎo)教師:張銳工作單位:自動化學(xué)院題目:計算機電子琴軟件軟件設(shè)計初始條件:1.用于調(diào)試程序的IBM兼容PC機一臺;2.安裝DOS/WIN98操作系統(tǒng)或運行于DOS/WIN98兼容方式;3.EDIT等文本編輯器輸入80x86匯編程序,MASM編譯及鏈接程序。要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1.使用匯編語言設(shè)計一個運行于計算機的電子琴軟件,軟件應(yīng)實現(xiàn)彈奏功或演奏。其中彈奏:用戶每按一琴鍵彈奏相應(yīng)音符;演奏:按下某鍵后自動彈奏預(yù)存琴譜功能;還可以附加變調(diào)、變速和記錄創(chuàng)作等其它功能。2.說明書撰寫格式應(yīng)符合《課程設(shè)計說明書統(tǒng)一書寫格式》。時間安排:1.程序框圖設(shè)計,3天2.編程,4天3.調(diào)試,3天4.編寫設(shè)計報告,4天指導(dǎo)教師簽名:年月日系主任(或責(zé)任教師)簽名:年月日目錄摘要································································=1\*ROMANI1設(shè)計任務(wù)和思路····················································1設(shè)計任務(wù)······················································1設(shè)計思路······················································12更件部分工作原理··················································28255工作原理·················································28253工作原理·················································23程序流程圖························································4主程序流程圖··················································4演奏子程序流程················································5音樂播放子程序流程············································6彈奏子程序流程圖··············································6發(fā)音子程序流程圖·············································74各部分功能實現(xiàn)說明················································7發(fā)音部分功能實現(xiàn)··············································7變調(diào)功能的實現(xiàn)················································8彈奏功能的實現(xiàn)················································8演奏功能的實現(xiàn)················································9歌曲選擇功能實現(xiàn)········································9音樂播放功能實現(xiàn)········································95程序運行結(jié)果·····················································10結(jié)束語·····························································12參考文獻···························································13附錄程序清單······················································14成績評定表·························································19摘要匯編語言是一種功能很強的程序設(shè)計語言,也是利用計算機所有硬件特性并能直接控制硬件的語言。利用匯編語言能夠直接訪問與硬件相關(guān)的存儲器或I/O端口,從而最大限度地發(fā)揮硬件的功能。本文主要介紹了利用匯編語言設(shè)計一個運行于計算機的電子琴軟件,軟件能夠?qū)崿F(xiàn)彈奏,演奏的功能,當按下彈奏鍵時,實現(xiàn)彈奏功能,發(fā)出音符對應(yīng)頻率的聲音,按下演奏鍵時,實現(xiàn)演奏功能,播放預(yù)存的音樂,按下指定的音調(diào)選擇按鍵后,選擇低音,中音或高音,則分別用低音,中音或高音進行彈奏或演奏。首先介紹了PC機內(nèi)揚聲器的控制電路,接著介紹了相關(guān)接口芯片8255和8253的內(nèi)部結(jié)構(gòu)和工作原理,接著講述了各部分功能的具體實現(xiàn)方法。關(guān)鍵詞:匯編語言,8255,8253,揚聲器計算機電子琴軟件設(shè)計1設(shè)計任務(wù)和思路設(shè)計任務(wù)使用匯編語言設(shè)計一個運行于計算機的電子琴軟件,軟件應(yīng)實現(xiàn)彈奏功能或演奏功能。其中彈奏:用戶每按一琴鍵彈奏相應(yīng)音符;演奏:按下某鍵后自動彈奏預(yù)存琴譜功能;還可以附加變調(diào)、變速和記錄創(chuàng)作等其它功能。軟件預(yù)想功能為:按數(shù)字1-8為彈奏功能;按字母p為演奏功能;按d選擇低音,按z選擇中意,按g選擇高音。設(shè)計思路電子琴的設(shè)計實際上就是要設(shè)計一個程序,能夠通過該程序控制PC機內(nèi)揚聲器的發(fā)聲規(guī)律,按下相應(yīng)的按鍵后,揚聲器能發(fā)出指定頻率的聲音。PC機內(nèi)的揚聲器是通過并行接口芯片8255和定時芯片8253來控制發(fā)音的,其電路連接方式如下圖所示。8255A8255APB1PB0CLK28253GATE2OUT2&揚聲器圖1PC機內(nèi)揚聲器控制電路由圖可知,揚聲器是由8253通道2產(chǎn)生的方波信號和8255的PB1相與后驅(qū)動發(fā)聲的,且通道2的門信號由8255的PB0提供,要想讓揚聲器發(fā)聲,PB0和PB1必須同時為高電平,因此,可以通過對8255的PB0和PB1的設(shè)置來控制揚聲器的開通和關(guān)斷,而其發(fā)音頻率可以通過對8253通道2的計數(shù)初值的設(shè)置來控制。所設(shè)計程序的任務(wù)就是要通過對按鍵的判斷來設(shè)置8255的PB0和PB1輸出電平的高低,以及8253通道2計數(shù)初值的設(shè)置。計數(shù)初值N=時鐘頻率/音階頻率.各音階的頻率如下表所示。表1各音符頻率表音符1234567頻率(低)131147165175196220247頻率(中)262294330349392440494頻率(高)5245886606987848809882硬件部分工作原理8255工作原理8255的內(nèi)部結(jié)構(gòu)圖如圖2所示,它有3個數(shù)據(jù)端口,分為兩組,A組由A口和C口高四位組成,B組由B口和C口低四位組成。其方式控制字如圖3所示。圖28255內(nèi)部結(jié)構(gòu)圖圖38255方式控制字圖38255方式控制字方式控制字的特征位D0D7D6D5D4D3D2D11A組工作方式00——方式001——方式11——方式2B組工作方式0——方式01——方式1A口輸入/輸出1——輸入0——輸出PC7PC4輸入/輸出1——輸入0——輸出B口輸入/輸出1——輸入0——輸出PC3PC0輸入/輸出1——輸入0——輸出PC機內(nèi)8255的A口,B口,C口和控制口的端口地址分別為:60H,61H,62H,63H。8253工作原理8253芯片中有3個計數(shù)通道,稱為通道0,1,2,它們與外部電路相連的信號線有3根:CLK,GATE,OUT,CLK是脈沖輸入端,GATE是門控信號,OUT是輸出信號,計數(shù)器工作在減1狀態(tài)。其內(nèi)部結(jié)構(gòu)圖和方式控制字格式如圖4,圖5所示。其中當計數(shù)器工作在方式3時,輸出信號為方波信號。內(nèi)內(nèi)部總線A1GATE0CLK0OUT0GATE1CLK1OUT1GATE2CLK2OUT2D0-D7計數(shù)器0計數(shù)器2計數(shù)器1控制寄存器A0數(shù)據(jù)總線緩沖器R/W邏輯電路圖48253內(nèi)部結(jié)構(gòu)圖D7D6D5D4D3D2D1D0計數(shù)器選擇計數(shù)器選擇00計數(shù)器001計數(shù)器110計數(shù)器211不用00計數(shù)器鎖存01讀寫低8位10讀寫高8位11讀寫16位工作方式選擇000方式0001方式1×10方式2×11方式3100方式4101方式5計數(shù)方式0二進制1BCD計數(shù)圖58253控制字格式PC機內(nèi)8253的通道0,通道1,通道2,控制口的端口地址分別為:40H,41H,42,43H。因為揚聲器是由通道2來控制的,故應(yīng)選擇通道2,工作方式選為方式3,輸出的信號則為方波信號。3程序流程圖主程序流程圖主程序的流程圖如下圖所示:為d為d為z為g開始顯示輸入提示信息從鍵盤讀入字符為q結(jié)束選擇低音選擇中音選擇高音顯示輸入提示從鍵盤讀入字符為q為p為1~8調(diào)用演奏子程序調(diào)用彈奏子程序NNYYNYNYYYYNYNNNYYYNYNNNYYNN圖6主程序流程圖演奏子程序流程圖當按鍵為p為時,調(diào)用音樂播放子程序,音樂播放子程序的流程圖如下圖所示。顯示輸入提示顯示輸入提示從鍵盤讀入字符從鍵盤讀入字符Y為qY為qYN返回調(diào)用音樂1播放子程序為1為2YN返回調(diào)用音樂1播放子程序為1為2NNY調(diào)用音樂2播放子程序Y調(diào)用音樂2播放子程序NN顯示輸入提示顯示輸入提示從鍵盤讀入字符為q為cYYN返回N返回YNYN圖7音樂播放子程序流程圖音樂播放子程序流程圖演奏時,通過判斷按鍵為1或2來調(diào)用音樂播放子程序1或2,音樂播放子程序流程圖如圖8所示。計數(shù)器清零計數(shù)器清零CL自增1CL自增1YCL>歌曲長度YCL>歌曲長度N返回查表得相應(yīng)頻率計算計數(shù)初值N返回查表得相應(yīng)頻率計算計數(shù)初值調(diào)用發(fā)音子程序圖8音樂播放子程序流程圖彈奏子程序流程圖當按鍵為1-8時,調(diào)用演奏子程序,演奏子程序的流程圖如下圖所示:查表得相應(yīng)頻率計算計數(shù)初值查表得相應(yīng)頻率計算計數(shù)初值返回調(diào)用發(fā)音子程序圖9演奏子程序流程圖發(fā)音子程序流程圖在彈奏和演奏時都需調(diào)用發(fā)音子程序,發(fā)音子程序的作用是控制揚聲器的發(fā)音,其流程圖如下:8253初始化開揚聲器8253初始化開揚聲器延時關(guān)揚聲器返回圖10發(fā)音子程序流程圖4各部分功能實現(xiàn)說明發(fā)音部分功能實現(xiàn)由更件的連接形式可知,揚聲器的開斷是由8255的PB0和PB1以及8253通道2同時控制的,PB0和PB1同時為高電平時,揚聲器開,有一個為低電平時,揚聲器關(guān)斷,又知8255B口地址為61H,8253通道2地址為42H,控制口地址為43H。具體程序編寫如下。8253初始化程序段:moval,b;選擇8253的通道2,并設(shè)置為工作方式3out43h,almovax,bxout42h,al;將計數(shù)初值的低8位寫入計數(shù)通道m(xù)oval,ahout42h,al;將計數(shù)初值的高8位寫入計數(shù)通道開揚聲器程序段:inal,61h;讀入B口數(shù)據(jù)oral,03h;將PB0和PB1置1out61h,al;將設(shè)置好的數(shù)據(jù)送回B口關(guān)揚聲器程序段:inal,61h;讀入B口數(shù)據(jù)andal,0fch;將PB0和PB1置0out61h,a;將設(shè)置好的數(shù)據(jù)送回B口變調(diào)功能的實現(xiàn)揚聲器發(fā)音的頻率是由8253產(chǎn)生方波的頻率決定的,而方波頻率又是由通道的計數(shù)初值來決定的,因此可以通過改變通道的計數(shù)初值來實現(xiàn)變調(diào)功能。計數(shù)初值N=時鐘頻率/音階頻率,時鐘頻率為=1234DCH,可以將相應(yīng)音調(diào)對應(yīng)的時鐘頻率存入內(nèi)存單元,當選擇相應(yīng)的音調(diào)時,計算計數(shù)初值時,采用對應(yīng)的時鐘頻率值,具體程序如下。cmpal,'d';為d則選擇低音jnej1movnum2,50jmpchoicej1:cmpal,'z';為z則選擇中音jnej2movnum2,12hjmpchoicej2:cmpal,'g';為g則選擇高音jneloop0movnum2,06h其中,num1和num2中存放的是時鐘頻率值,num1中固定為34DCH,選擇低音時,num2值設(shè)為50,中音時設(shè)為12H,高音時設(shè)為06H。計算計數(shù)初值程序如下:movax,num1movdx,num2div音符頻率通過這樣的設(shè)置,即可實現(xiàn)電子琴的變調(diào)功能。彈奏功能的實現(xiàn)當按鍵為數(shù)字1-8時,選擇彈奏功能,通過對按鍵的判斷,求得其偏移地址,然后通過查表得其相應(yīng)頻率值,再由上述計算計數(shù)初值的方法求得計數(shù)初值,然后將計數(shù)初值送人8253的通道2,最后調(diào)用發(fā)音子程序即實現(xiàn)彈奏功能。具體程序段如下:subal,31h;求偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;計算計數(shù)初值movdx,num2divwordptr[tab+bx]movbx,ax;保存計數(shù)初值演奏功能的實現(xiàn)歌曲選擇功能實現(xiàn)當按鍵為p時,選擇演奏功能,播放預(yù)存的音樂,由于預(yù)存了兩首歌曲,因此需進行選擇,按下p后,顯示輸入提示信息,按1或2選擇對應(yīng)的歌曲,然后調(diào)用相應(yīng)的音樂播放子程序,播放完后顯示輸入提示信息,按q退出,按c繼續(xù)。具體程序?qū)崿F(xiàn)如下:loop2:movdx,offsetmesg1;顯示輸入提示信息movah,09hint21hmovah,07h;從鍵盤讀入一個字符int21hcmpal,'q';為q則退出jechoicecmpal,'1';為1則選擇歌曲1jnenext1callmusic1jmploop3next1:cmpal,'2';為2則選擇歌曲2jneloop2;不為q,1,2則重新選擇callmusic2loop3:movdx,offsetmesg2;播放完后顯示輸入提示信息movah,09hint21hmovah,7;從鍵盤讀入一個字符int21hcmpal,'q';為q則返回jechoicecmpal,'c';為c則繼續(xù)播放jeloop2jmploop3音樂播放功能實現(xiàn)選擇歌曲后,調(diào)用對應(yīng)的音樂播放子程序,音樂播放需用到循環(huán)結(jié)構(gòu),首先將計數(shù)器清零,接著計數(shù)器自增1,求得偏移量,然后通過查表的到相應(yīng)的頻率,再計算計數(shù)初值,將計數(shù)初值送人8253計數(shù)通道,調(diào)用發(fā)音子程序,若計數(shù)器的值大于歌曲長度,則返回。具體程序段如下。movcl,0;將計數(shù)器清零ad:inccl;計數(shù)器值自增1cmpcl,31;計數(shù)器值若大于歌曲長度,則返回jereturnmoval,clsubal,1;求偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;計算計數(shù)初值movdx,num2divwordptr[song2+bx]movbx,axcallspeaker;調(diào)用發(fā)音子程序jmpad5程序運行結(jié)果運行程序后,顯示如下界面,等待輸入字符。圖11程序運行結(jié)果圖1按提示輸入字符,按q則退出,按d選擇低音,按z選擇中音,按g選擇高音,選擇音調(diào)后,顯示如下界面:圖12程序運行結(jié)果圖2等待輸入字符,按q則退出,按p則演奏,按數(shù)字1-8則彈奏。按下p后,程序運行如下:圖13程序運行結(jié)果圖3按提示輸入字符,按下q則返回,按下1或2進行歌曲選擇,歌曲播放完后程序運行如下:圖14程序運行結(jié)果圖4按提示按下鍵盤,若按下q,則推出,若按下c,則繼續(xù)播放歌曲。下面是按下c后的運行結(jié)果:圖15程序運行結(jié)果圖5結(jié)束語通過這次課程設(shè)計,我從中學(xué)到了許多從課本上學(xué)不到的東西,鍛煉了自己編程的能力,最后程序運行時能夠?qū)崿F(xiàn)目標,我感到很有成就感,從中也獲得了很多樂趣,當然,最重要的是加深了我對課本理論知識的理解。當剛看到這個課設(shè)題目時,我感到無從下手,因為我都不知道PC機的內(nèi)部具體結(jié)構(gòu),從理論課上只是了解了CPU的結(jié)構(gòu)和工作原理,以及幾個接口芯片的工作原理,還有匯編語言的一些基本指令。但我沒有被嚇到,我冷靜下來思考后,發(fā)現(xiàn)其本質(zhì)就是控制PC機內(nèi)揚聲器的發(fā)音,通過查閱資料我了解了PC機內(nèi)揚聲器的電路連接形式,發(fā)現(xiàn)它是由接口芯片8255和8253共同控制的,8255的PB0作為8253通道2的門信號,而8255的PB1和8253通道2的輸出相與后的信號作為揚聲器的驅(qū)動信號,了解了其內(nèi)部接線方式后,思路也就有了,要想讓揚聲器發(fā)聲,8255的PB0和PB1必須同時為高電平,其中之一為低電平時,揚聲器就不能發(fā)聲,而發(fā)聲的音調(diào)則可通過改變8253的計數(shù)初值來實現(xiàn),接下來的任務(wù)就是通過編程來控制8255和8253,從而間接地控制揚聲器的發(fā)聲規(guī)律,而8255和8253這兩個接口芯片在理論課上都已介紹過,對其工作原理和編程方法都有一定的了解,看到這些熟悉的內(nèi)容時,我淡定了很多。有了思路之后,我并沒有急著寫程序,因為我懷疑是不是每臺PC機的揚聲器接線方式都是這樣的,所以我開始只編了一段控制揚聲器發(fā)音的程序,來看看程序運行時揚聲器到底發(fā)不發(fā)音,結(jié)果發(fā)聲了,這讓我很驚喜,也很有動力,更加激發(fā)了我的興趣,接下來我就開始編寫實現(xiàn)指定功能的程序了,首先是最簡單的彈奏功能,通過對按鍵的判斷來發(fā)出相應(yīng)頻率的聲音,因為要判斷按鍵,所以很自然地就想到了CMP指令,在計算計數(shù)初值時,因為要用到相應(yīng)音符的頻率,所以需要將按鍵轉(zhuǎn)換為音符的頻率,我開始想用課本上常見的XLAT換碼指令,但AL存放的數(shù)最大為128,很明顯容量不夠,于是我采用了基址+變址的尋址方法,在編程的過程中,由于要程序?qū)崿F(xiàn)多個功能,所以用子程序的結(jié)構(gòu)會比較方便,需要完成某個功能時,只需調(diào)用相應(yīng)子程序就可以了,這樣會使得程序的結(jié)構(gòu)清楚明了;在開揚聲器和關(guān)揚聲器之間需要一定的延時,當把計數(shù)器置為0ffffh時,延時還是顯得太短,于是延時我采用了AX和CX相配合的方式,使得延時達到預(yù)期的目的;在完成基本功能后,我還試著加上一些附加功能,比如變調(diào),錄音,通過我的不斷嘗試,終于把變調(diào)功能實現(xiàn)了,但錄音功能沒能像預(yù)期的那樣??傊@次課程設(shè)計讓我學(xué)到了許多從課本上學(xué)不到的知識,加深了對理論知識的理解,激發(fā)了我對匯編語言的興趣。上理論課時,只是老師講,我們聽,那些指令讓我感到很枯燥,因為不知道它到底有什么作用,而這次課程設(shè)計剛好把這些指令應(yīng)用到了實際中來,加深了對各種指令功能的理解,最后功能實現(xiàn)時,感到很有成就感,覺得匯編語言很神奇,激發(fā)了我對它的興趣。參考文獻[1]彭虎,周佩玲.微機原理與接口技術(shù)(第二版).電子工業(yè)出版社,2010[2]陳慧杰.計算機揚聲器發(fā)聲的控制.內(nèi)蒙古民族大學(xué)出版社,2001[3]PeterAbel著,沈美明等譯.IBMPC匯編語言設(shè)計程序.人民郵電出版社,2002[4]馮繼超.微機原理實驗指導(dǎo)書.武漢理工大學(xué)出版社,2010附錄程序清單datasegmentmesgdb'pressqtoquit,pressdorzorhtochoseyindiao',0ah,0dh,'$'mesg1db'pressqtoreturn,press1or2tochosemusic',0ah,0dh,'$'mesg2db'pressqtoreturn,pressctocontinue',0ah,0dh,'$'mesg3db'pressqtoreturn,pressptoplaymusic,press1~8tohandplay',0ah,0dh,'$'num1dw34dchnum2dw12htabdw262,294,330,347,392,440,494,524song1dw262,294,330,262,262,294,330,262dw330,347,392,330,347,392,392,440dw392,347,330,262,392,440,392,347dw330,262,392,262,392,392,262,392;兩只老虎song2dw330,330,347,392,392,347,330,294dw262,262,294,330,330,294,294,330dw330,347,392,392,347,330,294,262dw262,294,330,294,262,262;歡樂頌dataendscodesegment assumecs:code,ds:datastart:movax,datamovds,axloop0:movdx,offsetmesg;顯示輸入提示信息movah,09hint21loop1:movah,07h;讀入字符int21hcmpal,'q';為q則退出jedonecmpal,'d';為d,選擇低音jnej1movnum2,50jmpchoicej1:cmpal,'z';為z選擇中音jnej2movnum2,12hjmpchoicej2:cmpal,'g';為g選擇高音jneloop0movnum2,06hchoice:movdx,offsetmesg3movah,09hint21hput1:movah,07hint21hcmpal,'q';為q則返回jeloop0cmpal,'p';為p選擇演奏jnenextcallplayjmpput1next:cmpal,'1';為1-8,選擇彈奏jlloop1cmpal,'8'jgput1callhandjmpput1handprocnear;彈奏子程序subal,31hshlal,1movbl,almovbh,0movax,num1movdx,num2divwordptr[tab+bx]movbx,axcallspeakerrethandendpplayprocnear;演奏子程序loop2:movdx,offsetmesg1movah,09hint21hmovah,07h;讀入字符int21hcmpal,'q';為q則返回jechoicecmpal,'1';為1,播放歌曲1jnenext1callmusic1jmploop3next1:cmpal,'2';為2,播放歌曲2jneloop2callmusic2loop3:movdx,offsetmesg2movah,09hint21hmovah,7;讀入字符int21hcmpal,'q';為q則退出jechoicecmpal,'c';為c則繼續(xù)jeloop2jmploop3retplayendpmusic1procnear;音樂1播放子程序movcl,0ad:incclcmpcl,33jereturnmoval,clsubal,1;取偏移量shlal,1movbl,al;保存偏移量movbh,0movax,num1;計算計數(shù)初值movdx,num2d

溫馨提示

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

評論

0/150

提交評論