PIC单片机实现音乐播放

发布者:HeavenlyClouds最新更新时间:2011-02-18 手机看文章 扫描二维码
随时随地手机看文章

源程序:



以下程序要用二个定时器资源,凡是有二个定时器的PIC单片机均可实现,该范例需要的MCU是MICROCHIP PIC16C62

INCLUDE "D:PICP16XX.EQU"   ;该文件在MICROCHIP光盘中可找到

;**************************************************

#define BeepOut RC,4

;**************************************************

W_TEMP EQU 0X20 ;(0XA0)

STATUS_TEMP EQU 0X21 

BeepCnt equ 30h

TmrBak equ 31h

BeepMode equ 32h

Sflag equ 33h

;**************************************************

CSTIME100MS equ .8;

;**************************************************

;Sflag

Fg_100ms equ 0

FgBeep equ 1 

;**************************************************

    ORG 000H;

    GOTO MAIN ; Skip over interrupt vecter

    ORG 04H ; Interrupt Vector

    GOTO INTZ



;**************************************************

OkTab:

    movf BeepCnt,w

    addwf PCL,f

    retlw .255-.130;0xf6 ;1 ;

    retlw .255-.126;0xfa ;2 ;

    retlw .255-.119; 0xfd ;3 ;

    retlw 0

;**************************************************

WhisleTab:

    movf BeepCnt,w

    addwf PCL,f

    retlw .255-.239;523Hz ;0 ;

    retlw .255-.179;698Hz ;1 ;

    retlw .255-.159;784Hz ;2 ;

    retlw .255-.119;1046Hz ;3 ;

    retlw .0

;**************************************************

HangTab:

    movf BeepCnt,w

    addwf PCL,f

    retlw .255-.159; 784Hz ;0 ;

    retlw .255-.119; 1046Hz ;1 ;

    retlw .255-.150; 830Hz ;2 ;

    retlw .255-.112 ;1109Hz ;3 ;

    retlw .255-.142 ;880Hz ;4 ;

    retlw .255-.106;1174Hz ;5 ;

    retlw .255-.134;932Hz ;6 ;

    retlw .255-.100;1244Hz ;7

    retlw .255-.126;988Hz ;8;

    retlw .255-.94;1318Hz ;9;

    retlw .255-.119;1046Hz ;10 ;

    retlw .255-.89;1397Hz ;11 ;

    retlw .0



;**************************************************

WelcomTab:

    movf BeepCnt,w

    addwf PCL,f

    retlw .255-.89;1397Hz ;11 ;

    retlw .255-.119;1046Hz ;10 ;

    retlw .255-.94;1318Hz ;9;

    retlw .255-.126;988Hz ;8;

    retlw .255-.100;1244Hz ;7

    retlw .255-.134;932Hz ;6 ;

    retlw .255-.106;1174Hz ;5 ;

    retlw .255-.142 ;880Hz ;4 ;

    retlw .255-.112 ;1109Hz ;3 ;

    retlw .255-.150; 830Hz ;2 ;

    retlw .255-.119; 1046Hz ;1 ;

    retlw .255-.159; 784Hz ;0 ;

    retlw .0

;**************************************************

    BeepModeJmp:

    addwf PCL,f

    b psWhisle ;0

    b psOk ;1

    b psHang ;2

    b psWelcom ;3

;**************************************************

IO_SET:

    BANK1_

    MOVLW B’11001011’

    MOVWF TRISA

    MOVLW B’00001100’

    movwf TRISB 

    MOVLW B’00000011’

    movwf TRISC ; Set Port_C to all outputs

    BANK0_

    RETURN

;**************************************************

SYS_SET:

    BANK1_ 

    MOVLW B’00000111’ ; 1:256 TMR0分频

    MOVWF OPTION_R 

    BSF PIE1,TMR2IE ;TMR2中断允许

    BANK0_ 

    MOVLW B’00000001’ ;开TMR1

    MOVWF T1CON

    bsf INTCON,TOIE ;TMR0中断允许

    BSF INTCON,PEIE ;允许所有未被屏蔽之外围接口中断

    RETURN

