目录
- 蜂鸣器简介
- MIDI音乐制作原理
- 《小星星》制作代码展示
引言:在单片机开发中我们经常会用到蜂鸣器实现一些简单提示的功能,但如何利用单片机制作一些更有趣的事情呢,今天我们将利用蜂鸣器来制作一首好听的MIDI音乐。很多人可能会觉得没必要,用手机我们就就可以想听什么歌就听什么歌了,但其实对于我们单片机开发者来说自己动手写一个程序蜂鸣器按照我们给的频率响起来,会让我们的开发过程变的更加有趣,也使得我们拥有更加浓厚的兴趣学下去。
一蜂鸣器简介
有源蜂鸣器和无源蜂鸣器的区别:

讯享网
这里我们使用的是无源蜂鸣器,通过单片机予相应的频率使它发出相应的声音。
硬件设计图:

当我们PB5输出低电平使三极管导通,蜂鸣器就可以工作了,但由于我们使用的是无源蜂鸣器单纯的通电并不能使蜂鸣器发出鸣响,要使无源蜂鸣器鸣响需要我们PB5端口不断输出高低变化的脉冲信号,当信号频率不同时发出的声音就不同,根据这个原理,只要我们根据音乐乐谱让单片机PB5端口连续输出不同频率的信号蜂鸣器的鸣响就可以组成一支音乐啦。


如图单片机输出的信号是这样的一个高低电平信号,频率周期的数量就是蜂鸣器鸣响的时长,而改变每个频率周期中高低电平的比例就可以改变无源蜂鸣器发出的声音。

根据C字符对照表我们可以得到每个音调对应的频率。
二、《小星星》MIDI音乐制作过程

这是《小星星》的乐谱信息,根据上面的音调频率对照表,我们就可以把乐谱信息转化为频率信息。
相关乐谱信息:
乐谱图中重点看每个拍的时间信息
J=100表示每分钟有103拍,即60s=100拍,所以一拍的时间约为600ms
根据他是多少拍就可以算出蜂鸣器一个音调鸣响的时间

> `这里是引用` uc16 music1[64]={
//音乐1的数据表(奇数是对应音调频率,偶数是发声时间长度 523,600, 523,600, 784,600, 784,600, 880,600, 880,600, 784,600, 0,1200, 698,600, 698,600, 659,600, 659,600, 587,600, 587,600, 523,600, 0,1200, 784,600, 784,600, 698,600, 698,600, 659,600, 659,600, 587,600, 0,1200, 784,600, 784,600, 698,600, 698,600, 659,600, 659,600, 587,600, 0,1200 }; > `` > void MIDI_PLAY(void){
//MIDI音乐 > u16 i,e; > for(i=0;i<32;i++){
//这里因为这首歌有32个音调所以这里循环32次 > for(e=0;e<music1[i*2]*music1[i*2+1]/1000;e++){
> GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(0)); //蜂鸣器接口输出0 > delay_us(/music1[i*2]); //延时 > > GPIO_WriteBit(BUZZERP ORT,BUZZER,(BitAction)(1)); //蜂鸣器接口输出高电平1 > > delay_us(/music1[i*2]); //延时 > } > } > }
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35926.html