電子琴匯編程序.doc_第1頁
電子琴匯編程序.doc_第2頁
電子琴匯編程序.doc_第3頁
電子琴匯編程序.doc_第4頁
電子琴匯編程序.doc_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

;*根據(jù)CHECK配置信息修改下列符號值*IOY0 EQU 9800H ;片選IOY0對應(yīng)8255的端口始地址IOY1 EQU 9840H ;片選IOY1對應(yīng)8254端口始地址;*MY8255_A EQU IOY0+00H*4 ;8255的A口地址MY8255_B EQU IOY0+01H*4 ;8255的B口地址MY8255_C EQU IOY0+02H*4 ;8255的C口地址MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址MY8254_0 EQU IOY1+00H*4 ;8254計數(shù)器0端口地址MY8254_1 EQU IOY1+01H*4 ;8254計數(shù)器1端口地址MY8254_2 EQU IOY1+02H*4 ;8254計數(shù)器2端口地址MY8254_CMD EQU IOY1+03H*4 ;8254控制寄存器端口地址STACK1 SEGMENT STACK DW 1024 DUP(?)STACK1 ENDSDATA SEGMENTMUSIC DW 1041667/624,1041667/688,1041667/760,1041667/798,1041667/884,1041667/980,1041667/1088,1041667/1148 ;頻率表DTABLE DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H LIGHT DB 01H,02H,04H,08H,10H,20H,40H,80HFREQ_LIST DW 1193180/371,1193180/495,1193180/495,1193180/495,1193180/624,1193180/556,1193180/495,1193180/556,1193180/624 ;頻率表 DW 1193180/495,1193180/495,1193180/624,1193180/742,1193180/833,1193180/833,1193180/833,1193180/742,1193180/624 DW 1193180/624,1193180/495,1193180/556,1193180/495,1193180/556,1193180/624,1193180/495,1193180/416,1193180/416,1193180/371 DW 1193180/495,1193180/833,1193180/742,1193180/624,1193180/624,1193180/495,1193180/556,1193180/495,1193180/556,1193180/833 DW 1193180/742,1193180/624,1193180/624,1193180/742,1193180/833,1193180/990,1193180/742,1193180/624,1193180/624,1193180/495 DW 1193180/556,1193180/495,1193180/556,1193180/624,1193180/495,1193180/416,1193180/416,1193180/371,1193180/495,0TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 ;時間表 DB 6, 2, 4, 4, 12, 1, 3, 6, 2 DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 6, 2, 4, 4, 12 MYMEMORY DW 50 DUP (0) KEYNUM DW 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,81H ;方式0,A口、B口、C口高四位輸出,C口低4位輸入 OUT DX,ALBEGIN: CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵 JNZ GETKEY1 ;有鍵按下則跳置GETKEY1 MOV AH,1 ;判斷PC鍵盤是否有按鍵按下 INT 16H JZ BEGIN ;無按鍵則跳回繼續(xù)循環(huán),有則退出 QUIT: MOV AX,4C00H ;返回到DOS INT 21H;取得鍵值GETKEY1:CALL FAR PTR DALLY CALL FAR PTR DALLY CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP BEGIN ;否則跳回開始繼續(xù)循環(huán)GETKEY2:MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_C SHL AL,4 OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DXL1: TEST AL,01H ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP MAINDONEL2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP MAINDONEL3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP MAINDONEL4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對應(yīng)的鍵值MAINDONE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 CMP AL,09H JZ MYTO CMP AL,08H JNZ TO CALL FAR PTR MEMORY2 JMP BEGIN MYTO: CALL FAR PTR MYMUSIC JMP BEGINTO: CALL SHOW CALL FAR PTR SPEAKERON CALL FAR PTR DALLYTEMP: CALL CCSCAN JNZ TEMP CALL FAR PTR SPEAKEROFF JMP BEGIN NEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是則跳回到開始處 ROL AL,1 ;沒檢測到第4列則準(zhǔn)備檢測下一列 MOV CH,AL JMP COLUMKERR: JMP BEGIN;清屏CLEAR PROC NEAR ;清除數(shù)碼管顯示子程序 MOV DX,MY8255_B ;段位置0即可清除數(shù)碼管顯示 MOV AL,00H OUT DX,AL RETCLEAR ENDP;鍵盤掃描CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H MOV DX,MY8255_C ;將4列全選通,X1X4置0 SHL AL,4 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;讀Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RETCCSCAN ENDP;數(shù)碼管顯示SHOW PROC NEAR ;顯示鍵值子程序 PUSH AX PUSH AX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示 MOV AL,0F0H MOV DX,MY8255_C SHL AL,4 OUT DX,AL ;設(shè)置X1X4,選通一個數(shù)碼管 POP AX MOV BX,OFFSET DTABLE XLAT ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值 MOV DX,MY8255_B OUT DX,AL ;寫入數(shù)碼管ADp CALL FAR PTR DALLY POP AX RETSHOW ENDP ;開喇叭SPEAKERON PROC FAR PUSH AX MOV AL,36H MOV DX,MY8254_CMD OUT DX,AL ;初始化8254 POP AX PUSH BX PUSH SI PUSH DX MOV BX,OFFSET MUSIC SHL AL,1 MOV AH,00H MOV SI,AX MOV AX,BX+SI CALL FAR PTR MEMORY1 MOV DX,MY8254_0 OUT DX,AL MOV AL,AH OUT DX,AL POP DX POP SI POP BX RET SPEAKERON ENDP ;關(guān)喇叭 SPEAKEROFF PROC FAR PUSH AX MOV AL, 30H MOV DX,MY8254_CMD OUT DX,AL POP AXSPEAKEROFF ENDP ;延時1,DALLY PROC FAR ;軟件延時子程序 PUSH CX PUSH AX MOV CX,00FFHD1: MOV AX,00FFHD2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RETDALLY ENDP;放音樂MYMUSIC PROC FAR PUSH AX PUSH SI PUSH DI MOV AL,36H MOV DX,MY8254_CMD OUT DX,AL AGAIN2: MOV SI,OFFSET FREQ_LIST MOV DI,OFFSET TIME_LIST MYAGAIN: CMP word ptr SI,0 JZ AGAIN2 MOV AX,SI MOV DX,MY8254_0 OUT DX,AL MOV AL,AH OUT DX,AL MOV DL,DI CALL MYDALLY INC SI INC SI INC DI CALL CCSCAN JNZ MYEXIT MOV AH,01H INT 16H JZ MYAGAIN CALL FAR PTR SPEAKEROFF MOV AX,4C00H ;返回到DOS INT 21HMYEXIT: CALL FAR PTR SPEAKEROFF POP DI POP SI POP AX RETMYMUSIC ENDP ;延時二MYDALLY PROC PUSH AX PUSH CXMYD0: MOV CX,200H MYD1: MOV AX,0FFFFH MYD2: DEC AX JNZ MYD2 LOOP MYD1 DEC DL JNZ MYD0 POP CX POP AX RET MYDALLY ENDP ;錄音MEMORY1 PROC FAR PUSH BX MOV BX,KEYNUM MOV MYMEMORYBX,AX INC BX INC BX MOV KEYNUM,BX POP BX RET MEMORY1 ENDP ;放音MEMORY2 PROC FAR PUSH AX PUSH SI PUSH DI AGAIN3: MOV SI,OFFSET MYMEMORY MYAGAIN2: mov ax ,si CMP ax,0;SI,0 JZ AGAIN3 MOV AL,36H MOV DX,MY8254_CMD OUT DX,AL MOV AX,SI MOV DX,MY8254_0 OUT DX,AL MOV AL,AH OUT DX

溫馨提示

  • 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

提交評論