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

📄 刀郎_2002年的第一场雪.asm

📁 单片机唱歌_刀郎_2002年第一场雪源码
💻 ASM
字号:
; 单片机演奏歌曲,刀郎《2002年的第一场雪》
; 作者: chenming
; 出处:伟纳电子论坛 www.willar.com


SPK BIT P3.7
 
 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 
TABLE:                  ;音高节拍表,休止符用"FFH,FFH",结束用节拍为00H表示
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 + -