微機原理與匯編語言課設(shè)——電子琴_第1頁
微機原理與匯編語言課設(shè)——電子琴_第2頁
微機原理與匯編語言課設(shè)——電子琴_第3頁
微機原理與匯編語言課設(shè)——電子琴_第4頁
微機原理與匯編語言課設(shè)——電子琴_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機原理與匯編語言課程設(shè)計電子琴學(xué) 院: 計算機科學(xué)技術(shù) 專 業(yè): 計算機科學(xué)與技術(shù)(工) 班 級: 計 13-1 班 姓 名: 肖林英 學(xué) 號: 2013170101 25 指導(dǎo)教師: 陳微 2016年 6 月 10 日微機原理與匯編語言課程設(shè)計任務(wù)書一、題目:電子琴二、設(shè)計的目的1. 掌握利用PC機揚聲器發(fā)出不同頻率聲音的方法;2. 學(xué)習利用系統(tǒng)功能調(diào)用從鍵盤上讀取字符的方法;3. 掌握定時器/計數(shù)器8253的工作原理;三、設(shè)計要求編寫程序,程序運行時使PC 機成為一架可演奏的“鋼琴”。當按下數(shù)字鍵1-8時,依次發(fā)出1,2,3,4,5,6,7,七個高音和低音,Esc 則退出演奏狀態(tài)。獨立完

2、成課程設(shè)計。四、設(shè)計內(nèi)容及步驟1PC 機揚聲器電路電路圖如圖1所示:圖1 PC 機揚聲器控制電路通過給8253定時器裝入不同的計數(shù)值,可以使其輸出不同頻率的波形。當與門打開后,經(jīng)過放大器的放大作用,便可驅(qū)動揚聲器發(fā)出不同頻率的音調(diào)。為使該音調(diào)的聲音持續(xù)一段時間,要插入一段延時程序,之后再將揚聲器關(guān)閉(關(guān)閉與門)。2建立音頻表要使計算機成為可彈奏的簡易電子琴,需要使用系統(tǒng)調(diào)用的01H 功能以接收鍵入字符,并且要建立一張音頻表。五、課程設(shè)計工作量每人的程序量應(yīng)在100行有效程序行以上,不得抄襲,否則給不及格成績。六、課程設(shè)計工作計劃2016年6月6日 指導(dǎo)教師講課,學(xué)生準備文獻資料;2016年6月

3、6日2016年6月10日 每人完成自己程序并能獨立演示;2016年6月10日下午驗收,學(xué)生撰寫課程設(shè)計報告。指導(dǎo)教師簽字: 專業(yè)主任簽章: 微機原理與匯編語言課程設(shè)計指導(dǎo)教師評語與成績指導(dǎo)教師評語:課程設(shè)計表現(xiàn)成績: 課程設(shè)計驗收成績: 課程設(shè)計報告成績: 課程設(shè)計 總成績: 指導(dǎo)教師簽字: 2016年 月 日目 錄一、概述11.課題描述12.程序設(shè)計目的1二、 需求分析1三、總體設(shè)計21.電子琴程序22.單音調(diào)子程序SOUND3四、詳細設(shè)計31.揚聲器32.界面設(shè)計4五、調(diào)試與運行結(jié)果說明51.主界面52.退出界面6六、課程設(shè)計總結(jié)6七、結(jié)束語7八、程序清單7參考文獻14 一、概述1.課題描

4、述隨著社會發(fā)展,計算機硬件技術(shù)越來越多的應(yīng)用到生活中的各個領(lǐng)域,人們對軟硬件技術(shù)結(jié)合開發(fā)出來的產(chǎn)品的要求越來越迫切,需求日益增加,如今用軟硬件結(jié)合設(shè)計電子產(chǎn)品已經(jīng)成為了一大時尚。本設(shè)計編寫的一個用PC機模擬電子琴的程序,利用PC機中的8253和鍵盤的按鍵模擬電子琴8個音節(jié)的發(fā)聲。編程使計算機的數(shù)字鍵1、2、3、4、5、6、7、8作為電子琴按鍵,按下即發(fā)出相應(yīng)的音階。在本次課程設(shè)計中,考察了我們編程的技巧、運用Debug動態(tài)調(diào)試工具進行程序的調(diào)試的能力。同時,本道設(shè)計題目還檢查了我們對匯編語言這門課程的基本知識的掌握程度。只有掌握匯編語言基本編程方法,掌握程序各部分功能及其相互聯(lián)系、相互作用,并

