【ufun学习】学习篇4:《基础例程3 - 蜂鸣器控制》
<div class='showpostmsg'> 本帖最后由 1nnocet- 于 2019-7-22 10:23 编辑<p><br />
<br />
<br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">1nnocet-</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b><br />
《基础例程3 - 蜂鸣器控制》</p>
<p>有学过单片机的相信一定对蜂鸣器有较深的印象,蜂鸣器分为有源蜂鸣器和无源蜂鸣器,这两种蜂鸣器有什么 本质区别呢?其中有源蜂鸣器内部有振荡器,只要外部给电源便能发声;无源蜂鸣器内部没有振荡器,所以提供电源不足以使其发声。下面我们就来验证一下学习板上的蜂鸣器是有源还是无源的蜂鸣器。</p>
<p>我们验证使用的是《基础例程3 - 蜂鸣器控制》改编的代码,除了while(1)里面的代码内容,其余都是跟例程一样的。</p>
<p>首先我们先给对应的GPIO高电平(即PA8),</p>
<p>烧写程序后运行,蜂鸣器没有发声,因此可以大致断定该蜂鸣器为无源蜂鸣器。</p>
<p></p>
<p></p>
<pre>
<code>#include "stm32f10x.h"
#include "stdio.h"
#include "main.h"
#include "stdlib.h"
#include "BEEP.h"
#include "TOUCH_KEY.h"
#include "DELAY.h"
int main()
{
int i;
int Sheet_music[]={6,7,8,8,7,8,8,10,10,7,7,0,0,3,3,6,6,6,5,6,6,8,8,5,5,5};//乐谱
int Sheet_length=sizeof(Sheet_music) / sizeof(Sheet_music); //乐谱数组长度计算
BEEP_Init(); //蜂鸣器配置
while (1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8); //此注释部分测试蜂鸣器是否为有源蜂鸣器
//GPIO_SetBits(GPIOA,GPIO_Pin_8); 这四行注释掉的代码是验证蜂鸣器是否为无源蜂鸣器的代码
//Delay_Ms(1);
//GPIO_ResetBits(GPIOA,GPIO_Pin_8);
//Delay_Ms(1);
}
}</code></pre>
<p>为了进一步确定蜂鸣器的种类我们再次进行试验,这次我们给一个时间间隔为1ms的高电平时钟(代码while(1)里面注释掉的部)。</p>
<p>烧写代码后验证,以下视频为延时1ms程序运行情况。</p>
<p><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDI4MTkzMjkwMA" style="background:#eee;margin-bottom:10px;" width="100%"></iframe></p>
<p>蜂鸣器发出响声,断定该蜂鸣器为无源蜂鸣器。</p>
<p> </p>
<p>下面简单介绍下例程,main函数代码依旧是先对使用到的外设进行初始化(该部分与前面的学习篇基本一致,不再赘述),这个例程的难点在于乐谱的产生,这个乐谱应该使用软件生成的,之前也有使用过,但对本人来说用处不是很大就没有去深究,感兴趣的可以在百度找找,相信都难不倒大家的。</p>
<p>下面是例程运行的情况,循环播放乐谱</p>
<pre>
<code> case 1: //do
scale(doo);
break;
case 2: //re
scale(re);
break;
case 3: //mi
scale(mi);
break;
case 4: //fa
scale(fa);
break;
case 5: //sol
scale(sol);
break;
case 6: //la
scale(la);
break;
case 7: //si
scale(si);
break;
case 8: //高音do
scale(DO);
break;
case 9: //高音re
scale(RE);
break;
case 10: //高音mi
scale(MI);
break; </code></pre>
<p>scale()函数里面的元素是宏定义来的,在main.h文件里面。</p>
<p>验证蜂鸣器中用到的函数GPIO_SetBits(GPIOA,GPIO_Pin_8);是在GPIO.h文件中找到的,里面还有很多对GPIO操作的函数。</p>
<p><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDI4MTk3ODcyNA" style="background:#eee;margin-bottom:10px;" width="100%"></iframe><br />
</p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>非常好的资料,感谢分享;<br />
共享精神万岁。<br />
希望楼主以后多多分享资料,帮助更多的电子爱好者。</p>
页:
[1]