实例介绍
【实例简介】蜂鸣器
接线方法: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();
}
}
}
标签: 蜂鸣器
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论