51单片机蜂鸣器入坑笔记
  2wZqbuCm3t4J 2023年11月02日 37 0

1.先来看一下蜂鸣器的原理图和使用延时函数进行发音

51单片机蜂鸣器入坑笔记_#include

我们可以知道,只有当IN5输出电压的时候,才能促进OUT5的电压,IN5到OUT5是取反的过程的,只有当BZ为低电平的时候,才能让蜂鸣器点响。

但是要记住蜂鸣器一定要有频率进行震动,要不然长期处于高电平会烧毁蜂鸣器所以要不断对蜂鸣器的输入电平进行转化,这样子才可以稳定发音


基本用法:

//蜂鸣器端口:
sbit Buzzer=P1^5;


void Buzzer_Time(unsigned int ms)
{
unsigned int i;
for(i=0;i<1000;i++)
{
Buzzer=!Buzzer; //在这里表示产生一定周期频率
Buzzer_Delay500us(); //在这里表示一定的延时函数,产生一个周期稳定蜂鸣器的发音
}
}



2.使用中断函数进行发音

可以使用一个中断函数进行发音,一旦发生中断就会触发定时器

单独定义一个中断函数

Timer0.c

#include <REGX52.H>

/**
* @brief 定时器0初始化,1毫秒@12.000MHz
* @param 无
* @retval 无
*/
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值 第一次开始的时候是从这个值开始出发
直到溢出的,但是到了后面是要根据中断函数当中定义的值进行重新计时了
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}

Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__

void Timer0Init(void);

#endif

在主函数当中调用定时器,并定义中断时发生的函数

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"

//蜂鸣器端口定义
sbit Buzzer=P1^5;


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

}
}

void Timer0_Routine() interrupt 1
{
if(FreqTable[FreqSelect]) //如果不是休止符
{
/*取对应频率值的重装载值到定时器*/
TL0=0x18; //设置定时初值
TH0=0xFC; //设置定时初值
Buzzer=!Buzzer; //翻转蜂鸣器IO口
}
}





【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  QtpjMRSUUfXb   2023年12月08日   37   0   0 引脚#include看门狗
  tprTMCWDkFAR   2023年12月07日   13   0   0 头文件#include初始化
  QtpjMRSUUfXb   2023年12月06日   21   0   0 卷积#includeCUDA
  UYSNSBVoGd8R   2023年12月08日   13   0   0 引脚#include#define
2wZqbuCm3t4J
最新推荐 更多