您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>汇编编程>

单片机之汇编语言会唱歌

大小:0.1 MB 人气: 2017-09-06 需要积分:0
     DATA1   EQU   30H       ;
 DATA2   EQU   31H       ;
 SP1     EQU   P3.7      ;
;-----------------------------------------------------        
  ORG     0000H           ;
 LJMP    START           ;
 ORG     000BH           ;
 INC     DATA1           ;中断服务,中断计数器加1
 MOV     TH0,#0DBH       ;
 MOV     TL0,#0FEH       ;11.0592M晶振,形成10毫秒中断
 RETI                    ;
;---------------------------------------------------
START:
 CPL     SP1             ;
 MOV     SP,#50H         ;
 MOV     TH0,#0DBH       ;
 MOV     TL0,#0FEH       ;
 MOV     TMOD,#01H       ;
 MOV     IE,#82H         ;
VOICE0:
 NOP                     ;
 MOV     DPTR,#TABLE     ;表头地址送DPTR
 MOV     DATA1,#00H      ;中断计数器清0
 MOV     DATA2,#00H      ;表序号清0
VOICE1:
 NOP                     ;   
 CLR     A               ;
 MOVC    A,@A+DPTR       ;查表取代码       
 JZ      EXIT_END        ;是00H,则结束
 CJNE    A,#0FFH,VOICE5  ;      
 LJMP    VOICE3          ;
VOICE5:      
 NOP                     ;
 MOV     R6,A            ;  
 INC     DPTR            ;         
 MOV     A,DATA2         ;    
 MOVC    A,@A+DPTR       ;取节拍代码送R7
 MOV     R7,A            ;    
 SETB    TR0             ;启动计数
VOICE2:      
 NOP                     ;
 CPL     P3.7            ;    
 MOV     A,R6            ;
 MOV     R3,A            ;   
 LCALL   DELAY           ;
 MOV     A,R7            ;    
 CJNE    A,DATA1,VOICE2  ;中断计数器(20H)=R7否?
    ;不等,则继续循环
 MOV     DATA1,#00H      ;等于,则取下一代码       
 INC     DPTR            ;    
 LJMP    VOICE1          ;
VOICE3:        
 NOP                     ;
 CLR     TR0             ;休止100毫秒
 MOV     R2,#0DH         ;
VOICE4:         
 NOP                     ;       
 MOV     R3,#0FFH        ;       
 LCALL   DELAY           ;   
 DJNZ    R2,VOICE4       ;     
 INC     DPTR            ;  
 LJMP    VOICE1          ;
;--------------------------------------------------
EXIT_END:        
 NOP        
 MOV     R2,#64H         ;歌曲结束,延时1秒后继续
VOICE6:        
 MOV     R3,#00H         ;      
 LCALL   DELAY           ;
 DJNZ    R2,VOICE6       ;       
 LJMP    VOICE0          ;
;--------------------------------------------------
DELAY:       
 NOP                     ;
DEL3: 
        MOV     R4,#02H         ;
DEL4: 
 NOP                     ;
 DJNZ    R4,DEL4         ;      
 NOP                     ;
 DJNZ    R3,DEL3         ;       
 RET                     ;              
