51单片机驱动无源蜂鸣器

来源:本站
导读:目前正在解读《51单片机驱动无源蜂鸣器》的相关信息,《51单片机驱动无源蜂鸣器》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机驱动无源蜂鸣器》的详细说明。
简介:在学习过程中遇到如下例题:8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

流水灯的程序相对我个人来说比较简单,但是蜂鸣器有些难度,正常给I/0口一个信号,蜂鸣器既然不响,后经查证是无源蜂鸣器;

无源的蜂鸣器,就要通过IO口输出振荡信号来驱动蜂鸣器

蜂鸣器简介:蜂鸣器根据结构不同分为压电式蜂鸣器和电磁式蜂鸣器;而两种蜂鸣器又分为有源蜂鸣器和无源蜂鸣器,这里的源特指振荡源;有源蜂鸣器直接加电就可以响起,无源蜂鸣器需要我们给提供振荡源。理想的振荡源为一定频率的方波。

由于系统采用了无源蜂鸣器,所以需要我们通过编程来控制I/0口的翻转来产生一定频率的方波信号。本文采用默认频率0.5KHZ的标准方波。可以算出周期T = 2ms脉宽t = 1ms,因此我们可以通过简单的延时函数延时1ms。然后控制P3.7口的电平高低产生0.5KHZ的方波信号;

本程序只是通过简单延时达到驱动蜂鸣器的效果。

#include <reg52.h>

sbit buzzer = P1^5;

void delayms(unsigned int xms)//延时函数,延时xms

{

unsigned int i , j;

for(i = 0; i < xms; i++)

for(j = 0; j < 110; j++);

}

void fengming()//蜂鸣函数,脉宽t = 1ms周期T = 2ms频率f = 0.5khz实际发现延时1ms的时候效果最好

{

buzzer = 0; //给P1.5口送低电平

delayms(1);//延时1ms

buzzer = 1;//给P1.5口送高电平

delayms(1);//延时1ms

}

如果去掉delay(1);那么你的蜂鸣器控制端状态大约在2us左右翻转一次(晶振12M,12T单片机),这个时间对于驱动电路和蜂鸣器来讲都是很短的,可以通俗的理解成他们没反应过来,还没到最响的时候就被关掉了,加上延时之后显然可以让它到达峰值,所以就能听到更响。

void main()

{

while(1)

{

fengming();

}

}

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit buzzer=P1^5;

sbit D1=P1^0;

void delay(uint z)//延时1ms

{

uint x,y;

for(x=z;x>0;x--)

{

for(y=0;y<114;y++)

{

}

}

}

fasheng() //发声子程序

{

unsigned int a,x;

for (a=0;a<456;a++)

{

buzzer=!buzzer;

for (x=0;x<45;x++); //45为蜂鸣器发声频率

}

}

void main()

{

while (1)

{

D1=0;

fasheng();

D1=1;

delay(200);

}

}

提醒:《51单片机驱动无源蜂鸣器》最后刷新时间 2024-03-14 01:09:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机驱动无源蜂鸣器》该内容的真实性请自行鉴别。