📄 music.asm
字号:
Z8279 EQU 239H
D8279 EQU 238H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
D8253 EQU 222H
Z8253 EQU 223H
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
main proc far
START: ;初始化
PUSH CS
POP DS
MOV DX,Z8279
MOV AL,LEDMOD
OUT DX,AL
MOV AL,LEDFEQ
OUT DX,AL
MOV AL,0D2H
OUT DX,AL
;置空FIFO寄存器
WAIIT: NOP
IN AL,DX
MOV BL,AL
AND AL,80H
CMP AL,80H
JE WAIIT ;FIFO正在清除期间则跳转等待
MOV AL,BL
AND AL,0FH
CMP AL,00H
JE WAIIT ;无键按下则等待
MOV AL,40H ;写 读FIFO RAM命令字
OUT DX,AL
MOV DX,D8279 ;读入FIFO RAM内容
IN AL,DX
NOP
CMP AL,15H ;是结束符则结束
JE FINI
MOV AH,AL ;ZK
NOP ;查表,将键码放入AL中
LEA BX,LED
XLAT
MOV DX,D8279 ;将AL中内容写到数码管上
OUT DX,AL
MOV AL,AH
CMP AL,01H
JE MIC1
NOP
CMP AL,02H
JE MIC2
NOP
MOV DX,Z8279 ;清FIFO RAM寄存器
MOV AL,0C2H
OUT DX,AL
JMP WAIIT ;等待下一次键输入
MIC1: CALL MUSIC1
MIC2: CALL MUSIC2
FINI: MOV DX,Z8279 ;清FIFO寄存器并关蜂鸣器
MOV AL,0C2H
OUT DX,AL
JMP $
main endp
MUSIC2 proc near
mov ax,CODE
mov ds,ax
mov dx,Z8253
mov al,096h
out dx,al
; lea bx,freq1
; xlat
lea bx,time2
mov dx,D8253
next2:
call dly2
;pl: ;dec bx
xlat
out dx,al
; jnz pl
inc bx
jmp next
dly2: mov si,500
l22: mov di,500
l12: dec di
jnz l12
dec si
jnz l22
RET
MUSIC2 ENDP
MUSIC1 proc near
mov ax,CODE
mov ds,ax
mov dx,Z8253
mov al,096h
out dx,al
; lea bx,freq1
; xlat
lea bx,time1
mov dx,D8253
next:
call dly
;pl: ;dec bx
xlat
out dx,al
; jnz pl
inc bx
jmp next
dly: mov si,500
l2: mov di,500
l1: dec di
jnz l1
dec si
jnz l2
RET
MUSIC1 ENDP
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB 5EH,79H,71H
time2 db 42H,82H,82H,82H,84H,02H,72H
DB 62H,72H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B4H,02H,0A2H
DB 12H,0A2H,0B2H,92H,88H
DB 82H,0B2H,0B2H,0A2H,84H,02H,72H
DB 62H,72H,62H,52H,44H,02H,12H
time1 db 82h,01h,81h,94h,84h,0b4h,0a4h,04h
db 82h,01h,81h,94h,84h,0c4h,0b4h,04h
;2
db 82h,01h,81h,0f4h,0d4h
db 0b4h,0a4h,94h
db 0e2h,01h,0e1h,0d4h,0b4h
db 0c4h,0b4h,04h
;3
db 82h,01h,81h,94h,84h
db 0b4h,0a4h,04h
db 82h,01h,81h,94h,84h
db 0c4h,0b4h,04h
;4
db 82h,01h,81h,0f4h,0d4h
db 0b4h,0a4h,94h
db 0e2h,01h,0e1h,0d4h,0b4h
db 0c4h,0b4h,04h
db 00
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -