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

📄 蜂鸣器之2002年的第一场雪.asm

📁 AT89S52单片机程序50例(00-50)
💻 ASM
字号:
;蜂鸣器之2002年的第一场雪
;P1.0接蜂鸣器

     SPK BIT P1.0
 
     ORG 0000H
     LJMP MAIN
     ORG 000BH
     LJMP TIMER0
 
MAIN:MOV TMOD,#01H  ;置CT0定时工作方式1
     MOV IE,#82H   ;CPU开中断,CT0开中断 
     MOV R5,#00H   
NEXT:MOV A,R5   ;R5存放取数的变地址
     MOV DPTR,#TABLE  ;DPTR置音高节拍表首地址
     MOVC A,@A+DPTR  ;从音高节拍表取中取音高高位参数
     MOV R4,A   ;R4存放音高高位参数
     INC R5
     MOV A,R5
     MOVC A,@A+DPTR  ;从音高节拍表取中取音高低位参数
     MOV R3,A   ;R3存放音高低位参数
     INC R5
     MOV A,R5   
     MOVC A,@A+DPTR  ;从音高节拍表取中取节拍参数 
     JNZ NEXT1   
     MOV R5,#00H   
     JMP NEXT   ;唱完后循环(节拍参数为#00H表示歌曲结束)
NEXT1:MOV R2,A   ;R2存放节拍参数
      LCALL SONG   ;调用音符播放程序
      INC R5
      SJMP NEXT   ;转入调用下一个音符

SONG:MOV TH0,R4   
     MOV TL0,R3
     SETB TR0   ;启动CT0(开始唱某一音符)

;===  节拍延时(即某一音符唱多长时间)  ===
DELAY:MOV R1,#85H
 DEL1:MOV R0,#0FFH
 DEL0:NOP
      NOP
      NOP
      DJNZ R0,DEL0
      DJNZ R1,DEL1
      DJNZ R2,DELAY
      CLR TR0   ;禁止CT0(某一音符唱完后停止)
 RET

;===  定时中断程序(用于决定某一音符唱多高)  ===
TIMER0:CPL SPK
       MOV TH0,R4   
       MOV TL0,R3   
 RETI 

;===  音高节拍表,休止符用"FFH,FFH",结束用节拍为00H表示  ===
TABLE:DB 0FFH,0FFH,01H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H   
      DB 0FDH, 5BH,04H,0FDH, 08H,02H,0FCH,0ABH,02H,0FCH, 0BH,02H,0FCH, 0BH,02H,0FFH,0FFH,01H,0FCH, 0BH,02H  
      DB 0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH,0ABH,04H,0FCH,0ABH,02H,0FCH,0ABH,02H
      DB 0FBH, 8FH,02H,0FCH, 0BH,02H,0FCH, 0BH,04H,0FFH,0FFH,01H        
      DB 0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,04H,0FDH, 08H,02H,0FDH, 08H,02H    
      DB 0FDH, 5BH,04H,0FDH, 08H,02H,0FCH,0ABH,04H,0FDH, 08H,06H       
      DB 0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH, 03H,02H,0FAH, 14H,02H   
      DB 0FCH,0ABH,04H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH, 0BH,02H,0FCH, 0BH,04H     
      DB 0FFH,0FFH,01H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H,0FDH, 08H,02H
      DB 0FDH, 5BH,04H,0FDH, 08H,02H,0FCH,0ABH,04H,0FDH, 08H,06H     
      DB 0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH,08FH,02H,0FBH, 03H,02H,0FAH, 14H,02H
      DB 0FCH,0ABH,04H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH,0ABH,02H,0FCH, 0BH,02H,0FCH, 0BH,04H, 00H, 00H,00H  
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -