的控制51单片机:控制蜂鸣器

小白向单片机笔记二:蜂鸣器

  • 前言
  • 一、蜂鸣器原理
  • 二、蜂鸣器原理图
  • 1.蜂鸣器代码
  • 2.代码解释
  • 1. 为什么蜂鸣器响,和LED6闪烁中有两个delay()函数?
  • 2. 为什么BEEP=1是关闭LED6, 而i=0是关闭蜂鸣器?
  • 总结

  • 前言

    蜂鸣器原理及代码


    一、蜂鸣器原理

    知识拓展: 根据蜂鸣器发声方式不同,主要分为压电式和电磁式。同时根据蜂鸣器结构,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器自带震荡电路,接通电源即可发声。

    振荡器电路的作用:产生脉冲信号。

    无源蜂鸣器 需要提供一定频率的脉冲信号才能发声,频率一般在 1.5-5KHZ

    通过调节脉冲频率可改变音调,通过改变高低电平占空比可以调节音量。

    二、蜂鸣器原理图

    蜂鸣器正常工作需要约30mA电流,C51芯片是用来控制,如果用C51芯片驱动蜂鸣器,无法保证其他器件正常工作。所以使用时要放大电流来驱动蜂鸣器(使用三级管或下图的ULN2003D)。

    ULN2003D 其中一个功能就是放大电流。

    通过C51芯片的P2^5引脚持续输出脉冲信号(即高低电平交替),经过ULN2003D芯片放大电流从BEEP引脚输出到蜂鸣器即可发声。

    注意P2^5引脚同时控制着LED6,当脉冲信号在一定频率时,可以观察到LED6的闪烁,这就是为什么在LED实验中会有滴答滴答的声音。

    1.蜂鸣器代码

    #include "reg52.h"
    typedef unsigned int uint  ;
    typedef unsigned char uchar	;
    sbit BEEP = P2^5 ;
    
    void delay(uint i){
    	 while(i--){
    	 }
    }
    
    void main(){
    	uint i=100;//调整脉冲频率
    	while(1){
    		while(i--){//当i减为0即蜂鸣器关闭,因无脉冲电流
    			/*//蜂鸣器响,和LED6闪烁
    			delay(1000);
    			BEEP = !BEEP;
    			delay(1000);
    			 */
    
    			 /*调整空占比,从而调整音量,空占比:高电平占一个周期的比例*/
    			 BEEP=1;
    			 delay(100);
    			 BEEP=0;
    			 delay(10);
    		}
    		BEEP=1;	 //关闭第六个LED
    		//i=0;//关闭蜂鸣器	
    	}
    }
    

    2.代码解释

    1. 为什么蜂鸣器响,和LED6闪烁中有两个delay()函数?

    因为在实验过程中可以顺便同时观察LED6的闪烁,如果不考虑LED6的情况,可以只使用一个delay()函数。

    2. 为什么BEEP=1是关闭LED6, 而i=0是关闭蜂鸣器?

    因为BEEP是由P2^5引脚控制,P2^5同时控制LED6,对于蜂鸣器BEEP为高电平还是低电平都没有关系,因为只有脉冲信号才能使无源蜂鸣器工作。将BEEP设置为高电平,是因为P2^5默认输出的就是高电平。

    i=0是因为不执行内循环,从而不产生脉冲信号,从而使得蜂鸣器关闭。单片机配套的开发攻略这部分代码注释有点问题。


    总结

    如果要自己做些小玩意,数模电很重要,可惜学不会。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 的控制51单片机:控制蜂鸣器

    发表评论