📄 audio.asm
字号:
SEGNUM EQU 40H
CS273 EQU 0CFA0H
CS244 EQU 0CFA8H
TEST BIT 20H
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#0CFE9H ;8279命令字
MOV A,#0D1H ;清显示
MOVX @DPTR,A
LOOP1: MOV DPTR,#0CFE9H
MOVX A,@DPTR
ANL A,#0FH
JZ LOOP1 ;有键按下?没有则循环等待
; MOV A,#0A0H ;显示\消隐命令
; MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R1,A ;保存键值
CLR C
SUBB A, #0C6H
JNC LOOP1
MOV A, R1
CLR C
SUBB A, #0C0H
MOV B, #03H
MUL AB
MOV DPTR, #KPRG
JMP @A+DPTR
KPRG: LJMP KPRG0
LJMP KPRG1
LJMP KPRG2
LJMP KPRG3
LJMP KPRG4
LJMP KPRG5
KPRG0: CLR A
MOV SEGNUM, A
MOV DPTR, #CS273
MOV A, #7FH ;O0表示PD,O1表示CE,O7表示CA0
MOVX @DPTR, A
LCALL DEL20MS
MOV A, #7EH
MOVX @DPTR, A
CLR TEST
MOV R2, #00H
LCALL DISP
LJMP LOOP1
KPRG1: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.7, PLAY1 ;IN7为录放选择
LJMP LOOP1
PLAY1: MOV DPTR, #CS273
MOV A, #7FH
MOVX @DPTR, A
LCALL DEL20MS
MOV A, #7EH
MOVX @DPTR, A
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #01H
LCALL DISP
LJMP LOOP1
KPRG2: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.7, PLAY2 ;IN7为录放选择
LJMP LOOP1
PLAY2: MOV DPTR, #CS273
MOV A, #0FFH
MOVX @DPTR, A
LCALL DEL20MS
MOV A, #0FEH
MOVX @DPTR, A
MOV A, #0FCH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
WAIT1: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.0, WAIT1
MOV DPTR, #CS273
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #02H
LCALL DISP
LJMP LOOP1
KPRG3: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.7, PLAY3 ;IN7为录放选择
LJMP LOOP1
PLAY3: MOV DPTR, #CS273
MOV A, #0FFH
MOVX @DPTR, A
LCALL DEL20MS
MOV A, #0FEH
MOVX @DPTR, A
MOV A, #0FCH
MOVX @DPTR, A
NOP
NOP
MOV A, #0FEH
MOVX @DPTR, A
WAIT2: MOV DPTR, #CS244 ;IN0表示EOM
MOVX A, @DPTR
JB ACC.0, WAIT2
MOV DPTR, #CS273
MOV A, #0FCH
MOVX @DPTR, A
NOP
NOP
MOV A, #07EH
MOVX @DPTR, A
WAIT3: MOV DPTR, #CS244 ;IN0表示EOM
MOVX A, @DPTR
JB ACC.0, WAIT3
MOV DPTR, #CS273
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #03H
LCALL DISP
LJMP LOOP1
KPRG4: MOV DPTR, #CS244
MOVX A, @DPTR
JNB ACC.7, REC1 ;IN7为录放选择
LJMP LOOP1
REC1: CPL TEST
MOV DPTR, #CS273
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
JNB TEST, REC2
LJMP LOOP1
REC2: INC SEGNUM
MOV A, SEGNUM
MOV R2, A
LCALL DISP
LJMP LOOP1
KPRG5: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.7, PLAY5 ;IN7为录放选择
LJMP LOOP1
PLAY5: MOV DPTR, #CS273
MOV A, #7FH
MOVX @DPTR, A
LCALL DEL20MS
MOV A, #7EH
MOVX @DPTR, A
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #01H
LCALL DISP
WAIT4: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.0, WAIT4
LCALL DEL20MS
MOV DPTR, #CS273
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #02H
LCALL DISP
WAIT5: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.0, WAIT5
LCALL DEL20MS
MOV DPTR, #CS273
MOV A, #7CH
MOVX @DPTR, A
NOP
NOP
MOV A, #7EH
MOVX @DPTR, A
MOV R2, #03H
LCALL DISP
WAIT6: MOV DPTR, #CS244
MOVX A, @DPTR
JB ACC.0, WAIT6
LCALL DEL20MS
MOV DPTR,#0CFE9H ;有键按下?
MOVX A,@DPTR
ANL A,#0FH
JZ PLAY5
LJMP LOOP1
DEL20MS: MOV R6, #20
DELL1: MOV R7, #250
DELL2: NOP
NOP
DJNZ R7, DELL2
DJNZ R6, DELL1
RET
DISP: MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#80H ;选中LED1
MOVX @DPTR,A
MOV A, R2
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段显码表
db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -