51单片机学习笔记(七) -蜂鸣器


一、蜂鸣器的概念

1、分类

1、无源蜂鸣器:必须方波信号驱动才能发声;
2、有缘蜂鸣器:给高电平驱动即可发声;

2、工作原理

1、无源蜂鸣器:波信号(PWM)输入谐振装置转换为声音信号输出;
在这里插入图片描述

2、有缘蜂鸣器:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号;
在这里插入图片描述

3、原理图

J7连接到P0.0

在这里插入图片描述


二、让蜂鸣器响起来

延时函数

void Delay(int time)
{
	unsigned int cnt = 100;
	while(time)
	{
		time--;
		while(cnt)
			cnt--;
	}
}

主函数

#include <reg51.h>

sbit BZ = P0^0;

void Delay(int time);

void main()
{
	while(1)
	{
		BZ = !BZ;
		Delay(10);
		
	}
}

三、用定时器控制蜂鸣器音调

定时器初始化

void Timer_Init(void)
{
	TMOD = 0x01;
	TH0 = (65535 - CNT) >> 8;
	TL0 = (65535 - CNT) & 0x00FF;
	TR0 = 1;                             //打开定时器
	ET0 = 1;                             //打开定时器中断
	EA = 1;	                             //打开总中断
}

中断函数

void Tm0_isr() interrupt 1 using 1
{
	BZ = !BZ;
	EA = 0;
	TH0 = (65535 - CNT) >> 8;
	TL0 = (65535 - CNT) & 0x00FF;
	EA = 1;
}

主函数

#include <reg51.h>

sbit BZ = P0^0;

#define CNT 50

void Timer_Init(void);

void main()
{
	Timer_Init();
	while(1)
	{

	}
}

四、蜂鸣器发出滴滴声

在上一节的基础上,修改中断函数即可,代码如下:

void Tm0_isr() interrupt 1 using 1
{
	static unsigned int count = 0;
	ET0 = 0;
	count++;
	if(count < 5000)
	{
		BZ = !BZ;
	}
	else if(count < 10000)
	{
		BZ = 1;
	}	
	else
		count = 0;
	TH0 = (65535 - CNT) >> 8;
	TL0 = (65535 - CNT) & 0x00FF;
	ET0 = 1;
}

总结

1、本节介绍了有源蜂鸣器和无源蜂鸣器的工作原理;
2、复习了定时器、计数器、I/O的操作方法;

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值