PIC单片机音乐播放程序

发布者:Haifeeng最新更新时间:2017-12-06 来源: eefocus关键字:PIC单片机  音乐播放 手机看文章 扫描二维码
随时随地手机看文章

以下程序要用二个定时器资源,凡是有二个定时器的PIC 单片机 均可实现,该范例需要的MCU是MICROChip PIC16C62  
INCLUDE "D:\PIC\P16XX.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:  
MOV f BeepCnt,w  
addwf PCL,f  
retlw .255-.130;0xf6 ;1 ;  
retlw .255-.126;0xfa ;2 ;  
retlw .255-.119; 0xfd ;3 ;  
retlw 0  
;**************************************************  
WhisleTab:  
MOV f 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:  
MOV f 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:  
MOV f 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_  
MOV LW B’11001011’  
MOV WF TRISA  
MOV LW B’00001100’  
MOV wf TRISB  
MOV LW B’00000011’  
MOV wf TRISC ; Set Port_C to all outputs  
BANK0_  
RETURN  
;**************************************************  
SYS_SET:  
BANK1_  
MOV LW B’00000111’ ; 1:256 TMR0分频  
MOV WF OPTION_R  
BSF PIE1,TMR2IE ;TMR2中断允许  
BANK0_  
MOV LW B’00000001’ ;开TMR1  
MOV WF T1CON  
bsf INTCON,TOIE ;TMR0中断允许  
BSF INTCON,PEIE ;允许所有未被屏蔽之外围接口中断  
RETURN  
;**************************************************  
MAIN: ; Main rotation  
CALL IO_SET  
MOV LW B’00000000’ ;关所有中断  
MOV WF 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中断标志位  
MOV f TmrBak,w  
MOV wf TMR2  
CPL BeepOut  
BeeperEnd:  
b IntRet  
;**************************************************  
INT_TMR0: ;定时0中断  
BCF INTCON,TOIF ; clear INTF  
MOV LW .255-.38 ;10ms  
MOV WF TMR0  
;====================  
decfsz T100ms,f  
b int_tmr0_ret  
MOV lw CSTIME100MS  
MOV wf T100ms  
bsf Sflag,Fg_100ms  
;=====================  
int_tmr0_ret:  
b IntRet  
;**************************************************  
PlayPsWhisle:  
bsf Fg,FgBeep  
clrf BeepCnt  
MOV lw .0  
MOV wf BeepMode  
MOV lw CSTIME100MS  
MOV wf T100ms  
retlw 0  
;**************************************************  
PlayPsOk:  
bsf Fg,FgBeep  
clrf BeepCnt  
MOV lw .1  
MOV wf BeepMode  
MOV lw CSTIME100MS  
MOV wf T100ms  
retlw 0  
;**************************************************  
PlayPsHang:  
bsf Fg,FgBeep  
clrf BeepCnt  
MOV lw .2  
MOV wf BeepMode  
MOV lw CSTIME100MS  
MOV wf T100ms  
retlw 0  
;**************************************************  
PlayPsWelcom:  
bsf Fg,FgBeep  
clrf BeepCnt  
MOV lw .3  
MOV wf BeepMode  
MOV lw CSTIME100MS  
MOV wf 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  
MOV LW B’00000101’ ;开TMR2 1:4分频  
MOV WF T2CON  
MOV f 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  
MOV wf TmrBak  
MOV f TmrBak,f  
btfsc status,z  
b BeepOff  
MOV lw .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单片机  音乐播放 引用地址:PIC单片机音乐播放程序

上一篇:PIC17CXX器件的C语言中断保存/恢复语句
下一篇:PICC 电子钟程序

推荐阅读最新更新时间:2024-03-16 15:48

PIC单片机12F629烧录器电路设计与制作
有人问: IC 烧录能不能也作一个教学呢? 木村豆桃哉在想...用LEAPER-48万用烧录器 1.把手往下扳 2.把IC放上去 3.关上把手 4.选择IC厂牌/编号 5.载入HEX档 6.按下烧录 7.等PASS出现就好了 为什么要教学呢??? 所以...应该是没有万用烧录器的话要怎麽办呢?所以木村豆桃哉决定要来试试看,那个烧录器的 电路 是真还是假.如果不能用的话,不是发佈了错误讯息害人了吗? 但是又想...有万用烧录器可以用,为什麽要再做一个烧录器呢?超级矛盾~ 好奇嘛,做了一个试试看呗... 上网看了原版的线路图...头都晕了 @_@ 原图烧12F629还要修改... 再找找其他简单一点的图吧 在网路上找到一个用Z
[单片机]
<font color='red'>PIC单片机</font>12F629烧录器电路设计与制作
PIC单片机存储器拓展
生活中感应水龙头越发的常见了,公共场所使用也更加的频繁,感应水龙头,顾名思义,就是通过红外线感应出水。那么感应水龙头的功能是通过什么实现的呢? 感应水龙头,是通过红外线反射原理,当人体的手放在水龙头的红外线区域内,红外线发射管发出的红外线由于人体手的摭挡反射到红外线接收管,通过集成线路内的微电脑处理后的信号发送给脉冲电磁阀,电磁阀接受信号后按指定的指令打开阀芯来控制水龙头出水;当人体的手离开红外线感应范围,电磁阀没有接受到信号,电磁阀阀芯则通过内部的弹簧进行复位来控制水龙头的关水。 感应水龙头供电检测的功能实现主要通过英锐恩开发芯片PIC16F684。就是通过芯片程序检测感应水龙头供电情况。当芯片检测电池没有正常供电时,芯
[单片机]
PIC单片机模拟异步串行通讯UART
用TMR0实现定时查询。任何带中断的PIC上都可以实现。可用此法扩展多个串口。 ;|--------------------------------------------------------------| ;| Implement duplex USART base on normal I/O pin | ;| Using TIMER0 interrupt for bit timing | ;| Tested on PIC16F83 running at 4MHz | ;| Written by Paul Zhang, Microchip Tech Inc
[单片机]
PIC单片机系统定义字的含义解析
  在PIC芯片内有一特殊的系统定义字含有4个EPROM熔丝。它不是程序存贮器EPROM的组成部分(不包括在0.5K-2K的程序空间内)。其中两个熔丝用以选择四种振荡方式(RC、XT、HS、LP),另两个熔丝一个用来选择使能(enable)看门狗WDT,一个用来选择使能程序保密位。   用户可以在烧写OTP或窗口型芯片时,选择烧写这四个熔丝。详见第七章烧写工具介绍说明。对于腌膜芯片,则由生产厂根据客户需要在芯片生产过程中予以烧写。   §1.12.1 程序保密位(Protection Fuse)   当你选择将芯片的程序保密位熔丝熔断(写入0)后,程序存贮区ROM中的程序代码(12位宽)的高8位将被遮没。具体地说,就是当再
[单片机]
<font color='red'>PIC单片机</font>系统定义字的含义解析
PIC单片机实现的IC卡读写器
摘要:详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。 关键词:PIC单片机 IC卡读写器 SPI方式 USART方式 引言 本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。 图1是本
[单片机]
PIC单片机电源供电设计经验
使用PIC单片机过程中,我经常遇到使用单片机时,只注重软件,而轻视硬件的设计人员。 功能调试一切正常,但是在产品使用时,常出现各种各样的问题;这不仅与软件的健壮性相关,同时也与硬件设计不够完善有很大关系;有些开发人员(尤其是偏重软件设计的开发人员)会提出:硬件不足的软件来弥补。 但实际情况是在硬件设计严重不足,软件弥补的产品将不能提供很高的可靠性。 就此,简单分享下我在硬件设计,提高可靠性的经验;当然,仅是对我使用PIC单片机积累的经验而已,不足之处,还请见谅。 单片机的电源供电设计: 1.芯片无论是否使用模拟部分和AD部分,外围的VDD和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬
[单片机]
PIC单片机入门_定时器TMR2详解与实例
1.前言 这里将介绍另一款定时器TMR2模块,TMR2与前面介绍的TMR0和TMR1相比,最大的差别是只能工作于定时模式,因此称它为“定时器TMR2”。 2.TMR2的特性 TMR2为8位宽,附带二个4位宽的分频器:一个“预分频器”和一个“后分频器”,一个可编程的8位周期寄存器PR2。其主要用途: 1. 可以用作时间定时器,但是不能作为计数器; 2. 可以为同步串行端口MSSP模块提供波特率时钟; 3. 可以与CCP模块配合使用,实现脉宽调制PWM功能。 TMR2的核心是一个可以由软件读/写的8位宽的计数器,它也是按递增计数,从某一初值(缺省为0)开始递增,直到与周期寄存器PR2中内容匹配之后,在下一次递增时则返回到00
[单片机]
<font color='red'>PIC单片机</font>入门_定时器TMR2详解与实例
用PIC16F877单片机实现的IC卡读写器
引言 本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。 图1是本设计的电路图,图中电源变换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通信数据线的保护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,从而保证数据线上的电压在0V~+5V之间
[单片机]
用PIC16F877单片机实现的IC卡读写器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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