📄 蜂鸣器之老鼠爱大米.asm
字号:
;蜂鸣器之老鼠爱大米
;P1.0接蜂鸣器
SPK EQU P1.0 ;定义P1.0为蜂鸣器
ORG 0000H ;程序开始地址
LJMP START ;跳转至START
ORG 000BH ;定时计/数器T0溢出中断矢量地址
INC 20H ;中断服务,中断计数器(20H)加1
MOV TH0,#0D8H ;重新初始化定时器T0为0D8F0H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI ;中断返回
;主程序
START:MOV SP,#50H ;栈顶地址为50H
MOV TH0,#0D8H ;初始化定时器T0为0D8F0H,形成10毫秒中断
MOV TL0,#0EFH
MOV TMOD,#01H ;定时计/数器T0采用定时方式1,16为计数器
MOV IE,#82H ;CPU开总中断,T0开溢出中断
MUSIC0:NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MUSIC1:NOP
CLR A ;A清零
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;A是00H,则跳转至END0
CJNE A,#0FFH,MUSIC5 ;如果是休止符(0FFH),往下执行;否则,跳转至MUSIC5
LJMP MUSIC3
MUSIC5:NOP
MOV R6,A ;R6=18H音符的频率,即0FFH
INC DPTR ;DPTR加一
MOV A,#00H
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A ;R7=30H音符发音的时间
SETB TR0 ;启动定时/计数器T0
MUSIC2:NOP
CPL SPK ;音乐输出口控制
MOV A,R6
MOV R3,A ;R3=R6=18H
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR
LJMP MUSIC1
;休止100毫秒
MUSIC3:NOP
CLR TR0 ;关闭T0
MOV R2,#0DH ;R2=13
MUSIC4:NOP
MOV R3,#0FFH ;R3=255
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
;歌曲结束,延时1秒后继续
END0:NOP
MOV R2,#0FFH
MUSIC6:MOV R3,#00H
LCALL DEL
DJNZ R2,MUSIC6
LJMP MUSIC0
;延时子程序
DEL:NOP
DEL3:MOV R4,#02H
DEL4:NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
;音符的频率表,即需要延时多少个10毫秒。
DAT:DB 30H,20H,2BH,10H,26H,10H
DB 26H,20H,26H,20H,2BH,20H,30H,10H,2BH,10H,2BH,60H,30H,10H,2BH,10H
DB 26H,20H,26H,20H,2BH,20H,30H,20H,30H,60H,40H,10H,39H,10H
DB 40H,40H,40H,10H,40H,10H,39H,10H,30H,10H,30H,60H,30H,20H
DB 30H,20H,30H,20H,30H,10H,2BH,10H,2BH,40H,30H,20H,2BH,10H,26H,10H
DB 26H,20H,26H,20H,20H,20H,1CH,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H
DB 30H,20H,30H,20H,2BH,20H,26H,10H,20H,10H,20H,60H,40H,10H,40H,10H
DB 39H,20H,30H,10H,30H,10H,30H,10H,26H,30H,2BH,20H,30H,20H,30H,20H,2BH,10H,30H,10H
DB 30H,0C0H,26H,20H,26H,10H,20H,10H
DB 20H,20H,20H,10H,20H,10H,20H,20H,20H,10H,1CH,10H,1CH,40H,26H,20H,2BH,20H
DB 30H,20H,30H,20H,30H,20H,2BH,10H,26H,10H,26H,60H,26H,10H,20H,10H
DB 20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,20H
DB 2BH,20H,30H,20H,30H,20H,39H,10H,2BH,10H,2BH,60H,26H,10H,20H,10H
DB 20H,20H,20H,20H,20H,10H,1CH,20H,20H,10H,1CH,40H,26H,20H,2BH,20H
DB 30H,20H,30H,20H,30H,20H,2BH,10H,26H,10H,26H,60H,26H,10H,20H,10H
DB 20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,10H,2BH,10H
DB 2BH,20H,2BH,20H,2BH,80H,30H,10H,26H,20H,24H,10H
DB 26H,20H,2BH,20H,2BH,80H,26H,20H,2BH,10H,30H,10H
DB 30H,40H,26H,20H,2BH,10H,30H,10H,30H,40H,26H,20H,2BH,20H
DB 26H,20H,30H,20H,26H,20H,1CH,10H,20H,10H,20H,60H,26H,10H,20H,10H
DB 1CH,20H,1CH,10H,20H,10H,20H,20H,1CH,10H,20H,10H,20H,40H,26H,10H,2BH,10H,30H,20H
DB 2BH,20H,2BH,10H,26H,10H,2BH,20H,30H,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H
DB 30H,40H,26H,20H,2BH,10H,30H,10H,30H,40H,26H,20H,2BH,20H
DB 26H,20H,30H,20H,26H,10H,1CH,20H,20H,10H,20H,60H,26H,10H,20H,10H
DB 1CH,20H,1CH,20H,18H,20H,20H,10H,1CH,10H,20H,30H,20H,10H,26H,10H,2BH,10H,30H,20H
DB 2BH,40H,2BH,10H,30H,10H,2BH,10H,26H,10H,2BH,40H,26H,20H,26H,20H,2BH,60H,30H,20H,30H,0C0H
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -