版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)一、課程設(shè)計(jì)題目:簡易電子琴 二、課程設(shè)計(jì)目的:用匯編語言獨(dú)立完成一個(gè)程序題,以達(dá)到熟練運(yùn)用匯編語言編程實(shí)現(xiàn)有比較完整功能的系統(tǒng)的目的。三、課程設(shè)計(jì)內(nèi)容:用匯編語言編寫一個(gè)簡易電子琴程序,基本功能:1、可以進(jìn)行固定音樂演奏(兩首以上);可以自行彈奏音樂。2、圖形顯示鍵盤界面;彈奏時(shí)鍵盤現(xiàn)實(shí)所按按鍵;可以調(diào)節(jié)音量。四、設(shè)計(jì)思路: ROM BIOS中的BEEP子程序能根據(jù)BL中給出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)聲音。通過對(duì)BEEP的修改可以使其產(chǎn)生任一頻率的聲音。用匯編語言編寫的程序GENSOUND,能使PC機(jī)發(fā)出指定頻率和指定延遲時(shí)間的聲音,它是一個(gè)很
2、好的通用發(fā)聲程序。組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲發(fā)聲程序所必須的兩組數(shù)據(jù),知道了音調(diào)及頻率的關(guān)系后,就可以按照樂曲的樂譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編程依次取出表中的頻率值和時(shí)間值,調(diào)用GENSOUND程序發(fā)出各種聲音,本程序通過調(diào)用GENSOUND程序演奏樂曲。五、操作說明:運(yùn)行時(shí),按A鍵演奏樂曲”Two tigers”,按B鍵演奏樂曲”Happy Birthday”,按C鍵演奏樂曲” Snail And Oriole”,按P鍵自行彈奏音樂,按Q鍵退出。以上按鍵必須使用大寫字母,否則顯示出錯(cuò)信息。源程序(MUSIC.ASM)如下:DATA SEGMENT PA
3、RA 'DATA'INFO1 DB 0DH,0AH,'*$'INFO2 DB 0DH,0AH,'*-WELCOME YOU TO COME HERE!-*$'INFO3 DB 0DH,0AH,'*-This is a music program!-*$'INFO4 DB 0DH,0AH,'*$'INFO5 DB 0DH,0AH,0DH,0AH,'Please select!$'INFO6 DB 0DH,0AH,0DH,0AH,'Input Error! Please Input Again
4、!$'INFO7 DB 0DH,0AH,'-$'INFO9 DB 0DH,0AH,0DH,0AH,'If you want to play piano,Please push P$'MUSLIST DB 0DH,0AH,'A Two tigers' DB 0DH,0AH,'B Happy Birthday' DB 0DH,0AH,'C Snail And Oriole' DB 0DH,0AH,'Q EXIT' DB 0DH,0AH,'$'MUS_FREG1 DW 2 DUP(
5、262,294,330,262) ;為演奏的樂曲定義一個(gè)頻率表 DW 2 DUP(330,349,392) DW 2 DUP(392,440,392,349,330,262) DW 2 DUP(294,196,262),0ffffhMUS_TIME1 DW 10 DUP(25000),50000,25000,25000,50000 ;為演奏的樂曲定義一個(gè)節(jié)拍時(shí)間表 DW 2 DUP(12000,12000,12000,12000,25000,25000) DW 2 DUP(25000,25000,50000) MUS_FREG2 DW 262,262,294,262,349 DW 330,26
6、2,262,294,262 DW 392,349,262,262,523 DW 440,349,262,262,466 DW 466,440,262,392,349,-1 MUS_TIME2 DW 500,500,1000,1000,1000 DW 1000,1000,500,500,1000,1000 DW 1000,1000,1000,500,500,1000 DW 1000,1000,1000,1000,1000,500 DW 500,1000,1000,1000,1000,1000MUS_FREG3 DW 392,396,392,395,330,392,262,440,392,395
7、DW 392,395,392,330,294,262,330,294,297,330 DW 392,395,392,330,335,294,262,265,294,330 DW 262,265,220,196,220,196,392,395,392,395 DW 330,392,262,440,292,392,395,392,395,330 DW 294,262,330,294,294,330,392,395,330,335 DW 294,262,265,294,330,262,265,220,196,220 DW 196,392,395,392,395,330,294,262,440,392
8、 DW 395,440,262,294,262,294,330,294,262,-1 MUS_TIME3 DW 1 DUP(25,50,25,50,25,25,50,50,100,25) DW 1 DUP(50,25,50,25,25,50,50,100,75,25) DW 1 DUP(50,25,25,50,25,25,50,50,75,25) DW 1 DUP(50,25,25,50,50,100,25,50,25,50) DW 1 DUP(25,25,50,50,100,25,50,25,50,25) DW 1 DUP(25,50,50,100,75,25,50,50,50,25) DW
9、 1 DUP(25,50,50,75,25,50,25,25,50,50) DW 1 DUP(100,25,50,25,50,25,25,50,50,50) DW 1 DUP(25,25,50,50,50,50,100,100,200) msg DB 0DH,0AH,0DH,0AH,' 1 2 3 4 5 6 7 ' DB 0DH,0AH,' q w e r t y u ' DB 0DH,0AH,'_' DB 0DH,0AH,'9: EXIT' DB 0DH,0AH,'_','$' ;*音調(diào)*后面用
10、到-1判斷音樂播是否放完sound_0 DW -1sound_11 DW 441,-1 sound_12 DW 495,-1sound_13 DW 556,-1sound_14 DW 589,-1sound_15 DW 661,-1sound_16 DW 742,-1 sound_17 DW 833,-1 sound_1 DW 882,-1 sound_2 DW 990,-1 sound_3 DW 1112,-1sound_4 DW 1178,-1 sound_5 DW 1322,-1 sound_6 DW 1484,-1 sound_7 DW 1655,-1time DW 25DATA EN
11、DSSTACK SEGMENT PARA STACK 'STACK' DB 300 DUP ('STACK')STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV aH, 3 MOV AL,4 INT 10H MOV AH,09H MOV BH,6 MOV BL,4 INT 10H MOV AH,0BH MOV BH,09H MOV BL,00 INT 10H;*定義一個(gè)宏*SHOW MACRO b LEA DX,b MOV AH
12、,9 INT 21H ENDM;* show INFO1 show INFO2 show INFO3 show INFO4 show INFO5 show infO9 show MUSLISTINPUT: MOV AH,01H INT 21H CMP AL,'Q' JZ retu CMP AL,'P' JZ RETU2 CMP AL,'A' JNZ B0 CALL MUSIC1 JMP EXIT1B0: CMP AL,'B' JNZ C0 CALL MUSIC2 JMP EXIT1C0: CMP AL,'C' JN
13、Z exit CALL MUSIC3EXIT1: show INFO7 JMP INPUT EXIT: call clear show INFO6 show INFO7 show INFO5 show MUSLISTSHOW INFO9 jmp inputRETU: MOV AH,4CH INT 21H MAIN ENDP RETU2: MOV AX,DATA MOV DS,AX ;*一個(gè)聲音宏*onesound macro soundis,jumpis,letterisCMP AL,letteris JNZ jumpis LEA SI,soundisLEA BP,DS:timeCALL MU
14、SIC JMP inpu ENDM show msgINPU: MOV AH,01H INT 21H CMP AL,'9' jnz gomov ah,4chint 21hgo: onesound sound_11,a1,'q'a1: onesound sound_12,b1,'w'b1: onesound sound_13,c1,'e'c1: onesound sound_14,d1,'r'd1: onesound sound_15,e1,'t'e1: onesound sound_16,f1,
15、39;y'f1: onesound sound_17,g1,'u'g1: onesound sound_1,h1,'1'h1: onesound sound_2,i1,'2'i1: onesound sound_3,j1,'3'j1: onesound sound_4,k1,'4'k1: onesound sound_5,l1,'5'l1: onesound sound_6,m1,'6'm1: onesound sound_7,n1,'7'n1: onesou
16、nd sound_0,o1,alo1: jmp inpu;*發(fā)聲 GENSOUND1 PROC NEAR ;-PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI ;-MOV AL,0B6H OUT 43H,AL MOV DX,12H MOV AX,348ch DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,3 OUT 61H,AL WAIT2: MOV CX,3314 call waitf DELAY1: DEC BX JNZ WAIT2 MOV AL,AH OUT 61H,AL ;-
17、POP DI POP DX POP CX POP BX POP AX ;-RET GENSOUND1 ENDP ;* waitf proc near push ax waitf1: in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax ret waitf endp ;* MUSIC PROC NEAR PUSH DS SUB AX,AX PUSH AX FREG: MOV DI,SI CMP DI,-1JE END_MUS MOV BX,DS:BP CALL GENSOUND1 ADD SI,2 ADD BP
18、,2 END_MUS: RET MUSIC ENDP MUSIC1 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG1 LEA BP,DS:MUS_TIME1FREG1: MOV DI,SI CMP DI,-1 JE END_MUS1 MOV DX,DS:BP MOV BX,2600 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS1: RETMUSIC1 ENDPGENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL
19、,0B6H OUT 43H,AL MOV DX,12H MOV AX,533H*896 DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,3 OUT 61H,ALWAIT1: MOV CX,8FF0HDELAY2: LOOP DELAY2 DEC BX JNZ WAIT1 MOV AL,AH OUT 61H,AL POP DI POP DX POP CX POP BX POP AX RETGENSOUND ENDPMUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2FREG2: MOV DI,SI CMP DI,-1 JE END_MUS2 MOV DX,DS:BP MOV BX,3500 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS2: RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3FREG3: MOV DI,SI CMP DI,-1 JE EN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教育機(jī)構(gòu)校園宣傳欄設(shè)施采購及安裝合同3篇
- 二零二五年度木材防腐處理木工班組承包合同樣本4篇
- 2025年食堂食材安全認(rèn)證與采購合同3篇
- 2025版家居建材行紀(jì)合同范本2篇
- 第八章生命體征的評(píng)估與護(hù)理護(hù)理學(xué)基礎(chǔ)88課件講解
- 2025年保潔防疫服務(wù)協(xié)議
- 2025年加盟連鎖店經(jīng)銷合作協(xié)議范例
- 2025年大型綜合市場(chǎng)用水電合同
- 2025年專利知識(shí)產(chǎn)權(quán)技術(shù)權(quán)利使用許可轉(zhuǎn)讓合同
- 二零二五版閉門會(huì)議知識(shí)產(chǎn)權(quán)授權(quán)與保密條款合同3篇
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院單招職業(yè)技能測(cè)試題庫標(biāo)準(zhǔn)卷
- 2024年高考數(shù)學(xué)(理)試卷(全國甲卷)(空白卷)
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(附答案)
- 合同簽訂執(zhí)行風(fēng)險(xiǎn)管控培訓(xùn)
- 九宮數(shù)獨(dú)200題(附答案全)
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 典范英語2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
- 春節(jié)工地停工復(fù)工計(jì)劃安排( 共10篇)
評(píng)論
0/150
提交評(píng)論