;------------------------------------------------- 
TABLE:   
 DB      18H,     30H,     1CH ,    10H
 DB      20H,     40H,     1CH ,    10H 
 DB      18H,     10H,     20H ,    10H
 DB      1CH,     10H,     18H ,    40H
 DB      1CH,     20H,     20H ,    20H
 DB      1CH,     20H,     18H ,    20H 
 DB      20H,     80H,     0FFH,    20H
 DB      30H,     1CH,     10H ,    18H
 DB      20H,     15H,     20H ,    1CH
 DB      20H,     20H,     20H ,    26H
 DB      40H,     20H,     20H ,    2BH
 DB      20H,     26H,     20H ,    20H
 DB      20H,     30H,     80H ,    0FFH
 DB      20H,     20H,     1CH ,    10H
 DB      18H,     10H,     20H ,    20H
 DB      26H,     20H,     2BH ,    20H
 DB      30H,     20H,     2BH ,    40H
 DB      20H,     20H,     1CH ,    10H
 DB      18H,     10H,     20H ,    20H
 DB      26H,     20H,     2BH ,    20H
 DB      30H,     20H,     2BH ,    40H
 DB      20H,     30H,     1CH ,    10H
 DB      18H,     20H,     15H ,    20H
 DB      1CH,     20H,     20H ,    20H
 DB      26H,     40H,     20H ,    20H  
 DB      2BH,     20H,     26H ,    20H
 DB      20H,     20H,     30H ,    80H
 DB      20H,     30H,     1CH ,    10H
 DB      20H,     10H,     1CH ,    10H
 DB      20H,     20H,     26H ,    20H
 DB      2BH,     20H,     30H ,    20H
 DB      2BH,     40H,     20H ,    15H
 DB      1FH,     05H,     20H ,    10H
 DB      1CH,     10H,     20H ,    20H
 DB      26H,     20H,     2BH ,    20H
 DB      30H,     20H,     2BH ,    40H
 DB      20H,     30H,     1CH ,    10H
 DB      18H,     20H ,    15H ,    20H
 DB      1CH,     20H ,    20H ,    20H
 DB      26H,     40H,     20H ,    20H
 DB      2BH,     20H,     26H ,    20H
 DB      20H,     20H,     30H ,    30H 
 DB      20H,     30H,     1CH ,    10H
 DB      18H,     40H,     1CH ,    20H
 DB      20H,     20H,     26H ,    40H
 DB      13H,     60H,     18H ,    20H
 DB      15H,     40H,     13H ,    40H
 DB      18H,     80H,     00H
 END
 
 

2、单片机播放歌曲《兰花草》

 *******************************************************   
        SPK   EQU  P3.7   ; 蜂鸣器所在端口
 ORG 0000H
 JMP START
 
START:
 MOV R3,#00H
NEXT:
 MOV A,R3
 MOV DPTR,#TABLE
 MOVC A,@A+DPTR
 JZ START
 MOV R7,A
 INC R3
 MOV A,R3
 MOVC A,@A+DPTR
 MOV R2,A
 ACALL SONG
 INC R3
 SJMP NEXT

;=============================================================================== 
;===  歌曲播放子程序 ===
SONG:
 MOV A,R2     ; 取出节拍
 RL A
 JNZ KEEP
 MOV A,#01H
KEEP:
 MOV R2,A
REPEAT:
 ACALL EIGHTH
 DJNZ R2,REPEAT
 RET
 
;=============================================================================== 
;===  产生1/8拍延时子程序  ===  
EIGHTH:
 MOV A,R7     ; 查表取出廷时参数,保存到R4
 MOV DPTR,#DELAY_T
 MOVC A,@A+DPTR
 MOV R4,A
 MOV A,R7     ; 查表取出1/8拍周期数,保存到R5
 MOV DPTR,#S_PARA
 MOVC A,@A+DPTR
 MOV R5,A
NEXTCYC:
 ACALL SOUND
 DJNZ R5,NEXTCYC
 RET
 
;=============================================================================== 
;===  发声子程序 === 
SOUND:
 SETB SPK
 ACALL SDELAY
 CLR SPK
 ACALL SDELAY
 RET
 
;=============================================================================== 
;===  延时子程序  ===
SDELAY:
 MOV A,R4     ; 廷时值在R4内
 MOV R0,A
XL2:
 MOV R1,#03H
DL1:
 NOP
 DJNZ R1,DL1
 DJNZ R0,XL2
 RET
;=============================================================================== 
;===  1/8拍周期表  ===
S_PARA:
 DS 1DH
 DB 15H,16H,00
 DB 19H,00H,1CH,00H,1FH,21H,00H,25H
 DB 00H,29H,2CH,00H,31H,34H,37H,00H
 DB 3EH,41H,00H,49H,00H,52H,57H,00H
 DB 62H
 
;=============================================================================== 
;===  延时参数表  ===
DELAY_T:
 DS 1DH
 DB 7EH,77H,00H
 DB 6AH,00H,5EH,00H,54H,4FH,00H,46H
 DB 00H,3FH,3BH,00H,35H,32H,2FH,00H
 DB 2AH,27H,00H,23H,00H,1FH,1DH,0C0H
 DB 1AH
 
;=============================================================================== 
;===  歌曲表  ===
TABLE:
 DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来
 DW 2502H,2702H,2502H,2402H,2208H  ;带着兰花草
 DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中
 DW 2902H,2C02H,2D02H,2A02H,2908H  ;祈祷花开早
 DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回
 DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过
 DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然
 DW 2702H,2502H,2402H,2002H,2208H  ;苞也无一个
 DW 0000H     ;
 
 END 
 

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!