硬件电路开发中蜂鸣器常用知识

      蜂鸣器是一种电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”表示。

蜂鸣器的结构原理

1、压电式蜂鸣器:

      压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。

                                                                   压电式蜂鸣器 

2、电磁式蜂鸣器:

      电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

                                                                   电磁式蜂鸣器

有源蜂鸣器和无源蜂鸣器

1、有源蜂鸣器

      有源蜂鸣器直接接上额定电源就可连续发声,有源蜂鸣器工作的理想信号是直流电。因为蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,从面实出磁场交变,带动钼片振动发音。但是在某些有源蜂鸣器在特定的交流信号下也可以工作,只是对交流信号的电压和频率要求很高,此种工作方式一般不采用。

                                                                    有源蜂鸣器

2、无源蜂鸣器

      无源蜂鸣器和电磁扬声器一样,需要接在音频输出电路中才能发声,原因在于内部没有驱动电路。无源蜂鸣器工作的理想信号是方波信号。如果直接给予直流信号时,无源蜂鸣器是不发声的。这是因为因为磁路恒定,钼片不能振动发音。

                                                                     无源蜂鸣器

蜂鸣器播放音乐:

      一般说来,单片机用蜂鸣器演奏音乐是单音频率,并不包含相应幅度的谐波频率,也就是说不能发出多种音色的声音。因此单片机用蜂鸣器奏乐只需弄清楚两个概念就可以了:也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

音调的确定

     音调就是音高,它由频率确定。我们可以查出各个音符所对应的相应的频率,那么就需要用单片机控制蜂鸣器发出相应频率的声音!在编写相关程序时,我们常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音。为了让单片机控制蜂鸣器发出不同频率的声音,我们只需将定时器置予不同的定时值就可实现。

单片机控制蜂鸣器奏乐程序源代码:

/***********************蜂鸣器播放音乐***********************     

处理器:STC89C52RC

开发环境:KEIL

名称:蜂鸣器播放音乐         

功能:程序运行后,播放音乐  

****************************************************************/

#include <reg51.h>

#define uchar unsigned char

sbit BEEP = P2^3;

bit flag;

uchar data_point = 0x00;

uchar high;

uchar low;

uchar code music_data[] =

{

 0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF,

 // 3 _                    3                          _ 3                       1 

 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,

 // 1_                     3_                        5                          5     

 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF,

 // 4_                     3_                        2                           -   

 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF,

 // 2_                     3_                        4                           4              

 0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF,

 // 3_                     2_                        3                           1 

 0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,

 // 1_                     3                         _ 2             .           5

 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF,

 // .7_                    2_                        1                           -     

 0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF,

 0x00//结束     

};

void Init(void);                            

void DelayMs(unsigned int time);

void Init()

{

 TMOD = 0x01; //定时器0 处于计时方式,16 位        

 EA = 1;

 ET0 = 1;     //定时器0 溢出中断      

}

void DelayMs(unsigned int time)

{

 unsigned int i;

 unsigned int j;

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

 {for(i=0;i< 363;i++){;}}

}

void main()

{

 uchar time;

 Init();

 TH0 = high;

 TL0 = low;

 while (1)

 {

  if (music_data[data_point] != 0xFF && music_data[data_point] != 0x00) //判断是否是正常音符 

  {

   TR0 = 0;

   BEEP = 1;

   DelayMs(10);                                               //间歇      

   TR0 = 1;

   high = music_data[data_point];                   //取设置频率数值的高8 位

   low = music_data[data_point + 1];              //取设置频率数值的低8 位

   time = music_data[data_point + 2];             //取发声时间     

   DelayMs(time);

   data_point += 3;

  }

  else if (music_data[data_point] == 0xFF)    //判断是否是休止符    

  {

   time = music_data[data_point + 2];

   DelayMs(time);

   data_point += 3;

  }

  else                                                            //结束符,停止2 秒后继续 

  {

   TR0 = 0;

   BEEP = 1;

   DelayMs(2000);    

   data_point = 0;

  }

 }

}

/****************************************************************

* 名称:Count1(void) interrupt 1

* 功能:设置计时器0 溢出中断,每中断一次改变P2_3 引脚电平      

****************************************************************/

void Count1(void) interrupt 1

{

 TH0 = high;

 TL0 = low;

 if(flag == 0)                          //改变P2_3 引脚电平      

 {BEEP=0;flag=1;}

 else

 {BEEP=1;flag=0;}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嵌入式开发是指将计算机硬件与软件结合起来开发嵌入式系统的一项技术。在嵌入式开发硬件电路知识是非常重要的。 硬件电路知识是指对数字电路、模拟电路和信号处理等方面的理解和应用能力。在嵌入式开发,我们需要掌握各种电子元器件的功能和使用方法,了解各种电路的工作原理,以及掌握电路设计和调试的技巧。 在硬件电路知识,数字电路是非常重要的一部分。数字电路一般采用二进制数字来表示信息,通过逻辑门和触发器等组合电路来实现不同的逻辑功能。对于嵌入式开发来说,我们需要掌握数字信号的传输和处理方法,了解各种数字电路的设计和调试技术。 模拟电路也是嵌入式开发重要的一部分。模拟电路一般处理的是连续变化的信号,如声音、图像等。在嵌入式开发,我们需要了解模拟信号的采集和处理方法,掌握各种放大器、滤波器和混频器等模拟电路的设计和调试技术。 此外,信号处理也是嵌入式开发不可或缺的一部分。信号处理主要涉及到数字信号的处理和分析,如滤波、采样、编码等。在嵌入式开发,我们需要掌握各种信号处理的算法和方法,了解信号处理器的工作原理和使用方法。 总之,嵌入式开发硬件电路知识是非常重要的,它涉及到嵌入式系统的设计和开发的方方面面。只有掌握了硬件电路知识,才能更好地理解和应用嵌入式开发技术,并能够设计和调试出高质量的嵌入式系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值