嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 1 元微信扫码支付:1 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
蜂鸣器
接线方法:P10接Beep
实验现象:蜂鸣器发出“世上只有妈妈好”音乐。
/*************** (C) Copyright 2012 Keyongbin, All rights reserved ***************
* 文件名 : OneFrequency.c
* 作者 : keyongbin
* 版本 : V1.0
* 完成日期 : 2012-02-3
接线方法:P10接Beep
实验现象:蜂鸣器发出“世上只有妈妈好”音乐。
*********************************************************************************/
#include <reg52.H>
sbit Speak = P1^0; //定义音乐输出端口
unsigned char Timer0_TH0 = 0;
unsigned char Timer0_TL0 = 0;
unsigned char Time = 0;
/*********************************************************************
* “世上只有妈妈好” 乐谱
**********************************************************************/
unsigned char code Music[]={
6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
/*********************************************************************
* 音阶频率表 高八位
**********************************************************************/
unsigned char code HighFrequency[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,
0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF
} ;
/*********************************************************************
* 音阶频率表 低八位
**********************************************************************/
unsigned char code LowFrequency[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,
0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16
};
/**********************************************************************
函 数 名:Delay_US(unsigned int Time)
功 能:软件延时函数
说 明:延时时间 t = Time * 2 5 us ,12MHZ晶振
参 数: Time:延时时间
返 回 值:无
***********************************************************************/
void Delay_US(unsigned int Time)
{
while(--Time);
}
/**********************************************************************
函 数 名:Delay_MS(unsigned char Time)
功 能:软件延时函数
说 明:延时时间 t = Time * 2 5 us ,12MHZ晶振
参 数: Time:延时时间
返 回 值:无
***********************************************************************/
void Delay_MS(unsigned char Time)
{
while(Time--) //大致延时1mS
{
Delay_US(240);
Delay_US(240);
}
}
/**********************************************************************
函 数 名:Delay_Music(unsigned char Time)
功 能:节拍延时函数
说 明:调1/4 310ms 调2/4 250ms 调3/4 187ms 调4/4 125ms
参 数: Time:延时时间
返 回 值:无
***********************************************************************/
void Delay_Music(unsigned char Time)
{
unsigned char i = 0;
for(i = 0;i < Time;i )
Delay_MS(100);
TR0 = 0;
}
/**********************************************************************
函 数 名:Timer0ISR(void)
功 能:定时器0溢出中断服务程序
说 明:无
参 数: 无
返 回 值:无
***********************************************************************/
void Timer0ISR(void) interrupt 1 using 0
{
TR0 = 0;
Speak = ~Speak;
TH0 = Timer0_TH0;
TL0 = Timer0_TL0;
TR0 = 1;
}
/**********************************************************************
函 数 名:DealMusic(void)
功 能:定时器0溢出中断服务程序
说 明:无
参 数: 无
返 回 值:无
***********************************************************************/
void DealMusic(void)
{
TH0 = Timer0_TH0; //定时器赋值
TL0 = Timer0_TL0;
TR0 = 1; //开定时器
Delay_Music(Time); //节拍时间
}
/**********************************************************************
函 数 名:main(void)
功 能:主函数
说 明:无
参 数: 无
返 回 值:无
***********************************************************************/
void main(void)
{
unsigned char i,j;
TMOD |= 0x01; //定时器0工作方式1
EA = 1; //开全局中断
ET0 = 1; //开定时器0中断
while(1)
{
i = 0;
while(i < 100) //音乐数组长度,循环播放
{
j = Music[i] 7 * Music[i 1] - 1; //取音乐数据
Timer0_TH0 = HighFrequency[j];
Timer0_TL0 = LowFrequency [j];
Time = Music[i 2]; //节拍时长
i = i 3;
DealMusic();
}
}
}