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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-.z.微機原理課程設計電子琴設計設計內容編寫一實現電子琴的程序,并實現假設干擴展功能。根本功能:用鍵盤輸入對應的七個音階,通過實驗箱的喇叭發(fā)出聲音,并通過七段數碼管顯示輸入音階;擴展功能:1、在程序中可預設多首曲目,按一鍵可以進入預設子菜單,對要播放的曲目進展選擇,并實現播放該曲目。2、程序運行時有友好的用戶介面。3.當彈奏不同音階時,雙色點陣LED顯示器顯示不同的圖案二、元件與儀器1.計時器82532.并行控制器8255A3.實驗臺三、設計原理、思路及流程圖設計原理〔1〕對于一個特定的D/A轉換接口電路,CPU執(zhí)行一條輸出指令將數據送入D/A,即可在其輸出端得到一定的電壓輸出。給D/A轉換器輸入按正弦規(guī)律變化的數據,在其輸出端即可產生正弦波。對于音樂,每個音階都有確定的頻率。各音階標稱頻率值:〔2〕產生一個正弦波的數據可取32個〔小于亦可〕,不同頻率的區(qū)別,可通過調節(jié)向D/A轉換器輸出數據的時間間隔,例如:發(fā)"1"頻率為261。1HZ,周期為1/261.1=3.83ms,輸出數據的時間間隔為3.83ms/32=0.12ms.定時時間可以由8253配合8255來實現。按下*鍵后發(fā)音時間的長短可以由發(fā)出的正弦波的個數多少來控制。本程序中設置默認長度為60個正弦波。〔3〕實驗臺上的七段數碼管為共陰型,段碼采用同相驅動,輸入端加高電平,選中的數碼管亮,位碼加反相驅動器,位碼輸入端高電平選中。(4)點陣LED顯示器是將許多LED類似矩陣一樣排列在一起組成的顯示器件,雙色點陣LED是在每一個點陣的位置上有紅綠或紅黃或紅白兩種不同顏色的發(fā)光二極管。當微機輸出的控制信號使得點陣中有些LED發(fā)光,有些不發(fā)光,即可顯示出特定的信息,包括漢字、圖形等。車站廣場由微機控制的點陣LED大屏幕廣告宣傳牌隨處可見。(5)實驗儀上設有一個共陽極8×8點陣的紅黃兩色LED顯示器,其點陣構造如下圖。該點陣對外引出24條線,其中8條行線,8條紅色列線,8條黃色列線。假設使*一種顏色、*一個LED發(fā)光,只要將與其相連的行線加高電平,列線加低電平即可。例如欲顯示漢字"年〞,采用逐列循環(huán)發(fā)光。首先由"年〞的點陣輪廓,確定點陣代碼〔如下圖〕根據"年〞的點陣代碼,確定逐列循環(huán)發(fā)光的順序如下:①行代碼輸出44H;紅色列代碼輸01H;第一列2個紅色LED發(fā)光。②行代碼輸出54H;紅色列代碼輸02H;第二列3個紅色LED發(fā)光。③行代碼輸出54H;紅色列代碼輸04H;第三列3個紅色LED發(fā)光。④行代碼輸出7FH;紅色列代碼輸08H;第四列7個紅色LED發(fā)光。⑤行代碼輸出54H;紅色列代碼輸10H;第五列3個紅色LED發(fā)光。⑥行代碼輸出DCH;紅色列代碼輸20H;第六列5個紅色LED發(fā)光。⑦行代碼輸出44H;紅色列代碼輸40H;第七列2個紅色LED發(fā)光。⑧行代碼輸出24H;紅色列代碼輸80H;第八列2個紅色LED發(fā)光。電路連接圖如下:(1)8253和8255連接如下〔2〕.實驗儀上的點陣LED及驅動電路的行代碼、紅色列代碼、黃色列代碼各用一片74LS273鎖存。行代碼輸出的數據通過行驅動器7407加至點陣的8條行線上,紅和黃列代碼的輸出數據通過驅動器DS75452反相后分別加至紅和黃的列線上。行鎖存器片選信號為CS1,紅色列鎖存器片選信號為CS2,黃色列鎖存器片選信號為CS3。分別接上298h,2a0h,2a8h.3.設計思路在本次課程設計中,根據復雜程序設計思想——模塊化程序設計,分析和確定程序總體設計目標:電子琴根本功能及局部擴展功能后,將總體目標劃分為假設干模塊〔子程序,具體可見下〕。程序設計的思路按以下順序進展:分析與確定程序總體設計目標將總體目標劃分為假設干模塊定義每個模塊的具體任務,明確它與其他模塊間的通信方式編寫源程序,進展調試,包括:簡單電子琴主程序結合實驗指導書的兩程序,將其分為假設干個子程序,實現簡單的播放和顯示音階的功能。發(fā)音子程序本子程序實現放音功能。首先從鍵盤讀出鍵碼,判斷,如果鍵碼不是1-8〔9除外〕即仍然處于音階輸入準備狀態(tài),如果是,即求出相應的時間常數的序號,取60次32個正弦波數據,播放32個數據,組成一個正弦波。播放60次后,然后判斷是否有按鍵,如果有就進入死循環(huán),直到下次按鍵為止。放歌子程序本子程序實現播放預置在程序中的歌曲,并加上一個選擇子程序段,可通過選擇進入不同曲目,進而實現播放不同的歌曲,播放時直接調用放音子程序Led顯示子程序本程序實現從鍵盤輸入一位十進制數字〔0~9〕,在七段數碼管上顯示出來。顯示廣告版子程序本子程序實現在廣告板上在輸入不同音階時有我們自行設計的圖案顯示。輸入不同圖案相關的代碼,然后調用圖案顯示判斷程序段。對其進展判斷,然后進入圖案顯示代碼,最終顯示不同的圖案。源程序整體程序開場,顯示提示信息,接著調用發(fā)音子程序,實現發(fā)音和顯示。接著對9鍵進展判斷、當9按下時,調用放音子程序。然后iujinru選擇,選擇喜歡的歌曲并進展播放。當檢測到esc時,退出。當每一個都檢測不到時,退回到調用發(fā)音子程序,繼續(xù)發(fā)音顯示。從而實現有擴展功能的電子琴。模塊連接,形成完整的程序編寫程序文檔4.流程圖以下用主程序與子程序配合流程圖其進展說明。〔1〕主程序流程圖開場開場調用發(fā)音子程序使用鍵盤輸入是否1到8鍵放音子程序NY退出是esc鍵是否9鍵NY調用廣告版子程序Led子程序Y〔2〕發(fā)音子程序流程圖〔3〕led顯示子程序〔4〕顯示廣告板子程序〔5〕放音子程序開場開場調用發(fā)音子程序用鍵盤輸入喜歡歌曲的序號〔1-3〕是否1到3鍵放音子程序YNY退出是esc鍵是否9鍵Y調用廣告版子程序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 ;正弦波數據LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHMESG1DB0DH,0AH,'INPUTANUM(1--8=PLAYPIANO,9=PLAYMUSIC,ESC=E*IT):',0DH,0AH,'$'MESG2DB0DH,0AH,'PLEASECHOOSETHEMUSICYOULIKE(1-AAA,2-BBB):',0DH,0AH,'$'TIMEDB120,110,100,90,81,72,55,42 ;發(fā)不同音時8253的計數器初值NUMDB" ;NUM為8253計數器初值的序號--MESSDB'STRIKEANYKEY,RETURNTODOS!',0AH,0DH,'$'MIN1DB00H,01H,02H,03H,04H,05H,06H,07HCOUNTDB0JNUMDB";JNUM用來存儲輸入數字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,1MOVA*,DATA MOVDS,A* MOVD*,IO8255B;使8255的A口為輸出方式 MOVA*,92H OUTD*,ALMOVQMUSIC,0JMPSSSZERO:MOVQMUSIC,0SSS:CMPQMUSIC,LMUSICJEZEROCMPQMUSIC,0JESSS4JMPSSS3SSS4:MOVD*,OFFSETMESG1MOVAH,9 INT21H;顯示提示信息MOVAH,7 INT21H;從鍵盤接收字符,不回顯SSS3:CMPAL,39HJEPLAY0CMPQMUSIC,0JEOOJMPPLAYOO: CMPAL,1BH JEE*IT;假設為ESC鍵,則轉E*ITCMPAL,30HJESOFTDLY;MOVDI,OFFESETRECORD;MOV[DI],AL;INCDI CMPAL,31H JLSSS CMPAL,38H JGSSS;假設不在'1'-'8'之間轉SSSMOVJNUM,AL SUBAL,31H MOVNUM,AL;求出相應的時間常數的序號 MOVC*,60;取60次32個正弦波數據SSS2:MOVAL,JNUM SUBAL,30H;將所得字符的ASCII碼減30H MOVB*,OFFSETLED;B*為數碼表的起始地址*LAT;求出相應的段碼 MOVD*,IO8255C;從8255的C口輸出 OUTD*,ALDDD: MOVSI,0LLL: MOVAL,DATA1[SI];取正弦波數據MOVD*,IO0832A OUTD*,AL;放音 CALLDELAY;調延時子程序 INCSI CMPSI,32;是否取完32個數據 JLLLL;假設沒有,則繼續(xù) LOOPDDD;總循環(huán)次數60是否完,沒有,則繼續(xù)MOVC*,0002HCALLNIAN;------------------------CALLNIAN;CALLNIAN JMPSSS;轉SSSE*IT: MOVAH,4CH INT21HPLAY0: CMPTT,1JETT1MOVD*,OFFSETMESG2 MOVAH,9 INT21H;顯示子菜單MOVAH,7 INT21H;輸入子菜單命令MOVPP,ALPLAY:MOVAL,QMUSICCMPPP,32HJEPLAY2CMPPP,31HJNEPLAY0MOVB*,OFFSETMUSICPLAY3:*LATMOVCL,QMUSICADDCL,01HMOVQMUSIC,CLJMPOOTT1:MOVTT,0MOVPP,32HPLAY2:MOVB*,OFFSETDOWNJMPPLAY3SOFTDLY:MOVBL,10DELAY4:MOVC*,0FFFFHWAIT3:LOOPWAIT3DECBLJNZDELAY4JMPSSSDELAYPROCNEAR;延時子程序CCC1: MOVB*,OFFSETTIME MOVD*,IO8253B;置8253通道0為方式0工作 MOVAL,10H OUTD*,AL MOVAL,NUM;取相應的時間常數 *LAT MOVD*,IO8253A OUTD*,AL;向8253通道0輸出KKK: MOVD*,IO8255A INAL,D*;從8255A口讀一字節(jié) TESTAL,01;判PA0口是否為1 JZKKK;假設不為1,則轉KKK RET;子程序返回DELAYENDPNIANPROCNEARSTART2:MOVA*,DATAMOVDS,A*MOVD*,OFFSETMESSAGN: MOV C*,80HD2: MOV SI,OFFSETMIN1 MOV AH,01H PUSH C* MOV C*,0008HNE*T:MOVAL,JNUMCALLBUFF MOV D*,PROTH OUT D*,AL MOV AL,AH MOV D*,PROTLR OUT D*,AL;顯示第一行紅 SHL AH,01 INC SI PUSHC* MOV C*,0FFFFHDELAY2:LOOPDELAY2;延時 POP C* LOOPNE*T POP C* CALLDELAY LOOPD2 MOV AL,00 MOV D*,PROTLR OUT D*,ALCMPQMUSIC,0JEC1RETC1:MOV AH,01 INT 16HJNZBACKAGN1: MOV C*,80H;AGN1為顯示黃色D1:MOV SI,OFFSETMIN1 MOV AH,01 PUSHC* MOV C*,0008HNE*T1:MOVAL,JNUMCALLBUFF MOV D*,PROTH OUT D*,AL MOV AL,AH MOV D*,PROTLY OUT D*,AL SHL AH,01 INC SI PUSH C* MOV C*,0FFFFHDELAY1:LOOPDELAY1 MOV C*,0FFFFHDELAY3:LOOPDELAY3 POP C* LOOPNE*T1 POP C* CALLDELAY LOOP D1 MOV AL,00 MOV D*,PROTLY OUT D*,ALCMPQMUSIC,0JEC2RETC2:MOV AH,01 INT 16HJNZBACKJMPAGNBACK:RET;----------------------------------------------------------------DELAY0 PROC NEAR;延遲子程序 PUSH C* MOV C*,0FFFFHCCC: LOOP CCC POP C* RETDELAY0 ENDP;---------------------------------------------------------------------;--------------------------------------------------------------------BUFFPROCNEAR;代碼選擇判斷子程序JUDGE1:CMPAL,31HJEL1CMPAL,32HJEL2CMPAL,33HJEL3CMPAL,34HJEL4CMPAL,35HJEL5CMPAL,36HJEL6CMPAL,37HJEL7CMPAL,38HJEL8;JMPA2L1:MOV AL,[SI] MOV B*,OFFSETBUFF1 *LATRET;得到第一行碼L2:MOV AL,[SI] MOV B*,OFFSETBUFF2 *LATRETL3:MOV AL,[SI] MOV B*,OFFSETBUFF3 *LATRETL4:MOV AL,[SI] MOV B*,OFFSETBUFF4 *LATRETL5:MOV AL,[SI] MOV B*,OFFSETBUFF5 *LATRETL6:MOV AL,[SI] MOV B*,OFFSETBUFF6 *LATRETL7:MOV AL,[SI] MOV B*,OFFSETBUFF7 *LATRETL8:MOV AL,[SI] MOV B*,OFFSETBUFF8 *LATRETBUFFENDPNIANENDPCODEENDSENDSTART五、調試情況及其分析源程序完成后,進展子程序與程序的調試工作,程序調試過程、完成情況及其分析按以下順序進展:主程序簡單電子琴功能主程序要求完成的功能有:電子琴簡單功能實現及將音階用數碼管顯示,主程序由電子琴實驗程序有機組成,兩個程序簡單拼湊在一齊是不能實現的。經過實際調試和修改,將原電子琴程序改為2個子程序:〔實現播放音階〕和〔實現播放音階時延時〕;并參加了數碼管顯示的子程序以及廣告版顯示圖案程序。然后播放預存歌曲由放歌子程序完成。調試后,主程序能實現課程設計要求的功能,并且界面清晰、操作容易。子程序放歌〔已預存〕功能此功能將一首預存的歌曲播放,此功能可以調用放音的子程序實現,唯一不同就是根據鍵盤的輸入控制,選擇播放的緩存區(qū)是預存歌緩存區(qū)。然后通過鍵盤選擇所要播放的歌曲曲目源程序整體功能將各子程序調試完成后,進展最后的源程序整體功能調試。調試過程中我們注意到:程序模塊化〔功能分為假設干子程序〕能使源程序清晰,調試簡單,因此在調試中我們還將源程序進一步模塊化。注意子程序之間的通信方式,調

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論