5、要熟悉基本的音樂知識,才能獨立的把程序?qū)懗鰜恚拍馨殉绦驅(qū)懞?。開發(fā)工具:匯編語言 MASM FOR WINDOWS2.程序設(shè)計目的課程設(shè)計是培養(yǎng)學(xué)生運用有關(guān)課程的基礎(chǔ)理論和技能解決實際問題,進一步提高學(xué)生本專業(yè)必要的基本技能、方法和創(chuàng)新能力的重要環(huán)節(jié)之一。通過課程設(shè)計使學(xué)生受到設(shè)計方法的初步訓(xùn)練,能用文字、圖形和現(xiàn)代設(shè)計方法簡要、系統(tǒng)、正確地表達設(shè)計成果。微機原理與匯編語言課程設(shè)計 主要是訓(xùn)練學(xué)生綜合運用學(xué)過的微機原理的軟件和硬件知識,獨立完成一個實際的微機應(yīng)用設(shè)計系統(tǒng),并在實驗室實現(xiàn)。此次課設(shè)是對個人的程序設(shè)計方法和技能的基本訓(xùn)練,鞏固在課堂上學(xué)到的有關(guān)程序設(shè)計的基本知識和基本方法,為學(xué)習后

6、繼的基礎(chǔ)課和專業(yè)課打下堅實的基礎(chǔ)。課設(shè)所用的是匯編語言,它是一種機器語言,是計算機能提供的最快最有效的語言,也是能夠利用計算機所有硬件性能并能直接控制硬件的語言。實驗不僅培養(yǎng)了實際動手能力,也進一步學(xué)習了匯編語言的結(jié)構(gòu)和使用方法,提高了匯編語言的水平。2、 需求分析本實驗是利用微機原理試驗箱、8255芯片、8253芯片、鍵盤、揚聲器等硬件設(shè)備,設(shè)計簡易電子琴。首先利用了編程程序,編輯了8255芯片控制字, 對其進行初始化,使其工作在方式0,即基本輸入輸出狀態(tài),將8255的A端口設(shè)置為輸出,C端口進行,經(jīng)CPU運算后, 輸出到8253芯片的A端口中,由此實現(xiàn)對其的初始化。將8253芯片設(shè)置為工作

7、在方式3,即輸出對稱方波狀態(tài)。A端口為輸入,“OUT”指令可將輸出對應(yīng)一定頻率的方波送到揚聲器中,由此實現(xiàn)發(fā)聲。本實驗通過頻率大小控制發(fā)出聲音的高低,通過對延時程序的調(diào)用控制發(fā)出聲音的長短。并通過所編程序?qū)崿F(xiàn)對鍵盤的重復(fù)掃描,重而可以彈奏多個音符的試驗?zāi)康?。三、總體設(shè)計 1.電子琴程序由于是用鍵盤的數(shù)字鍵1-8,要先讀取鍵盤的輸入,判斷輸入是否在1-8之間,不在就退到主菜單,若是就根據(jù)鍵值查表找出相應(yīng)的頻率,計算初值,調(diào)用發(fā)音子程序即可,此時的音長固定。初值的計算方法是用輸入的clk頻率除以音符的頻率。程序流程圖如圖1所示。YNYN顯示提示信息等待鍵盤按鍵放入ALAL30>AL查表FRE

8、Q得頻率計算初值,置音長返回主菜單調(diào)用8253初始化程序AL 小于1AL大于8圖1.1 電子琴程序流程圖2.單音調(diào)子程序SOUND單音調(diào)子程序的調(diào)用前需要進行以下幾個方面工作:(1)確定相應(yīng)的音調(diào)所對應(yīng)的頻率,查表可以得到,再由頻率得到對應(yīng)的8253計數(shù)初值。(2)確定音長,即一個音符所持續(xù)的時間。在單音調(diào)子程序中實現(xiàn)發(fā)出一個音符的聲音,持續(xù)所需的時間,流程圖如圖2所示: 讀取8253計數(shù)初值和音長8253置初值開啟與門和8253GATE延時關(guān)閉與門和8253GATE返回圖2.1 單音調(diào)子程序流程圖 四、詳細設(shè)計1.揚聲器在PC/XT機中,揚聲器接口電路由8255A-5、8253-5、驅(qū)動器和

