基本信息
源码名称:蜂鸣器发出“世上只有妈妈好”音乐(流水灯)
源码大小:4.62KB
文件格式:.c
开发语言:C/C++
更新时间:2020-08-11
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 1 元 
   源码介绍

蜂鸣器

接线方法: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();
}

}