?? 2002好.asm
字號(hào):
org 0000h
ajmp main
org 000bh/*T0中斷入口*/
ajmp intt0/*T0中斷服務(wù)子程序*/
org 0030h/*主程序起始地址*/
main: mov tmod,#01h/*設(shè)置T0為16位定時(shí)器*/
mov ie,#82h/*開中斷*/
start: mov 30h,#00h/*取簡(jiǎn)譜碼指針*/
next: mov a,30h/*簡(jiǎn)譜指針載入A*/
mov dptr,#tab
movc a,@a+dptr
mov r2,a/*取到的簡(jiǎn)碼暫存R2*/
jz end0/*是否取到結(jié)束嗎*/
anl a,#0fh/*不是,則取低4位*/
mov r5,a/*將節(jié)拍碼存R5*/
mov a,r2/*將取到的簡(jiǎn)譜碼再載入A*/
swap a/*高低四位交換*/
anl a,#0fh/*取低四位(音符碼)*/
jnz sing/*取到的音符碼為0嗎*/
clr tr0/*是,則不發(fā)音*/
ajmp d1/*跳到D1*/
sing: dec a/*取到的音符碼減1(不含0)*/
mov 22h,a/*存入22H*/
rl a/*乘2*/
mov dptr,#tab1/*至TAB1取相對(duì)的低位字節(jié)計(jì)數(shù)值*/
movc a,@a+dptr
mov th0,a/*取到的高位字節(jié)存入TH0*/
mov 21h,a/*取到高位字節(jié)存入21H*/
mov a,22h/*再載入取到的音符碼*/
rl a/*乘2*/
inc a/*加1*/
movc a,@a+dptr/*至TAB1取相對(duì)的低字節(jié)計(jì)數(shù)值*/
mov tl0,a/*取到的低位字節(jié)存入TL0*/
mov 20h,a/*取到的低位字節(jié)存入20H*/
setb tr0/*啟動(dòng)T0*/
d1: acall delay/*基本單位時(shí)間1/4拍187毫秒*/
inc 30h/*取簡(jiǎn)碼指針加1*/
ajmp next/*取下一個(gè)碼*/
end0: clr tr0/*停止T0*/
ajmp start/*重復(fù)循環(huán)*/
intt0: push acc/*將A的值暫存于堆棧*/
push psw/*將PSW的值暫存于堆棧*/
mov tl0,20h/*重設(shè)計(jì)數(shù)值*/
mov th0,21h
cpl p2.1/*將P1.7位反相*/
pop psw
pop acc/*從堆棧取回A,PSW的值*/
reti/*中斷返回*/
delay: mov r7,#02h/*187MS延時(shí)*/
dl1: mov r4,#187
dl2: mov r3,#248
djnz r3,$
djnz r4,dl2
djnz r7,dl1
djnz r5,delay/*決定節(jié)拍*/
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -