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

下載本文檔

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

文檔簡介

1、微機實驗及課程設(shè)計報告 微機實驗及課程設(shè)計課程設(shè)計報告電子琴姓 名: * 學(xué) 號: * 專 業(yè): * 實 驗 室: 電工電子實驗中心 103 設(shè)計時間: 2009年 5 月 30日 2009年 6 月 4日評定成績: 審閱教師: 目 錄一實驗簡介3二基本設(shè)計思想3三程序流程和程序?qū)崿F(xiàn)3四測試方案和測試結(jié)果10五分析與總結(jié)10一實驗簡介 目的: 檢驗和提高我在原理與接口綜合應(yīng)用方面分析問題與解決問題的能力,同時也給我提供更多、更好的訓(xùn)練機會。根據(jù)設(shè)計要求,盡可能完成設(shè)計要求的功能,選擇最合適的器件,構(gòu)成最有效的硬件電路來完成。 基本實驗要求:構(gòu)造一模擬/數(shù)字電子琴、選擇利用實驗儀揚聲器/PC機內(nèi)

2、8253驅(qū)動內(nèi)揚聲器與鍵盤1、2、3、4、5、6、7、8設(shè)計一個電子琴,通過按數(shù)字鍵響相應(yīng)的樂符1、2、3、4、5、6、7、i,使能演奏簡單的樂曲。按18數(shù)字鍵同時點亮相應(yīng)的8個LED燈,使具有聲、光效果;2、 利用實驗儀DAC和喇叭,軟件控制上述功能。選擇機內(nèi)還是實驗儀由開關(guān)設(shè)置,課隨時切換;3、在8*8點陣上表示音節(jié)高低;4、精確顯示從第一個鍵按下后的時間(單位秒,要求精確到0.1秒,顯示到秒)。 進(jìn)一步設(shè)計要求:1.、能準(zhǔn)確記錄開始演奏到結(jié)束演奏的時間,在八段碼上顯示;2、 數(shù)字、模擬合奏,能同時指示音階;3、自動錄音,并具有回放功能(分兩種水平、難易不等、即記錄按鍵,同時記錄按鍵和時間

3、。 實現(xiàn)情況:實現(xiàn)基本實驗要求的13。二基本設(shè)計思想1、先分別設(shè)計機內(nèi)電子琴和實驗儀電子琴。機內(nèi)電子琴參照實驗五8253計數(shù)器/定時器的選做與探索中使用PC機內(nèi)8253驅(qū)動聲音接口;實驗儀電子琴參照實驗中演示實驗的電子琴流程圖;2、再把兩者結(jié)合起來,用一個高低電平作開關(guān)控制是機內(nèi)還是實驗儀,可通過8255A口輸入,判斷10(二進(jìn)制)則實驗儀DAC,00則機內(nèi)喇叭;3、點陣顯示。根據(jù)輸入的數(shù)字判斷應(yīng)顯示點陣的哪一行。具體可先把點陣的8列全選通,輸入為1某個數(shù)字時,判斷顯示相應(yīng)的行;、LED燈顯示。同樣,根據(jù)輸入的數(shù)字判斷應(yīng)顯示哪一個LED燈。具體可設(shè)置8255B口為輸出,根據(jù)輸入的數(shù)字,輸出控制

4、LED燈相應(yīng)燈亮。三程序流程和程序?qū)崿F(xiàn)1、機內(nèi)電子琴開始流程圖:鍵盤讀入一個字符是ESC鍵嗎?YNN返回DOS是數(shù)字18鍵嗎?Y求出音階值保存賦相應(yīng)頻率值延時程序:dseg segment freq dw 262,294,330,349,392,440,494,523 ;揚聲器發(fā)聲各頻率值msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$tim dw 400num db ?dseg endssseg segment stack dw 256 dup(?)sseg endscseg segment assume cs:cseg,ds:dsegstart: mo

5、v ax,dseg mov ds,ax mov dx,offset msg mov ah,9 int 21h ;顯示提示信息sss: mov ah,7 int 21h ;等待從鍵盤接收字符,不回顯al=asc碼 cmp al,1bh je exit;若為ESC鍵,則轉(zhuǎn)EXIT退出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之間轉(zhuǎn)sss sub al,31h mov num,al ;num求出相應(yīng)的時間常數(shù)的序號jinei: mov al,num add al,al mov ah,00h mov si,axagain: mov