9、低通濾波器等構(gòu)成,其中8253-5是音頻信號源,8255A-5作控制器,驅(qū)動器用來增大8253-5輸出的TTL電平信號的驅(qū)動能力,低通濾波器將脈沖信號轉(zhuǎn)換成接近濾波的音頻信號,去驅(qū)動揚聲器發(fā)聲。8253-5的計數(shù)器2的CLK2端所加的時鐘脈沖頻率為1.19318MHZ。可根據(jù)這個頻率和所要產(chǎn)生的聲音頻率,計算出定時常數(shù),經(jīng)編程讓計數(shù)器2輸出指定頻率的波形。8255A-5的PB0接8253-5的GATE2,作為計數(shù)器的門控信號,允許或禁止8253-5計數(shù)。8255A-5的PB1接與門U87的一個輸入端,用來對計數(shù)器2的OUT2端輸出的波形作進一步的控制,當PB1=1時,8253-5從OUT2輸出

10、的波形才能通過與門U87送到驅(qū)動器75477的A端,送到揚聲器插座使之發(fā)聲。當PB1=0時,OUT2輸出的波形不能通過與門,揚聲器不會發(fā)聲。當PB1PB0=11時揚聲器能連續(xù)發(fā)聲。 2.界面設(shè)計主界面為一架電子琴,并采用漂亮的字體作為提示語。利用int 10h實現(xiàn),利用宏定義畫線和矩形。DRAWSQRE MACRO START_X,START_Y,END_X,END_Y,COLORLOCAL ROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHTPUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV AH,0CH MOV AL,COLOR MO

11、V BH,0 MOV CX,START_X MOV DX,START_YROW_UP: ;畫上邊 INT 10H INC CX CMP CX,END_X JNE ROW_UPRANK_RIGHT: ;畫右邊 INT 10H INC DX CMP DX,END_Y JNE RANK_RIGHT MOV CX, START_X ;下邊起始點 MOV SI,END_X INC SIROW_DOWN: ;畫下邊 INT 10H INC CX CMP CX,SI JNE ROW_DOWN MOV DX,START_Y ;右邊起始點 MOV CX,START_XRANK_LEFT: ;畫右邊 INT 10

12、H INC DX CMP DX, END_Y JNE RANK_LEFT POP SI POP DX POP CX POP BX POP AXENDM五、調(diào)試與運行結(jié)果說明1.主界面圖5.1 主界面2.退出界面圖5.2 退出界面六、課程設(shè)計總結(jié)本次課程設(shè)計由我、鄧云杰、劉萌萌三個同學(xué)協(xié)作共同完成。通過這次的課程設(shè)計,讓我對微機原理與匯編語言這門課有了更深的認識,系統(tǒng)的掌握了微機原理與匯編語言的應(yīng)用知識。 這次課程設(shè)計我們做的是用PC機模擬電子琴發(fā)聲,通過老師的提示及相關(guān)實驗指導(dǎo)書的資料我們找到了入手點,在已有基礎(chǔ)題目的基礎(chǔ)上加入創(chuàng)新內(nèi)容。在基礎(chǔ)功能的實現(xiàn)上并沒有遇到問題,主要也是有參考內(nèi)容的指

13、導(dǎo),同時通過參考內(nèi)容更好的把握了設(shè)計的整體思路及各個模塊的細節(jié)。但是在拓展功能上就有不少的問題。對于在程序設(shè)計中出現(xiàn)的一些問題,我們通過翻閱相關(guān)資料和請教老師,最終都得到了解決。 雖然此次課程設(shè)計的過程是艱辛的,但結(jié)果還是令我們比較欣慰的。提高了自己的分析解決問題的能力,并且使自己所學(xué)的知識與實踐相結(jié)合,應(yīng)用到實踐當中。遇到問題時,應(yīng)該對自己有信心,但也要知道自己的不足,認真去查閱資料和學(xué)習不懂的知識。另外在本次課程設(shè)計中,培養(yǎng)了同學(xué)之間協(xié)作精神,有問題時一起討論共同解決問題,提高了自己的合作能力。七、結(jié)束語 匯編語言作為一種低級程序設(shè)計語言,既然是低級所以應(yīng)該是最底層的,與我們計算機內(nèi)部的結(jié)

