【正文】
DB 12 DB 4,2,2,2,2 DB 4,2,2,2,2 DB 4,2,2,2,2 DB 4,2,2,4 DB 2,2,2,2,2,2 DB 4,4,4 DB 4,4,4 DB 12 DB 4,2,2,4 DB 4,2,2,4 DB 4,4,4 DB 2,2,2,2,4 DB 2,2,2,2,2,2 DB 4,4,4 DB 2,2,4,4 DB 12 KEY DB 21H,0F4H,0F1H,39H,0D9H,0DDH,61H。4One beat。RHY 1Quarter beat。SongBooK XiaoBuWuQu BOK DB 5,1,2,3,4 DB 5,1,1 DB 6,4,5,6,7 DB 1,1,1 DB 4,5,4,3,2 DB 3,4,3,2,1 DB 7,1,2,3,1 DB 2 DB 5,1,2,3,4 DB 5,1,1 DB 6,4,5,6,7 DB 1,1,1 DB 4,5,4,3,2 DB 3,4,3,2,1 DB 2,3,2,1,7 DB 1 DB 3,1,2,3,1 DB 2,5,6,7,5 DB 1,6,7,1,5 DB 4,3,4,2 DB 2,3,4,5,6,7 DB 1,7,6 DB 7,2,4 DB 5 DB 5,1,7,1 DB 6,1,7,1 DB 5,4,3 DB 2,1,7,1,2 DB 5,6,7,1,2,3 DB 4,3,2 DB 3,5,1,7 DB 1 LEN EQU $BOK 。流程圖源代碼DATA SEGMENT 。數(shù)碼管第一位顯示當(dāng)前播放的音符(1~7,不區(qū)分高中低音)。能在數(shù)據(jù)段存儲(chǔ):音符(1~7)、音階(高中低)、音長(zhǎng)(~3拍),等曲譜信息。根據(jù)計(jì)數(shù)器的性質(zhì),計(jì)數(shù)值音符與計(jì)數(shù)值對(duì)照(PDF中給出表格有誤)1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)低音1221089791817264中音61544845403632高音302724222018162.?dāng)U展部分利用小鍵盤實(shí)現(xiàn)彈琴功能,并顯示彈奏的樂(lè)譜。實(shí)驗(yàn)三 8253計(jì)數(shù)器/定時(shí)器的應(yīng)用一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)掌握8253用作定時(shí)器的編程原理。程序設(shè)計(jì)時(shí),采用結(jié)構(gòu)程序化方法自頂向下設(shè)計(jì),使用結(jié)構(gòu)程序化的思路,編寫多個(gè)子程序和宏,互相嵌套組合,實(shí)現(xiàn)復(fù)雜的功能。 CODE ENDS END MAIN六、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)比較綜合:在實(shí)驗(yàn)一的基礎(chǔ)上,利用I/O端口芯片進(jìn)行綜合編程,也為實(shí)驗(yàn)三打下基礎(chǔ)。Outer loopLOP1: MOV CX,00H 。 DELAY PROC 。Control which LED on DEC DX ROL AH,1 INC SI CALL DELAY 。Display 6 digits PUSH CX PUSH DX PUSH AX MOV BP,000FHLOPP:XOR SI,SI MOV CX,06H MOV DX,0E800H MOV AH,00000001BLOPD:MOV AL,ID[SI] OUT DX,AL MOV AL,AH 。Keep info in AL for SCASB POP DX RET READ ENDP。Read Row info MOV BL,AL MOV DX,0E803H MOV AL,88H OUT DX,AL MOV AL,00H MOV DX,0E802H OUT DX,AL IN AL,DX 。READ PROC NEAR 。All display unit has been occupied JE CLEAR JMP NEXTNFD: NOP 。Yes:begin to judge the key. MOV AL,KEY[DI] MOV SI,DX MOV ID[SI],AL 。No:wait until it is 。Key pressed! CMP AL,0FFH 。Key D means delete one digit JE DELETE CMP DI,14 JE EXIT 。reserve for future use. CMP DI,12 JE CLEAR 。Is the key 0~9? JBE ISNUM 。Usually this is not going to 。Set: DI + 1 MOV CX,16 MOV DI,OFFSET ARRAY REPNZ SCASB 。No key pressed 。Read key state CMP AL,0FFH 。Digits number decrease one MOV AL,0 MOV SI,DX MOV ID[SI],AL NEXT: CALL DISP 。Clear all ID value INC SI LOOP LOPCDELETE: CMP DX,0 。 MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,0E823H MOV AL,16H OUT DX,ALCLEAR:XOR DX,DX 。 DB 100 DUP(0)STACK ENDS 。STACK SEGMENT STACK 39。0~5 DB 0D9H,0DDH,61H,0FDH,0F9H 。按鍵鍵盤上,C鍵清除所有輸入,D鍵清除最近一個(gè)輸入,E鍵退出程序,返回DOS。IF BIT6=0 THEN PAUSE, NONINC SI INC SINONINC: CMP SI,BX JZ NEXT JMP DISPLAYNEXT: MOV SI,POINT JMP DISPLAYDELAY1MS PROC PUSH CX MOV CX,50OUTER: PUSH CX MOV CX,4000INNER: LOOP INNER POP CX LOOP OUTER POP CX RETDELAY1MS ENDPSTOP: MOV AL,0 MOV DX,AddrA OUT DX,AL MOV DX,AddrB OUT DX,AL MOV AH,4CH INT 21HCOD ENDS END START五、實(shí)驗(yàn)結(jié)果(擴(kuò)展部分)程序說(shuō)明采用 行反轉(zhuǎn)法識(shí)別閉合鍵,把兩次讀取到的值相或; 16個(gè)按鍵分別對(duì)應(yīng)于16個(gè)這樣的值,依數(shù)值大小存成ARRAY數(shù)組;把向或得到的值與數(shù)組中的值比較,用在數(shù)組中的偏移量確定該按鍵所對(duì)應(yīng)的數(shù)值。AH IS A COPY OF AL AND AL,80H CMP AL,80H JNZ STOP。MOV CX,83。①4種速度,由SW4~SW5控制SW5 SW4速度計(jì)數(shù)周期0 01倍速1*1FH0 11/2倍速2*1FH1 01/4倍速4*1FH1 11/6倍速6*1FH②暫停,由SW6控制(執(zhí)行程序前必須置SW6=1)SW6=1 運(yùn)行SW6=0 暫停③退出,由SW7控制(執(zhí)行程序前必須置SW7=1)SW7=1 運(yùn)行SW7=0 退出(返回DOS)流程圖源代碼DAT SEGMENT AddrA DW 0E800H AddrB DW 0E801H AddrC DW 0E802H AddrCTL DW 0E803H MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 POINT DW MESGDAT ENDSSTA SEGMENT STACK DW 100H DUP (?)STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT,SS:STA SHOW MACRO X,Y MOV AL,X MOV DX,AddrB OUT DX,AL MOV AL,Y