51单片机蜂鸣器音乐

能不能告诉我,怎样用51单片机蜂鸣器播放《青花瓷》?急求…... 能不能告诉我,怎样用51单片机蜂鸣器播放《青花瓷》?急求… 展开
 我来答
来自茫荡山花枝招展的马更歇狼
推荐于2017-09-11 · TA获得超过271个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:122万
展开全部
首先用定时器操作蜂鸣器发出不同的频率,而音阶也就是1(do)、2(re)、3(mi)等等就是不同的频率,找到他们的频率表就可以发出对应的音阶。
然后用定时器操作一拍的时间,也就是每个音阶发声 的时间长短。
最后把上面两个内容封装成函数,把青花瓷的谱子做成响应的参数,就可以实现了

不过,蜂鸣器发出高音不太好,基本属于噪音范畴,所以推荐用喇叭之类的。

有问题再联系哈。
追问
怎么用定时器做出不同频率呢?
追答
/*
1.功能:调制不同频率发声程序,
2.函数:Make_Sound(频率,时长),BellFrqy(频率)一直响,
3.要先初始化Timer0_Init(),占用定时器0
4.变量:
晶振频率F,可更改
发声管脚Bell,可更改
音阶数组tone[]
*/
#include"reg52.h"
#include"delay.c"
#define F 12000000 //定义晶振频率
sbit Bell=P1^1; //定义蜂鸣器的地址
unsigned int num;
unsigned int code tone[]={0,523,587,659,698,785,880,988,1047,1175,1329,1397,1568,1760,1976}; //音阶频率
void Timer0_Init()
{
TMOD=0x01;
ET0=1;
EA=1;
}
void BellFrqy(unsigned int fre) //frequency 频率。制定BEll按频率响应函数 使用定时器0 参数为所需频率
{
TR0=0;
num=F/(fre*24);
TL0=(65536-num)%256; //设置定时初值
TH0=(65536-num)/256;
TR0=1;
}
void timer0() interrupt 1
{
TR0=0;
Bell=~Bell;
TL0=(65536-num)%256;
TH0=(65536-num)/256;
TR0=1;
}
void Make_Sound(unsigned int fre,unsigned int time)
{
BellFrqy(fre); //发出fre频率的声音
delay_ms(time); //声音持续是时间
TR0=0; //声音停止
}

这是我当初编的,发出固定频率只用BellFrqy函数就行了,Make_Sound用来发出一定时间的声音,你应该用不到。
宿兴电子
2024-11-28 广告
产品展示1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1... 点击进入详情页
本回答由宿兴电子提供
生活如歌_
2012-12-05 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2171万
展开全部
你需要把青花瓷的谱子变成数字(定时器的时间)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ohm2
2012-12-05
知道答主
回答量:6
采纳率:0%
帮助的人:8177
展开全部
你先得弄清这首歌的音节与节拍,再将它们转化成不同的频率,只有知道这些后才能用C51编程实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式