14、構(gòu)聯(lián)系應(yīng)該聯(lián)系很密切,而且在我們學(xué)習中也深刻的了解到了這一點 。比如說后來學(xué)到的寄存器、 中斷、 還要各種尋址方式以及進棧出棧, 好多的就是設(shè)計到計算機硬件 。 學(xué)完匯編這門課我也對之前的高級語言中的一些知識有了更新的認識, 能夠讓我們更好的理解高級語言,尤其是高級語言中的 C語言。匯編語言對于內(nèi)存的操作都是基于內(nèi)存地址的,而 C語言中最令人頭疼的指針概念,說白了就是內(nèi)存的地址指針的學(xué)習和應(yīng)用中最頭疼的就是在指針這個抽象的概念和實際的內(nèi)存單元之問建立思維映射, 而這些恰恰是我們在匯編語言學(xué)習中頻繁做的一件平常事另外,對于 c語言中的數(shù)據(jù)類型形參實參函數(shù)調(diào)用全局變量局部變量等概念及操作, 我們都

15、可以用匯編語言中的一些操作相關(guān)聯(lián), 把這些抽象的概念和過程, 通過匯編語言形成一個具體的映像, 深度割析,這樣我們才能真正的學(xué)會學(xué)好 C 語言計算機科學(xué)的各個方面是一個統(tǒng)一的整體, 只有多方面穿插, 交互才能更好的搭建計算機知識體系。 我想如果想學(xué)好計算機編程技能, 如果想做一名合格的編程人員, 如果想在計算機編程之路走的更遠, 我們也必須從匯編語言開始, 才能完整、完善的建立計算機編程知識體系! 所以對于我自己來說, 要以今天的學(xué)習為跳板, 為今后的匯編語言的繼續(xù)學(xué)習打好基礎(chǔ)。愿自己在計算機這條道路上越走越遠。本次設(shè)計得到了老師的大力支持和幫助,其中老師對此次設(shè)計的題目的主要難度以及一些要求

16、和目的給出了詳細的解釋。同學(xué)對設(shè)計中遇到的匯編語言方面的知識給予了很大的幫助。 感謝陳微老師這學(xué)期對我們的諄諄教導(dǎo)、對微機原理課程的認真講解以及對課程設(shè)計的細心指導(dǎo)。您的認真負責讓我感覺到了一個電腦工作者所要具備的素質(zhì),您的講課風格讓我對微機原理這門課產(chǎn)生了濃厚興趣,并會更努力的去學(xué)習它! 八、程序清單DRAW MACRO START_X,START_Y,END_X,END_Y,COLOR LOCAL DRAW_NEXT;local:避免宏重復(fù)調(diào)用時,標號的重復(fù);功能:畫填充的矩形;使用條件:START_X<END_X,START_Y<END_YPUSH AXPUSH BX PUS

17、H CX PUSH DX MOV AH,0CH ;寫像素點 MOV AL,COLOR ;設(shè)置顏色 MOV BH,0 ;選用頁號0 MOV CX,START_X ;列起始點 MOV DX,START_Y ;行起始點DRAW_NEXT: INT 10H ;畫點 INC CX ;畫橫線 CMP CX,END_X ;比較行是否畫完 JNE DRAW_NEXT ;畫另一行 MOV CX, START_X ;另一行的起始點 INC DX CMP DX,END_Y ;比較列是否畫完 JNE DRAW_NEXT ;未完繼續(xù)畫 POP DX POP CX POP BX POP AXENDMDRAWSQRE MA

18、CRO START_X,START_Y,END_X,END_Y,COLORLOCAL ROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT;功能:畫不填充的矩形PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV AH,0CH MOV AL,COLOR MOV BH,0 MOV CX,START_X MOV DX,START_YROW_UP: ;畫上邊 INT 10H INC CX CMP CX,END_X JNE ROW_UPRANK_RIGHT: ;畫右邊 INT 10H INC DX CMP DX,END_Y JNE RANK_RIG

19、HT MOV CX, START_X ;下邊起始點 MOV SI,END_X INC SIROW_DOWN: ;畫下邊 INT 10H INC CX CMP CX,SI JNE ROW_DOWN MOV DX,START_Y ;右邊起始點 MOV CX,START_XRANK_LEFT: ;畫右邊 INT 10H INC DX CMP DX, END_Y JNE RANK_LEFT POP SI POP DX POP CX POP BX POP AXENDMDATAS SEGMENT;此處輸入數(shù)據(jù)段代碼 DATA1 DB 49h,56h,62h,66h,74h,83h,94h,10h ;音頻表