6、 di,freqsi mov bx,tim call gen jmp sssexit: mov ah,4ch int 21hgen proc near mov al,0b6h ;設(shè)置8253通道2方式3二進(jìn)制計數(shù) out 43h,al mov dx,12h mov ax,12928; DX AX=896*533h=18*65536+12928=1.19M div di out 42h,al ;8253通道2口設(shè)置初值 mov al,ah out 42h,al in al,61h ;讀8255PB口 mov ah,al or al,3 out 61h,alwait1: mov cx,0hdela

7、y3: mov ax,10 ;延時子程序delay2: nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp cseg endsend start2、實驗儀電子琴流程圖:實驗電路:程序:data segmentioportequ 0d400h-0280hio8253aequ ioport+280hio8253bequ ioport+283hio8255aequ ioport+288hio8255bequ ioport+28bhio0832aequ ioport+290hdata1

8、db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波數(shù)據(jù)time db 120,106,94,89,79,70,63,59;發(fā)不同音時8253的計數(shù)器初值msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$num db ?;num為8253計數(shù)器初值的序號data endscode segment ass

9、ume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset msgmov ah,9int 21h ;顯示提示信息sss:mov ah,7int 21h ;從鍵盤接收字符,不回顯cmp al,1bhje exit ;若為ESC鍵,則轉(zhuǎn)EXITcmp al,31hjl ssscmp al,38hjg sss ;若不在1-8之間轉(zhuǎn)ssssub al,31hmov num,al ;求出相應(yīng)的時間常數(shù)的序號mov cx,60 ;取60次32個正弦波數(shù)據(jù)ddd:mov si,0lll:mov al,data1si ;取正弦波數(shù)據(jù)mov dx,io0

10、832aout dx,al ;放音call delay ;調(diào)延時子程序inc sicmp si,32 ;是否取完32個數(shù)據(jù)jl lll ;若沒有,則繼續(xù)loop ddd ;總循環(huán)次數(shù)60是否完,沒有,則繼續(xù)jmp sssexit:mov ah,4chint 21hdelay proc near ;延時子程序ccc:mov bx,offset timemov dx,io8253b ;置8253通道0為方式0工作mov al,10hout dx,almov dx,io8255b ;設(shè)8255A口輸入mov al,9bhout dx,almov al,num ;取相應(yīng)的時間常數(shù)xlatmov dx,

11、io8253aout dx,al ;向8253通道0輸出kkk:mov dx,io8255ain al,dx ;從8255A口讀一字節(jié)test al,01 ;判PA0口是否為1jz kkk ;若不為1,則轉(zhuǎn)KKKret ;子程序返回delay endpcode endsend start3.電子琴總設(shè)計流程圖:開始鍵盤讀入一個字符Y是ESC鍵嗎?NN是數(shù)字18鍵嗎?返回DOSY點亮點陣Y點亮LED燈N是機內(nèi)嗎?60個正弦波完了嗎?YN求出音階值保存正弦波個數(shù)計數(shù)器賦值60每個正弦波數(shù)據(jù)個數(shù)計數(shù)器賦初值取正弦波數(shù)據(jù)送DAC0832求出音階值保存Y賦相應(yīng)頻率值一個正弦波完了嗎?N延時延時電路圖:

12、8個LED燈PB7PB0 PA0PA1 CSCLK0GATE0 OUT0CS 8253 82551MHZ+5V DAC0832CS280H K0開關(guān) 288H 290H程序:data segmentioportequ 0c800h-0280hio8253aequ ioport+280h;8253通道0地址io8253bequ ioport+283h;8253控制字寄存器地址io8255aequ ioport+288h ;8255A口地址io8255bequ ioport+289h ;8255B口地址io8255dequ ioport+28bh;8255控制字寄存器地址io0832aequ io

13、port+290hproth equ ioport+2a8h ;點陣行選的地址protlr equ ioport+2b0h ;點陣列選的地址data1 db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波數(shù)據(jù)time db 120,106,94,89,79,70,63,59;發(fā)不同音時8253的計數(shù)器初值banquan db 0dh,0a

14、hdb*,0dh,0ahdb* *,0dh,0ahdb* WELCOME TO USE dianziqin *,0dh,0ahdb* THIS PROGRAMME IS DESIGHED BY *,0DH,0AHdb* zhouqiuping 61007204 *,0DH,0AHdb* *,0dh,0ahdb*,0dh,0ah db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$num db ? ;num為8253計數(shù)器初值的序號freq dw 262,294,330,349,392,440,494,523 ;揚聲器發(fā)聲各頻率值tim dw 400data endss

