3个回答
展开全部
首先用定时器操作蜂鸣器发出不同的频率,而音阶也就是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 广告
2024-11-28 广告
产品展示1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询