20、NUM DB ? ;NUM為8253計數(shù)器初值的序號 ;白色琴鍵坐標 ST_LX DW 50,61,72,83,94,105,116 ST_MX DW 127,138,149,160,171,182,193 ST_HX DW 204,215,226,237,248,259,270 ST_Y DW 50 ED_LX DW 60,71,82,93,104,115,126 ED_MX DW 137,148,159,170,181,192,203 ED_HX DW 214,225,236,247,258,269,280 ED_Y DW 90 ;黑色琴鍵坐標 BT_X DW 57,68,90,101,1

21、12 DW 134,145,167,178,189 DW 211,222,244,254,265 BT_Y DW 50 BD_X DW 64,75,97,108,119 DW 141,152,174,185,196 DW 218,229,251,262,273 BD_Y DW 70 ;定義在屏幕繪制字 START_COL DB ? ;存儲起始行 TEXT DB 16 ;起始行 DB 2 ;起始列 DB 31H ;字體顏色 DB 'This Is My Curriculum Design',0FFH DB 'Thank You For Your Support',

22、0FFH DB '1.PRESS 18 TO PLAY',0FFH DB '2.PRESS ESC TO EXIT',0FFH,0FFH ;顯示字DATAS ENDSSTACKS SEGMENT;此處輸入堆棧段代碼STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC NEARSTART: ;此處輸入代碼段代碼CALL INIT ;調(diào)用初始化程序 MOV BX,OFFSET DATA1 ;獲取音頻表 SKY: MOV AH,07H ;無回顯過濾的字符輸入 AL=8位數(shù)據(jù) INT 2

23、1H CMP AL,27 ;如果按CTRL+C,退出 JE EXIT1 CMP AL,31H ;若AL小于1,循環(huán),否則繼續(xù)執(zhí)行程序,31H是ASKII碼'1' JL SKY CMP AL,38H ;若AL大于8,循環(huán),否則繼續(xù)執(zhí)行程序,38H是ASKII碼'8' JG SKY SUB AL,31H MOV AH,00H MOV DI,BX+SI MOV SI,AX MOV NUM,AL ;將所獲取的鍵值賦給8253計數(shù)器 MOV AL,BXSI ;寄存器基址加變址尋址方式 PUSH BX CALL INIT1CALL WAITFIN AL,61HAND AL,

24、0FCHOUT 61H,AL ; 關(guān)閉揚聲器 JMP SKYMAIN ENDP ;8253初始化子程序INIT1 PROC NEAR ;選擇方式三通道二 MOV DL,0AH ;控制揚聲器聲音MUL DL MOV DI,AX MOV AL,0B6H OUT 43H,AL MOV DX,0012H MOV AX,34DEH DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H ;聲音開始 MOV AH,AL OR AL,03H OUT 61H,AL RETINIT1 ENDP;延時子程序WAITF PROC NEAR PUSH AX ;保護寄存器WAI

25、TF1: IN AL,61H ;讀取PB端口值A(chǔ)ND AL,10H ;低四位清零CMP AL,AH JE WAITF1 MOV AH,AL LOOP WAITF1 POP AX RET WAITF ENDP INIT PROC NEAR;初始化屏幕:畫琴鍵MOV AX,DATAS MOV DS,AX MOV AH,0 ;設(shè)置屏幕 MOV AL,0DH INT 10H ;BIOS 對屏幕及顯示器所提供的服務(wù)程序 MOV AH,0BH MOV BH,0 MOV BL,09H ;背景色 INT 10H CALL SHOW_TEXT DRAW 45,30,285,94,05H DRAWSQRE 45,30,285,94,0DH DRAWSQRE 49,48,280,49,00H LEA SI,ST_LX ;畫21個白色鍵 LEA DI,ED_LX MOV CX,21INIT_DRAW: DRAW SI,ST_Y,DI,ED_Y,0FH DRAW SI,90,DI,93,07H ;陰影 ADD SI,2 ADD DI,2 LOOP INIT_DRAW LEA SI,BT_X ;畫15個黑色鍵 LEA DI,B

溫馨提示

  • 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

提交評論