完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
蜂鸣器简介
一蜂鸣器简介 有源蜂鸣器和无源蜂鸣器的区别: 这里我们使用的是无源蜂鸣器,通过单片机予相应的频率使它发出相应的声音。 硬件设计图: 当我们PB5输出低电平使三极管导通,蜂鸣器就可以工作了,但由于我们使用的是无源蜂鸣器单纯的通电并不能使蜂鸣器发出鸣响,要使无源蜂鸣器鸣响需要我们PB5端口不断输出高低变化的脉冲信号,当信号频率不同时发出的声音就不同,根据这个原理,只要我们根据音乐乐谱让单片机PB5端口连续输出不同频率的信号蜂鸣器的鸣响就可以组成一支音乐啦。 如图单片机输出的信号是这样的一个高低电平信号,频率周期的数量就是蜂鸣器鸣响的时长,而改变每个频率周期中高低电平的比例就可以改变无源蜂鸣器发出的声音。 根据C字符对照表我们可以得到每个音调对应的频率。 二、《小星星》MIDI音乐制作过程 这是《小星星》的乐谱信息,根据上面的音调频率对照表,我们就可以把乐谱信息转化为频率信息。 相关乐谱信息: 乐谱图中重点看每个拍的时间信息 J=100表示每分钟有103拍,即60s=100拍,所以一拍的时间约为600ms 根据他是多少拍就可以算出蜂鸣器一个音调鸣响的时间 在我们的程序中我们把音乐的每个音调的频率信息和发声时间长度为一组放入 music1[ ]数组中其中奇数为音调频率信息偶数为发声时间长度,其中每个音调的发声时间长度可以根据乐谱看他是多少拍,根据一拍为多长时间可以计算出每个音调的时间。如在这首歌中每个音调都是一拍而这里一拍为600ms所以这里我们 每个音调发声时间都为600ms,关于乐谱的更多信息可以到网上查找。 > `这里是引用`uc16 music1[64]={ //音乐1的数据表(奇数是对应音调频率,偶数是发声时间长度 > `这里是引用` 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 > delay_us(500000/music1[i*2]); //延时 > > GPIO_WriteBit(BUZZERP ORT,BUZZER,(BitAction)(1)); //蜂鸣器接口输出高电平1 > > delay_us(500000/music1[i*2]); //延时 > } > } > } |
|
|
|
只有小组成员才能发言,加入小组>>
3269 浏览 9 评论
2947 浏览 16 评论
3446 浏览 1 评论
8967 浏览 16 评论
4041 浏览 18 评论
1084浏览 3评论
562浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
556浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2294浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1850浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 12:44 , Processed in 0.848972 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号