15、tack segment stack dw 256 dup(?)stack endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset banquan ; 版權(quán)顯示 mov ah,9 int 21h ;顯示提示信息sss: mov ah,7 int 21h ;等待從鍵盤接收字符,不回顯al=asc碼 cmp al,1bh je exit ;若為ESC鍵,則轉(zhuǎn)EXIT推出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之間轉(zhuǎn)ss

16、s sub al,31h mov num,al ;num求出相應(yīng)的時間常數(shù)的序號dianzhen: mov al,0ffh ;點陣板的列全部選通 mov dx,proth out dx,al mov al,00000001 :點陣的行賦初值 shl al,num ;根據(jù)輸入的數(shù)字,左移相應(yīng)位數(shù),即點陣亮相應(yīng)行 mov num,al ;如輸入3,則num為2,左移兩位,第三行亮 mov dx,prothl out dx,alled: mov dx,io8255d mov al,99h ;設(shè)置8255A口入B口出 mov dx,io8255b out dx,num ;根據(jù)移位后的num點亮相應(yīng)le

17、d燈kaiguan: mov dx,io8255a ;判斷機內(nèi)機外 in al,dx ;從8255B口讀一字節(jié) test al,10b ;判斷PA0口是否為10(二進(jìn)制) jz jiwai ;是的話轉(zhuǎn)實驗儀 jmp nei ;否則轉(zhuǎn)機內(nèi);-jiwaijiwai:mov cx,60 ;取60次32個正弦波數(shù)據(jù)ddd:mov si,0lll:mov al,data1si ;取正弦波數(shù)據(jù)mov dx,io0832aout dx,al ;放音call delay ;調(diào)延時子程序inc sicmp si,32 ;是否取完32個數(shù)據(jù)jl lll ;若沒有,則繼續(xù)loop ddd ;總循環(huán)次數(shù)60是否完,沒

18、有,則繼續(xù)jmp sssexit: mov ah,4chint 21hdelay proc near ;延時子程序ccc: mov bx,offset timemov dx,io8253b ;置8253通道0為方式0工作mov al,10hout dx,almov al,num ;取相應(yīng)的時間常數(shù)xlatmov dx,io8253aout dx,al ;向8253通道0輸出kkk:mov dx,io8255ain al,dx ;從8255A口讀一字節(jié)test al,01 ;判PA0口是否為1jz kkk ;若不為1,則轉(zhuǎn)KKKret ;子程序返回delay endp;-機內(nèi)部分jinei: m

19、ov al,num add al,al mov ah,00h mov si,axagain: mov di,freqsi mov bx,tim call gen jmp sss gen proc near mov al,0b6h ;設(shè)置8253通道2方式3二進(jìn)制計數(shù) out 43h,al mov dx,12h mov ax,12928 ; DX AX=896*533h=18*65536+12928=1.19M div di out 42h,al ;8253通道2口設(shè)置初值 mov al,ah out 42h,al in al,61h ;讀8255PB口 mov ah,al or al,3 ou

20、t 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延時子程序delay2: nop nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp code endsend start四測試方案和測試結(jié)果 測試方案 測試結(jié)果啟動程序,出現(xiàn)按鍵提示,按下18鍵機內(nèi)/實驗儀發(fā)出相應(yīng)的音階同時led和點陣板亮相應(yīng)的燈和行改變開關(guān)狀態(tài)(可隨時任意改變),按18鍵對應(yīng)發(fā)出相應(yīng)的音階“彈琴”發(fā)出優(yōu)美旋律按下ESC鍵退出程序 五分析與總結(jié) 問題分析:關(guān)于開關(guān)改變發(fā)聲源為機內(nèi)或機外和led燈的點亮,原來想用前面學(xué)過的簡單輸入輸出實驗,用74LS273做輸出,到led上驅(qū)動led燈亮;用74LS244做輸入,把開關(guān)值輸入控制發(fā)聲源。后來發(fā)現(xiàn)這樣很麻煩,雖然在程序上沒有太繁雜,但是這樣就加了兩個地址,而且對于電路來說,就很復(fù)雜。因此,后來想到直接用8255做輸入輸出,設(shè)A口為輸入,B口輸出,這樣用一個片子即可完成幾個功能。 關(guān)于點亮點陣板,原來想將num逐個與07比較,來判斷亮哪一行,后來這樣寫代碼時比較繁雜,就改成移位來實現(xiàn),給點陣的行賦初值00000001,然后再左移num位,即可亮相應(yīng)的

溫馨提示

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

評論

0/150

提交評論