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

下載本文檔

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

文檔簡介

微機原理課程設(shè)計電子琴設(shè)計設(shè)計內(nèi)容編寫一實現(xiàn)電子琴的程序,并實現(xiàn)若干擴展功能?;竟δ埽河面I盤輸入對應(yīng)的七個音階,通過實驗箱的喇叭發(fā)出聲音,并通過七段數(shù)碼管顯示輸入音階;擴展功能:1、在程序中可預(yù)設(shè)多首曲目,按一鍵可以進入預(yù)設(shè)子菜單,對要播放的曲目進行選擇,并實現(xiàn)播放該曲目。2、程序運行時有友好的用戶介面。3.當彈奏不同音階時,雙色點陣LED顯示器顯示不同的圖案二、元件與儀器1.計時器82532.并行控制器8255A3.實驗臺三、設(shè)計原理、思路及流程圖設(shè)計原理(1)對于一個特定的D/A轉(zhuǎn)換接口電路,CPU執(zhí)行一條輸出指令將數(shù)據(jù)送入D/A,即可在其輸出端得到一定的電壓輸出。給D/A轉(zhuǎn)換器輸入按正弦規(guī)律變化的數(shù)據(jù),在其輸出端即可產(chǎn)生正弦波。對于音樂,每個音階都有確定的頻率。各音階標稱頻率值:(2)產(chǎn)生一個正弦波的數(shù)據(jù)可取32個(小于亦可),不同頻率的區(qū)別,可通過調(diào)節(jié)向D/A轉(zhuǎn)換器輸出數(shù)據(jù)的時間間隔,例如:發(fā)"1"頻率為261。1HZ,周期為1/261.1=3.83ms,輸出數(shù)據(jù)的時間間隔為3.83ms/32=0.12ms.定時時間可以由8253配合8255來實現(xiàn)。按下某鍵后發(fā)音時間的長短可以由發(fā)出的正弦波的個數(shù)多少來控制。本程序中設(shè)置默認長度為60個正弦波。編寫源程序,進行調(diào)試,包括:簡單電子琴主程序結(jié)合實驗指導(dǎo)書的兩程序,將其分為若干個子程序,實現(xiàn)簡單的播放和顯示音階的功能。發(fā)音子程序本子程序?qū)崿F(xiàn)放音功能。首先從鍵盤讀出鍵碼,判斷,如果鍵碼不是1-8(9除外)即仍然處于音階輸入準備狀態(tài),如果是,即求出相應(yīng)的時間常數(shù)的序號,取60次32個正弦波數(shù)據(jù),播放32個數(shù)據(jù),組成一個正弦波。播放60次后,然后判斷是否有按鍵,如果有就進入死循環(huán),直到下次按鍵為止。放歌子程序本子程序?qū)崿F(xiàn)播放預(yù)置在程序中的歌曲,并加上一個選擇子程序段,可通過選擇進入不同曲目,進而實現(xiàn)播放不同的歌曲,播放時直接調(diào)用放音子程序Led顯示子程序本程序?qū)崿F(xiàn)從鍵盤輸入一位十進制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。顯示廣告版子程序本子程序?qū)崿F(xiàn)在廣告板上在輸入不同音階時有我們自行設(shè)計的圖案顯示。輸入不同圖案相關(guān)的代碼,然后調(diào)用圖案顯示判斷程序段。對其進行判斷,然后進入圖案顯示代碼,最終顯示不同的圖案。源程序整體程序開始,顯示提示信息,接著調(diào)用發(fā)音子程序,實現(xiàn)發(fā)音和顯示。接著對9鍵進行判斷、當9按下時,調(diào)用放音子程序。然后iujinru選擇,選擇喜歡的歌曲并進行播放。當檢測到esc時,退出。當每一個都檢測不到時,退回到調(diào)用發(fā)音子程序,繼續(xù)發(fā)音顯示。從而實現(xiàn)有擴展功能的電子琴。模塊連接,形成完整的程序編寫程序文檔4.流程圖以下用主程序與子程序配合流程圖其進行說明。(1)主程序流程圖開始開始調(diào)用發(fā)音子程序使用鍵盤輸入是否1到8鍵放音子程序NY退出是esc鍵是否9鍵NY調(diào)用廣告版子程序Led子程序Y(2)發(fā)音子程序流程圖(3)led顯示子程序(4)顯示廣告板子程序(5)放音子程序開始開始調(diào)用發(fā)音子程序用鍵盤輸入喜歡歌曲的序號(1-3)是否1到3鍵放音子程序YNY退出是esc鍵是否9鍵Y調(diào)用廣告版子程序Led子程序NN四、源程序STACKSEGMENTPARASTACK'STACK'DB100DUP(0)STACKENDSDATASEGMENTIOPORT EQU0C400H-0280HIO8255A EQUIOPORT+288HIO8255C EQUIOPORT+28AHIO8255B EQUIOPORT+28BHIO8253A EQUIOPORT+280HIO8253B EQUIOPORT+283HIO0832A EQUIOPORT+290HPROT EQU0C400H-280HPROTH EQU PROT+298HPROTLR EQUPROT+2A0HPROTLY EQU PROT+2A8HDATA1DB80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDHDB0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96HDB80H,66H,4EH,38H,25H,15H,09H,04HDB00H,04H,09H,15H,25H,38H,4EH,66H ;正弦波數(shù)據(jù)LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHMESG1DB0DH,0AH,'INPUTANUM(1--8=PLAYPIANO,9=PLAYMUSIC,ESC=EXIT):',0DH,0AH,'$'MESG2DB0DH,0AH,'PLEASECHOOSETHEMUSICYOULIKE(1-AAA,2-BBB):',0DH,0AH,'$'TIMEDB120,110,100,90,81,72,55,42 ;發(fā)不同音時8253的計數(shù)器初值NUMDB? ;NUM為8253計數(shù)器初值的序號--MESSDB'STRIKEANYKEY,RETURNTODOS!',0AH,0DH,'$'MIN1DB00H,01H,02H,03H,04H,05H,06H,07HCOUNTDB0JNUMDB?;JNUM用來存儲輸入數(shù)字MUSICDB30H,31H,31H,35H,35H,36H,36H,35H,30H,30H,34H,34H,33H,33H,32H,32H,31H,100DUP(30H);,35H,35H,34H,34H,33H,33H,32H,35H,35H,34H,34H,33H,33H,32H,31H,31H,35H,35H,36H,36H,35H,34H,34H,33H,33H,3;2H,32H,31H,QMUSICDB?DOWNDB31H,32H,33H,34H,35H,36H,37H,38H,38H,37H,36H,35H,34H,33H,32H,31H,100DUP(30H)PPDB?TTDB?LMUSICEQU45BUFF1DB00H,00H,18H,3CH,3CH,18H,00H,00HBUFF2DB00H,1EH,0AH,46H,62H,50H,78H,00HBUFF3DB00H,06H,06H,60H,60H,06H,06H,00HBUFF4DB24H,66H,0E7H,00H,00H,0E7H,66H,24HBUFF5DB42H,0E7H,42H,18H,18H,42H,0E7H,42HBUFF6DB66H,24H,81H,0C3H,0C3H,81H,24H,66HBUFF7DB24H,66H,00H,0DBH,0DBH,00H,66H,24HBUFF8DB0CBH,99H,10H,0C6H,63H,08H,99H,0D3HDATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVTT,1MOVAX,DATA MOVDS,AX MOVDX,IO8255B;使8255的A口為輸出方式 MOVAX,92H OUTDX,ALMOVQMUSIC,0JMPSSSZERO:MOVQMUSIC,0SSS:CMPQMUSIC,LMUSICJEZEROCMPQMUSIC,0JESSS4JMPSSS3SSS4:MOVDX,OFFSETMESG1MOVAH,9 INT21H;顯示提示信息MOVAH,7 INT21H;從鍵盤接收字符,不回顯SSS3:CMPAL,39HJEPLAY0CMPQMUSIC,0JEOOJMPPLAYOO: CMPAL,1BH JEEXIT;若為ESC鍵,則轉(zhuǎn)EXITCMPAL,30HJESOFTDLY;MOVDI,OFFESETRECORD;MOV[DI],AL;INCDI CMPAL,31H JLSSS CMPAL,38H JGSSS;若不在'1'-'8'之間轉(zhuǎn)SSSMOVJNUM,AL SUBAL,31H MOVNUM,AL;求出相應(yīng)的時間常數(shù)的序號 MOVCX,60;取60次32個正弦波數(shù)據(jù)SSS2:MOVAL,JNUM SUBAL,30H;將所得字符的ASCII碼減30H MOVBX,OFFSETLED;BX為數(shù)碼表的起始地址 XLAT;求出相應(yīng)的段碼 MOVDX,IO8255C;從8255的C口輸出 OUTDX,ALDDD: MOVSI,0LLL: MOVAL,DATA1[SI];取正弦波數(shù)據(jù) MOVDX,IO0832A OUTDX,AL;放音 CALLDELAY;調(diào)延時子程序 INCSI CMPSI,32;是否取完32個數(shù)據(jù) JLLLL;若沒有,則繼續(xù) LOOPDDD;總循環(huán)次數(shù)60是否完,沒有,則繼續(xù)MOVCX,0002HCALLNIAN;------------------------CALLNIAN;CALLNIAN JMPSSS;轉(zhuǎn)SSSEXIT: MOVAH,4CH INT21HPLAY0: CMPTT,1JETT1MOVDX,OFFSETMESG2 MOVAH,9 INT21H;顯示子菜單MOVAH,7 INT21H;輸入子菜單命令MOVPP,ALPLAY:MOVAL,QMUSICCMPPP,32HJEPLAY2CMPPP,31HJNEPLAY0MOVBX,OFFSETMUSICPLAY3:XLATMOVCL,QMUSICADDCL,01HMOVQMUSIC,CLJMPOOTT1:MOVTT,0MOVPP,32HPLAY2:MOVBX,OFFSETDOWNJMPPLAY3SOFTDLY:MOVBL,10DELAY4:MOVCX,0FFFFHWAIT3:LOOPWAIT3DECBLJNZDELAY4JMPSSSDELAYPROCNEAR;延時子程序CCC1: MOVBX,OFFSETTIME MOVDX,IO8253B;置8253通道0為方式0工作 MOVAL,10H OUTDX,AL MOVAL,NUM;取相應(yīng)的時間常數(shù) XLAT MOVDX,IO8253A OUTDX,AL;向8253通道0輸出KKK: MOVDX,IO8255A INAL,DX;從8255A口讀一字節(jié) TESTAL,01;判PA0口是否為1 JZKKK;若不為1,則轉(zhuǎn)KKK RET;子程序返回DELAYENDPNIANPROCNEARSTART2:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESSAGN: MOV CX,80HD2: MOV SI,OFFSETMIN1 MOV AH,01H PUSH CX MOV CX,0008HNEXT:MOVAL,JNUMCALLBUFF MOV DX,PROTH OUT DX,AL MOV AL,AH MOV DX,PROTLR OUT DX,AL;顯示第一行紅 SHL AH,01 INC SI PUSHCX MOV CX,0FFFFHDELAY2:LOOPDELAY2;延時 POP CX LOOPNEXT POP CX CALLDELAY LOOPD2 MOV AL,00 MOV DX,PROTLR OUT DX,ALCMPQMUSIC,0JEC1RETC1:MOV AH,01 INT 16HJNZBACKAGN1: MOV CX,80H;AGN1為顯示黃色D1:MOV SI,OFFSETMIN1 MOV AH,01 PUSHCX MOV CX,0008HNEXT1:MOVAL,JNUMCALLBUFF MOV DX,PROTH OUT DX,AL MOV AL,AH MOV DX,PROTLY OUT DX,AL SHL AH,01 INC SI PUSH CX MOV CX,0FFFFHDELAY1:LOOPDELAY1 MOV CX,0FFFFHDELAY3:LOOPDELAY3 POP CX LOOPNEXT1 POP CX CALLDELAY LOOP D1 MOV AL,00 MOV DX,PROTLY OUT DX,ALCMPQMUSIC,0JEC2RETC2:MOV AH,01 INT 16HJNZBACKJMPAGNBACK:RET;----------------------------------------------------------------DELAY0 PROC NEAR;延遲子程序 PUSH CX MOV CX,0FFFFHCCC: LOOP CCC POP CX RETDELAY0 ENDP;---------------------------------------------------------------------;--------------------------------------------------------------------BUFFPROCNEAR;代碼選擇判斷子程序JUDGE1:CMPAL,31HJEL1CMPAL,32HJEL2CMPAL,33HJEL3CMPAL,34HJEL4CMPAL,35HJEL5CMPAL,36HJEL6CMPAL,37HJEL7CMPAL,38HJEL8;JMPA2L1:MOV AL,[SI] MOV BX,OFFSETBUFF1 XLATRET;得到第一行碼L2:MOV AL,[SI] MOV BX,OFFSETBUFF2 XLATRETL3:MOV AL,[SI] MOV BX,OFFSETBUFF3 XLATRETL4:MOV AL,[SI] MOV BX,OFFSETBUFF4 XLATRETL5:MOV AL,[SI] MOV BX,OFFSETBUFF5 XLATRETL6:MOV AL,[SI] MOV BX,OFFSETBUFF6 XLATRETL7:MOV AL,[SI] MOV BX,OFFSETBUFF7 XLATRETL8:MOV AL,[SI] MOV BX,OFFSETBUFF8 XLATRETBUFFENDPNIANENDPCODEENDSENDSTART五、調(diào)試情況及其分析源程序完成后,進行子程序與程序的調(diào)試工作,程序調(diào)試過程、完成情況及其分析按以下順序進行:主程序簡單電子琴功能主程序要求完成的功能有:電子琴簡單功能實現(xiàn)及將音階用數(shù)碼管顯示,主程序由電子琴實驗程序有機組成,兩個程序簡單拼湊在一齊是不能實現(xiàn)的。經(jīng)過實際調(diào)試和修改,將原電子琴程序改為2個子程序:(實現(xiàn)播放音階)和(實現(xiàn)播放音階時延時);并加入了數(shù)碼管顯示的子程序以及廣告版顯示圖案程序。然后播放預(yù)存歌曲由放歌子程序完成。調(diào)試后,主程序能實現(xiàn)課程設(shè)計要求的功能,并且界面清晰、操作容易。子程序放歌(已預(yù)存)功能此功能將一首預(yù)存的歌曲播放,此功能可以調(diào)用放音的子程序?qū)崿F(xiàn),唯一不同就是根據(jù)鍵盤的輸入控制,選擇播放的緩存區(qū)是預(yù)存歌緩存區(qū)。然后通過鍵盤選擇所要播放的歌曲曲目源程序整體功能將各子程序調(diào)試完成后,進行最后的源程序整體功能調(diào)試。調(diào)試過程中我們注意到:程序模塊化(功能分為若干子程序)能使源程序清晰,調(diào)試簡單,因此在調(diào)試中我們還將源程序進一步模塊化。注意子程序之間的通信方式,調(diào)用子程序前,使用push/pop保護了一些子程序會用到的主程序同時會用到的寄存器,保證調(diào)用之后主程序的順利執(zhí)行。在調(diào)試過程中出現(xiàn)的一些小問題,我們都根據(jù)以上3點總結(jié)出的經(jīng)驗作為原則進行調(diào)試,調(diào)試過程十

溫馨提示

  • 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

提交評論