本文的内容,分为下面几部分:
1,参考网上例程;
2,移植,运行,查看,尽力理解代码;
3,调整测试参数;
4,添加一首歌曲。
下面详细描述一下过程:
一,参考网上例程
主要参考的是这一篇《使用STM32F103控制蜂鸣器发声播放音乐》,地址如下:
使用STM32F103控制蜂鸣器发声播放音乐_blue@sky的博客-优快云博客_stm32蜂鸣器音乐代码
看起来代码比较简洁,就两个文件,就开始移植到自己的板子上。
二,移植,运行,查看代码,尽力理解代码
说明一下,我使用的芯片类型是stm32F103C8,集成开发环境用的是Keil5 MDK-ARM,仿真器使用JLINK。
查看板子上的蜂鸣器接口,相应修改下代码中的引脚。这个和硬件相关,每个人只能根据自己的硬件来调整。
然后是将这个引脚配置成推挽输出,默认是低电平,输出高电平可以驱动蜂鸣器响报警。
然后是开关的操作,Buzzer_On(),Buzzer_Off()来替换;
然后就开始运行,能听到蜂鸣声响,但是刺刺啦啦的,不像音乐。
没有办法,偷懒不行啦,就只好开始看程序了,尽力去理解代码。毕竟代码在手,任我蹂躏,哈哈!
大体理解了一遍程序,调整了几个延时相关的值,发现效果有所好转,比较像音乐了。
但是,到底对不对,对于例程中的歌曲《红尘情歌》,我没听过啊,比较不出来对不对,好不好。
如果能添加一首自己熟悉的歌曲,就能判断了。不过,先别着急,慢慢来。先来个最简单的,就是先听听“多瑞咪”吧。
u8 music[]={13,1,2,3,4,5,6,7,8};//音调 测试基础音
u8 time[] ={4, 4,4,4,4,4,4,4,4};//持续时长
例子中,歌曲由两个数组来表示,一个是音调,一个是这个音调的持续时长。
音调数组music[],里面的数字看起来就是123,与曲谱上的一样,它是怎么实现那个声音的呢?
看代码,是这么调用的:
tone[music[i]]
也就是说,是把它作为索引传给了tone[]数组,而tone[]的定义如下:
// 低7 1 2 3 4 5 6 7 高1 高2 高3 高4 高5 不发音
uc16 tone[] = {247,262,294,330,349,392,440,294,523,587,659,698,784,1000};//音频数据表
这个数组中的数值,又有什么用呢?
注释说是音频数据。根据蜂鸣器的原理,就是输出不同频率的PWM波,即可发出不同的声音(音符)。然后将不同的音符组合起来就是一个曲子。所以这里的数据应该是用于控制蜂鸣器的发声频率的。
看看调用的地方:
&

最低0.47元/天 解锁文章
724

被折叠的 条评论
为什么被折叠?



