⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 蜂鸣器之老鼠爱大米.asm

📁 AT89S52单片机程序50例(00-50)
💻 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 + -