;**************************************************

MAIN: ; Main rotation

    CALL IO_SET

    MOVLW B’00000000’ ;关所有中断

    MOVWF INTCON

;****************************

    CALL SYS_SET

;****************************

    call PlayPsWelcom ;上电提示音

MAINLOOP:

    bsf INTCON,GIE ;开所有中断

    CLRWDT ; Clear WDT

    call BeepFor

    B MAINLOOP

;**************************************************

INTZ:

    PUSH ; Push ;中断服务程序

    BTFSC PIR1,TMR2IF ;测试TMR2中断标志位

    b INT_TMR2 ;

    BTFSC INTCON,TOIF ;测试TMR0中断标志位

    GOTO INT_TMR0

IntRet:

    POP ; Pop

    RETFIE

;************************************************** 

INT_TMR2:

    BCF PIR1,TMR2IF ;清TMR2中断标志位

    movf TmrBak,w

    movwf TMR2

    CPL BeepOut

BeeperEnd:

    b IntRet

;**************************************************

INT_TMR0: ;定时0中断

    BCF INTCON,TOIF ; clear INTF

    MOVLW .255-.38 ;10ms

    MOVWF TMR0 

    ;====================

    decfsz T100ms,f

    b int_tmr0_ret

    movlw CSTIME100MS

    movwf T100ms

    bsf Sflag,Fg_100ms

    ;=====================

int_tmr0_ret:

    b IntRet

;**************************************************

PlayPsWhisle:

    bsf Fg,FgBeep

    clrf BeepCnt

    movlw .0

    movwf BeepMode

    movlw CSTIME100MS

    movwf T100ms

    retlw 0

;**************************************************

PlayPsOk:

    bsf Fg,FgBeep

    clrf BeepCnt

    movlw .1

    movwf BeepMode

    movlw CSTIME100MS

    movwf T100ms

    retlw 0

;**************************************************

PlayPsHang:

    bsf Fg,FgBeep

    clrf BeepCnt

    movlw .2

    movwf BeepMode

    movlw CSTIME100MS

    movwf T100ms

    retlw 0

;**************************************************

PlayPsWelcom:

    bsf Fg,FgBeep

    clrf BeepCnt

    movlw .3

    movwf BeepMode

    movlw CSTIME100MS

    movwf T100ms

    retlw 0

;**************************************************

;音乐播放程序

;BeepMode=0 : psWhisle

;BeepMode=1 : psOk

;BeepMode=2 : psHang

;BeepMode=3 : psWelcom

;**************************************************

BeepFor:

    btfss Sflag,Fg_100ms

    b BeepForEnd

    bcf Sflag,Fg_100ms

    btfss Sflag,FgBeep

    b BeepForEnd

    MOVLW B’00000101’ ;开TMR2 1:4分频

    MOVWF T2CON

    movf BeepMode,w

    b BeepModeJmp

psWhisle:

    call WhisleTab

    b BeepPlay

psOk:

    call OkTab

    b BeepPlay

psHang:

    call HangTab

    b BeepPlay

psWelcom:

    call WelcomTab

    b BeepPlay

BeepPlay:

    incf BeepCnt,f

    movwf TmrBak

    movf TmrBak,f

    btfsc status,z

    b BeepOff

    movlw .1

    xorwf TmrBak,w

    btfsc status,z

    b BeepStop

    b BeepForEnd

BeepOff:

    clrf BeepCnt

    bcf Sflag,FgBeep

    bcf BeepOut

    bcf T2CON,TMR2ON

    b BeepForEnd

BeepStop:

    bcf T2CON,TMR2ON ;stop

    bcf BeepOut

    BeepForEnd:

    retlw 0

;**************************************************

END  
 
引用地址:PIC单片机实现音乐播放

上一篇:用定制测量表达式简化PSpice对最坏情形的模拟
下一篇:基于MSP430单片机和DS18B20的数字温度计

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved