#include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit BEEP=P2^5;//P2.5端口连接的是蜂鸣器 void delay_time(time_delay) { while(time_delay--); } void main() { u16 i=1000;//1000作为发声时间差不多 while(1) { while(i--) { BEEP=!BEEP;//蜂鸣器开始工作,使每次输出都是0->1->0 delay_time(1000);//延时函数 } while(1)//关闭蜂鸣器,因为没有持续变化的0->1->0 { i=0; BEEP=0; } } }
蜂鸣器
压电式蜂鸣器:又叫无源蜂鸣器(左图);由多谐振荡器,压电蜂鸣片,阻抗组成(需要电磁信号/脉冲+电源)
电磁式蜂鸣器(右图):振荡器+电磁线圈+磁铁..(只需要电源)
调整音调,大小:
高电平占周期的频率///高电平的时间越长,占空比越大;高电平的时间越短,占空比越小
音色改变:通过周期大小实现(有源蜂鸣器不行!!!)
A2-A4(左图) A5-A7(右图)
左图:
不能用蜂鸣器直接连接P2.5。因为芯片的能力较弱,无法满足控制蜂鸣器的30mA,需要放大电路来控制...是控制电路,不是驱动电路!
P25输入高电平,BEEP输出低电平,P25输入低电平,BEEP输出高电平...脉冲变化,即实现控制高电平周期频率。蜂鸣器发音
无源蜂鸣器:需要一定的脉冲信号,一直0->1->0变化,连续输出才有声音
右图:
使用导线将J7和其他电路相连,然后控制J7:
如果J7是低电平,为0,三极管TP1导通,VCC e->J7, e->c均导通,( e->J7此时有电压差,e->c导通)有脉冲
如果J7是高电平,为1,三极管TP1断开,VCC e->J7, e->c均不导通,( e->J7此时无电压差,e->c断开)无脉冲
有源蜂鸣器:施加一个低电平信号,使三极管导通后,就会持续响,直到J7施加高电平,使三极管的没有电位差,蜂鸣器不响
发声:蜂鸣器持续0->1->0变化
不发声:蜂鸣器持续输出1或0,(不变化)
蜂鸣器发声的频率:f=1.5~5kHZ之间(允许一定误差) 周期T=1/f=(约等于)2ms,所以高电平1ms,低电平1ms
每个端口都有上拉电阻,默认输出的是高电平
使其发声,需要0->1->0持续变化
改变大小,需要改变0的时间或者1的时间,总的T大小不能变
改变音调,需要改变T大小