📄 2002好.asm
字号:
org 0000h
ajmp main
org 000bh/*T0中断入口*/
ajmp intt0/*T0中断服务子程序*/
org 0030h/*主程序起始地址*/
main: mov tmod,#01h/*设置T0为16位定时器*/
mov ie,#82h/*开中断*/
start: mov 30h,#00h/*取简谱码指针*/
next: mov a,30h/*简谱指针载入A*/
mov dptr,#tab
movc a,@a+dptr
mov r2,a/*取到的简码暂存R2*/
jz end0/*是否取到结束吗*/
anl a,#0fh/*不是,则取低4位*/
mov r5,a/*将节拍码存R5*/
mov a,r2/*将取到的简谱码再载入A*/
swap a/*高低四位交换*/
anl a,#0fh/*取低四位(音符码)*/
jnz sing/*取到的音符码为0吗*/
clr tr0/*是,则不发音*/
ajmp d1/*跳到D1*/
sing: dec a/*取到的音符码减1(不含0)*/
mov 22h,a/*存入22H*/
rl a/*乘2*/
mov dptr,#tab1/*至TAB1取相对的低位字节计数值*/
movc a,@a+dptr
mov th0,a/*取到的高位字节存入TH0*/
mov 21h,a/*取到高位字节存入21H*/
mov a,22h/*再载入取到的音符码*/
rl a/*乘2*/
inc a/*加1*/
movc a,@a+dptr/*至TAB1取相对的低字节计数值*/
mov tl0,a/*取到的低位字节存入TL0*/
mov 20h,a/*取到的低位字节存入20H*/
setb tr0/*启动T0*/
d1: acall delay/*基本单位时间1/4拍187毫秒*/
inc 30h/*取简码指针加1*/
ajmp next/*取下一个码*/
end0: clr tr0/*停止T0*/
ajmp start/*重复循环*/
intt0: push acc/*将A的值暂存于堆栈*/
push psw/*将PSW的值暂存于堆栈*/
mov tl0,20h/*重设计数值*/
mov th0,21h
cpl p2.1/*将P1.7位反相*/
pop psw
pop acc/*从堆栈取回A,PSW的值*/
reti/*中断返回*/
delay: mov r7,#02h/*187MS延时*/
dl1: mov r4,#187
dl2: mov r3,#248
djnz r3,$
djnz r4,dl2
djnz r7,dl1
djnz r5,delay/*决定节拍*/
ret
;2002
tab1:
DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
/*
tab:
;1
DB 04H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,92H,72H,72H,72H,72H,92H
DB 92H,92H,92H,92H,92H,92H,62H,72H,72H,72H,04H
DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,92H,0A2H,0A4H
DB 02H,62H,62H,62H,62H,62H,52H,0A2H,94H,92H,92H,92H,72H,74H
;2
DB 04H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,92H,72H,72H,72H,72H,92H
DB 92H,92H,92H,92H,92H,92H,62H,72H,72H,72H,04H
DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,92H,0A2H,0A4H
DB 02H,62H,62H,62H,62H,62H,52H,0A2H,94H,92H,92H,92H,72H,74H
;3
DB 02H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,0B2H,92H,72H,74H
DB 02H,62H,62H,62H,64H,62H,52H,74H,62H,72H,52H,32H,34H
DB 02H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0A2H,0B4H,0A2H,0B2H,92H,72H,74H
DB 02H,62H,62H,62H,62H,62H,52H,32H,94H,92H,92H,62H,72H,74H
DB 02H,0A2H,0A2H,0A2H,0A4H,0A2H,0A2H,0B4H,0A2H,92H,72H,72H,74H
DB 02H,62H,62H,62H,62H,62H,62H,52H,74H,62H,72H,52H,32H,34H
;4
DB 02H,62H,62H,62H,62H,62H,52H,32H,52H,52H,52H,32H,32H,22H,12H
DB 02H,62H,62H,62H,62H,62H,52H,32H,62H,72H,72H,72H,72H
DB 02H,62H,62H,62H,62H,62H,52H,32H,92H,0A2H,0A2H,0A2H,0A2H
END*/
;祝你平安
tab:
db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db 20h,10h,2bh,10h,26h,30h,30h,80h,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -