查看: 5062|回复: 8
打印 上一主题 下一主题

“因仑‘3+1’工程特种兵擂台赛”(因仑华山论剑)

[复制链接]
沙发
发表于 2014-7-19 08:59:55 | 显示全部楼层
我来试一下,
回复 支持 反对

使用道具 举报

板凳
发表于 2014-7-19 10:02:03 | 显示全部楼层
本帖最后由 SDC158477392 于 2015-1-16 22:44 编辑

产生简单音频提示音乐,在蜂鸣器上发出
1、音乐样本:5   i  5   4 | 3   2  1 | 1  1  2  3 | 3  1  3  4 | 5 -
2、提示:在许多简单应用中,需要利用单片机系统产生各种音乐用于报警和提示等,如手机的来电铃声,儿童玩具,时钟的音乐报时等。用单片机产生各种音乐发声的原理很简单,就是由I/O引脚输出不同频率的脉冲信号,再将信号放大,推动发声器件发声(这里是指在要求不高的情况下,用不同频率的脉冲方波替代正弦波)。
/*******************************************************
*   程序功能:用蜂鸣器播放我爱北京天安门,
*   硬件说明:使用STC15F2K61S2,P3^2接一个按键为播放键。P3^0接一个无源蜂鸣器。
*   实验现象:通过按DK0按钮开启蜂鸣器,播放我爱北京天安门
*        日    期 : 2014/7/19
*        作    者 : xxx
*******************************************************/

#include<STC15F2K60S2.h>
#define FOSC 12000000                         //系统频率为12M
#define uchar unsigned char          //用uchar代替unsigned char
#define uint unsigned int                 //用uint代替unsigned int
uint i=0,j=0;
uint  S[]={784,1046,784,698,659,578,523,523,523,578,659,659,523,659,698,784,0};        //每个音符的频率
uchar T[]={157, 209,157,140,132,116,208,104,104,116,132,132,104,132,140,628};        //每个音符所持续的时间

/*******************************************************
//函数名称:Init_timer()
//函数功能:定时器0,外部中断0初始函数 12T模式
//入口参数:无
//返回参数:无
********************************************************/
void Init_timer()
{
IT0=1;
EX0=1;//外部中断初始化
TMOD=0x00; //定时器模式设置为16为自动重装
TL0=65536-FOSC/S[0]/12/2;               
TH0=(65536-FOSC/S[0]/12/2)>>8;
ET0=1;         //定时器0初始化
EA=1;        //开总中断
}
/*******************************************************
//函数名称:Int0()()
//函数功能:外部中断0服务程序
//入口参数:无
//返回参数:无
********************************************************/
void Int0()interrupt 0
{
Init_timer();
TR0=1; //开启定时器中断0
}
/*******************************************************
//函数名称:timer0()
//函数功能:定时器中断0服务程序
//入口参数:无
//返回参数:无
********************************************************/
void timer0()interrupt 1
{
P30=!P30; //输出PWM波
i++;
if(i==T[j]*5)
{ i=0;
j++;
TL0=65536-FOSC/S[j]/12/2;
TH0=(65536-FOSC/S[j]/12/2)>>8;
}                                                                //重装初值
if(S[j]==0)
{                                                                 
j=0;
TR0=0;
}                                 //检测音乐是否播完,播完关闭定时器0 ,停止播放
}
/*******************************************************
//函数名称:main()
//函数功能:程序主函数
********************************************************/
void main()
{
P3M1 &= ~1; //P3.0 设置为推挽输出
P3M0 |=  1;
Init_timer();
while(1);
}
回复 支持 2 反对 0

使用道具 举报

地板
发表于 2014-7-19 10:02:36 | 显示全部楼层
支持的就赞一下吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表