C51单片机控制蜂鸣器

在单片机应用上,蜂鸣器可以作为报警信号或者提示信号

单片机控制蜂鸣器发声的基本原理和方法:只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音。改变引脚的频率,就可以调整蜂鸣器的音调,产生各种不同的声音。
同时改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
 

开发板模块原理图

   

以下为驱动蜂鸣器的程序:

#include "reg52.h"                          //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;              //对数据类型进行声明定义

typedef unsigned char u8;

sbit beep=P1^5;//定义蜂鸣器的引脚

void delay(u16 i)
{
 while(i--); 
}

void Beep()
{
      beep=~beep;//进行高低电平的转换
      delay(100);//延时
}

void main()
{
    while(1)
 {
     Beep();
 }
}
由开发板按键K1控制蜂鸣器声响,K2控制响停:

源码如下

#include "reg52.h"                          //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;              //对数据类型进行声明定义

typedef unsigned char u8;

sbit k1=P3^1;                                   //定义按键连接                                       

sbit k2=P3^0;

sbit beep=P1^5;                               //定义蜂鸣器连接

u8 start=0;

void delay(u16 i)                              //延时函数

{      while(i--);        }

void sound()

{      u8 i=100;

        while(i--)

        {      beep=~beep;

                 delay(100);             

}

}

void keypros()                                  //检测按键函数

{      if(k1==0)                                  //如果K1按下(开始)

        {      delay(1000);

                 if(k1==0)

                         start=1;           

                 while(!k1);                       //等待键释放 

    }

        if(k2==0)                              //停止

        {      delay(1000);

                 if(k2==0)

                         start=0;                    //建立开始标志

                 while(!k2);                       //等待键释放 

}

}

void main()

{      while(1)

        {      keypros();

                 if(start==1)

                         sound();

                 else

                         beep=1;                            //如果按下K2键(start=0),蜂鸣器停响

        }              

}

  • 18
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于C51单片机的定时器蜂鸣器可以通过控制定时器的计时来产生音频脉冲。首先,需要计算出所需音频的周期(1/频率),然后将周期除以2,得到半周期的时间。利用定时器计时这个半周期时间,每当计时到后就可以控制蜂鸣器的开关状态。具体实现中,可以使用三极管将单片机的IO口提供的电流放大后再驱动蜂鸣器,这样就可以避免IO口驱动能力不足的问题。通过编写相应的C语言程序,可以实现按键控制蜂鸣器的开关,让蜂鸣器按照一定的频率和间隔发出声音。可以参考以下两段代码: ```c //按键控制蜂鸣器开关 #include<reg52.h> sbit KEY1=P3^2;//位定义按键 sbit BEEP=P1^0;//位定义蜂鸣器 #define BEEP_ON BEEP=0 #define BEEP_OFF BEEP=1 static void DelayNms(int nms) { unsigned int i,j; for(i=0;i<nms;i++) { for(j=0;j<123;j++); } } void main() { while(1) { if(0==KEY1) { DelayNms(50); if(0==KEY1) { BEEP_ON; while(0==KEY1); } } else { BEEP_OFF; } } } ``` ```c //定时器控制蜂鸣器开关 #include<reg52.h> sbit BEEP=P1^0; //定义蜂鸣器 #define BEEP_ON BEEP=0 #define BEEP_OFF BEEP=1 static void DelayNms(int nms) { unsigned int i,j; for(i=0;i<nms;i++) { for(j=0;j<123;j++); } } void main() { while(1) { BEEP_ON; DelayNms(500); BEEP=~BEEP; DelayNms(500); BEEP_ON; DelayNms(100); BEEP_OFF; DelayNms(500); BEEP_ON; DelayNms(10); BEEP_OFF; DelayNms(500); BEEP_ON; DelayNms(5); BEEP_OFF; DelayNms(500); BEEP_ON; DelayNms(1); BEEP_OFF; } } ``` 这样,通过按键或定时器的控制,就可以实现C51单片机定时器蜂鸣器的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值