51单片机控制蜂鸣器发SOS国际求救信号声音实验
说明:本文是51单片机控制蜂鸣器发声实验,和流水灯差不多,这也是入门时候非常基础而且非常重要的一个实验,同样本文重在夯实基础,如果是大神,请自觉飘过。
好了我们言归正传,用单片机控制蜂鸣器发声其实也很简单,基本上和控制LED的原理差不多,但是有一点需要说明的是如果是无源蜂鸣器的话,控制方式稍微会复杂一点点,我们下面会详细介绍。我们同样从硬件和软件两个角度来给大家详细说明。
硬件部分
蜂鸣器顾名思义就是可以蜂鸣(发声)的器件,一般分为有源和无源两种,注意此处的源是震荡源,也就是有源蜂鸣器自带震荡源,只要单片机的IO口一给出高电平就会鸣叫,而无源蜂鸣器由于其内部没有震荡源必须用一个K级别频率的方波去驱动它发声,为了降低难度,从基础学起我们实验全部用有源蜂鸣器。
下面是经典的蜂鸣器驱动电路图:
大概说一下原理:单片机通过三极管基极去控制蜂鸣器的发声,当单片机输出低电平时蜂鸣器发声,当输出高电平时三极管断开,发声停止。如果不明白请自行充电模拟电路相关知识或者给我私信。
单片机
单片机的原理已经说过好多次了,其实控制都是大同小异,不明白请移步扫盲教程:51单片机控制单个LED灯点亮 适合新手,再次不在叙述。
软件部分
下面附上软件参考代码及详细注释
代码功能 : 蜂鸣器先尖声鸣叫,隔一段时间后停止发声,再隔一段时间发出声,如此循环下去
include <reg52.h> //C语言程序头文件
define unit16 unsigned int //宏定义
sbit BEEP=P1·4 // P1.4口定义为 BEEP
void delayMS(unit16 va1ms)
{ unit16 uival, ujval;
for(uival=0;uival<va1ms;uival++)
for(ujval=0;uival<113;ujval++) //定义两个FOR循环函数 用于计时
}
void main(void) //主函数程序开始执行
{ while(1) // while大循环
{ BEEP=0; //响彻大地
delayms(50); //改变此变量可以调整发声间隔的时间
BEEP=1; //鸦雀无声
delayms(50)
}}
下面开始测试代码,代码用PROTEUS仿真后实现了我们需要的间断鸣叫发声功能。因此代码OK.
好了,看完了以上的文章,我想你应该明白这个实验的软硬件控制原理了吧,其实没有多难,只要理解了原理,然后多动动手 很轻松就会掌握,其实这个实验效果还有其他方法可以实现,如果你也感兴趣自己动动手用其他代码方式试一下吧!
最后如果有什么问题或者建议请给我留言或者私信啊,看到一定第一时间回复,如果你喜欢我的文章,欢迎关注转发评论哦,我们下期再见!
专注基础,从软硬件两个角度,从零开始带你探寻单片机的神秘世界!
想了解更多精彩内容,快来关注从零开始学单片机设计