51单片机-蜂鸣器

一、ULN2003

  • ULN2003(达林顿晶体管阵列)是一种NPN型驱动器,其作用之一就是增大电流驱动能力,可以驱动电机等外设。
  • 此处驱动蜂鸣器,给定P25口高低电平就可以实现BEEP引脚的电平翻转

Alt

二、蜂鸣器

  • 蜂鸣器是一种采用直流电压供电的电子讯响器。
  • 按照驱动方式存在有源无源之分,二者本质上的区别就是是否需要提供震荡源脉冲(频率)使得蜂鸣器响发声
    • 有源蜂鸣器自带震荡源,只需要接通电源即可发声
    • 无源蜂鸣器需要给定频率才可以发声,同时可以实现发出不同频率的声音
  • 51单片机的IO口是一种弱上拉的模式,高电平驱动能力有限,想要实现电平翻转,必须要使用外部驱动电路去驱动蜂鸣器的端口

  驱动电路主要分为两大类,第一种是三极管驱动,第二种是集成电路驱动
  下图为三极管驱动电路图

Alt
  下图为集成电路驱动电路图(ULN2003)

Alt
  此处使用集成电路驱动蜂鸣器。图中可以看出,单片机的P25口连接在ULN2003一端,蜂鸣器的BEEP引脚接在ULN2003的另一端,控制P25高低电平实现BEEP电平反转,给定频率即可实现蜂鸣器发声

Alt

三、按键提示音代码

  此处使用无源蜂鸣器,需要给定频率
  代码内容是按下K1-K4按键会有频率1000Hz时间100ms按键提示音,并在数码管上显示出1-4四个数字
  下面是Buzzer.c文件

#include <REGX52.H>
#include <INTRINS.H>

sbit Buzzer = P2^5;


void Delay500us(void)//@11.0592MHz
{
	unsigned char data i;
	_nop_();
	i = 227;
	while (--i);
}

/*
函数功能:蜂鸣器按照1000Hz的频率响ms时间
形参:蜂鸣器响应时长
*/
void Buzzer_Time(unsigned int ms)
{
	unsigned int i;
	for(i=0;i<ms*2;i++)//控制时间:ms给100,蜂鸣器响100ms
	{
		Buzzer = !Buzzer;//蜂鸣器引脚电平翻转发声
		Delay500us();//控制频率:每隔500us翻转一次
		//高电平500us,低电平500us,T = 1000us,f = 1/10^-3(s) = 1000HZ
	}
}

  for循环中,通过延时500us实现电平翻转周期为1ms,得到频率为1000Hz。每次for循环是0.5ms,所以要想使得形参ms对应发声时间,则需要在for循环跳出条件中给ms x 2,最后在主函数调用Buzzer.Time(),参数给100就可以实现功能要求

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51单片机开机后,我们可以使用单击key1键来触发带有蜂鸣器的操作。 首先,在51单片机的开机初始化代码中,我们需要将key1键配置为输入引脚,并且使能其中断功能。这样当我们单击key1键时,会触发外部中断。 接下来,在主程序中,我们可以编写一个函数来控制蜂鸣器的工作。在函数内部,我们可以通过设置相关的IO口,使蜂鸣器发出声音。为了产生连续的声音,我们可以使用一个循环来控制蜂鸣器的开关状态,从而实现发出连续的"beep"声。 在主函数中,我们可以通过检测key1键的状态来判断用户是否进行了单击操作。当检测到key1键被按下时,我们可以调用上述的蜂鸣器函数,以便产生"beep"声。同时,我们也需要为了避免持续检测key1键状态而引入的抖动,可以增加一个延时函数来进行适当的延时,从而稳定读取key1键的状态。 最后,为了使代码正常运行,我们需要在51单片机上进行一些硬件连接。需要将蜂鸣器连接到相应的IO口上,并将key1键通过一个上拉电阻连接到地。这样在键未被按下时,IO口会被拉高,而当键被按下时,IO口被拉低,从而产生触发中断的信号。 总之,通过以上的步骤,我们可以实现51单片机开机后,当单击key1键时,带有蜂鸣器的"beep"声会被触发。注意,以上只是简单示意,具体的实现可能会因硬件连接和编程工具的不同而有所差异。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值