㈠ 怎么使用单片机控制蜂鸣器发声
蜂鸣器有两种,一种是无源的,另一种为有源的,确认的方法为:1)看封装,如果引脚端为PCB板的,一般为无源的,引脚端为树脂灌封的,一般为有源的。2)加电实验,用5V电压点击接触引脚时,只有“哒哒”声的为无源的,发出一个单音响的为有源的。
两种蜂鸣器用单片机的控制方法是一样的,对于无源的,要求单片机送出一组断续的音频信号,使蜂鸣器按要求发声,对于有源蜂鸣器,要求单片机送出一组断续的电脉冲信号,用于分断蜂鸣器的通断状态,而使有源蜂鸣器发出“嘀...嘀”,“嘀...嘀...嘀”等希望的声音。
无源蜂鸣器举例:
/**********************************************************************/
//声响驱动程序 BELL--整点报时(闹钟音两短一长)
/**********************************************************************/
void Beep(void)
{
uint a;//定义变量用于发声的长度设置
uchar b;
for(b=2;b>0;b--){
for(a=200;a>0;a--){//第一个声音的长度
beep = ~beep;//取反扬声器驱动口,以产生音频
Delay_1us(500);//音调设置延时
}
DelayM(1000);
}
for(a=1000;a>0;a--){//第一个声音的长度
beep = ~beep;//取反扬声器驱动口,以产生音频
Delay_1us(500);//音调设置延时
}
beep = 1;//音乐结束后扬声器关闭
}
有源蜂鸣器举例:
void main(void)
{
NB=0;//有源蜂鸣器初始不送电
while(1)
{
NB=0;//有源蜂鸣器断电
delay(300);//停一段时间
NB=1;//有源蜂鸣器送电
delay(1000);//响一段时间
}
}
㈡ 51单片机之蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有PWM波控制蜂鸣器的频率。脉冲就是高低电平的切换,如下图:一个方波脉冲
我们用单片机的IO口实现一种这样高低电平的方波,驱动蜂鸣器发音。我们板子上配的就是交流蜂鸣器。
接下来我们看一下蜂鸣器的硬件电路:
蜂鸣器通过三极管驱动。我们利用杜邦线将蜂鸣器的一端J8连接到板子上P1.5管脚上。
示例程序:
#include "reg52.h"
#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit beep = P1^5;
void delay(uint16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep = ~beep;
delay(10);
}
}
该程序实现蜂鸣器的响和停,程序较为简单,可以在此基础上进行扩展。
㈢ 无源蜂鸣器需要2K-5K方波驱动才能发声,那么,我该如何设计一款低成本的无源蜂鸣器驱动电路呢
为了节约成本,必须和有源蜂鸣器一样有一个振荡电路,而有源蜂鸣器主要使用LC振荡电路(即用电感L、电容C组成选频网络的振荡电路)。若实际搭建此电路,电感参数比较难以控制,而且成本较高。此时,自然会想到简易的由三极管组成的RC振荡电路。
㈣ 关于单片机蜂鸣器外围电路的工作原理的问题
1.当单片机的p1.7脚为低电平时,三极管Q1饱和导通,蜂鸣器通电鸣响。若单片机的p1.7脚为高电平时,三极管Q1截止,蜂鸣器没有电流就不鸣响。
2.那个电阻是限流电阻。限制流入单片机的电流。
㈤ 关于单片机的蜂鸣器
蜂鸣器有直流定压式的,给电就响。如果是这种蜂鸣器,你给的开关频率快,使蜂鸣器不能正常发声。
作电子琴的话不能用这种发声器。应该用扬声器,音箱上用的,只是功率小些0.8-3W的。
㈥ 单片机蜂鸣器请教大神
#include <reg51.h>
sbit k=P1^1;
sbit beep=P1^5;
#define uint unsigned int
#define uchar unsigned char
void delayms(xms)
{
uint m,n;
for(m=xms;m>0;m--)
for(n=110;n>0;n--);
}
void T0_int() interrupt 1
{
uint i;
TH0=(65536-dls/256;
TL0=(65536-dls)%256;
beep=~beep;
}
void main()
{
uint dls=500;
TMOD=0x01;
TH0=(65536-dls)/256;
TL0=(65536-dls)%256;
TR0=0;
EA=1;
ET0=1;
while(1)
{
TR0=0;
while(k==0)
{
TR0=1;
dls=500;
delay(100);
dls=1000;
delay(200);
}
}
}
}
㈦ 简易单片机蜂鸣器驱动电路
不会防止单片机IO输出的电压被拉低,只能起到保护三极管的作用。因为蜂鸣器是感性负载,在三极管关闭瞬间,会产生反向高压,电容在这里会吸收这个高压。
㈧ 单片机蜂鸣器
1、单片机与蜂鸣器连接图已附.
2、通常P1、P2、P3口都可以用来作为控制,P0口也可以,但因其内部无上拉电阻,所以外接时,应接一1K的上拉电阻,其他一样。有源蜂鸣器驱动电路设计,无须外加驱动电路。
3、C语言编程为:
#include<reg51.h>//头文件
sbit d1=P1^2;//位定义,把P1口的P1.2位设为驱动口,当然其它口也可。
void main()//主函数
{
d1=0//单片机默认状态为1,不用初始化了,此处直接赋值0则可驱动
};
此为最最简单的电路程序设计。下载后,蜂鸣器一会一直处于鸣叫状态。
你可以加一个延时函数,再把d1口置高,可让它,叫一下关闭。也可以加个while(1)大循环,让它“滴、滴”不停地叫。还可以设置一个按键,按一个亮一下。
随程序的变化,现象也会各不同。
㈨ 单片机驱动蜂鸣器电路
单片机驱动蜂鸣器电路如下:
蜂鸣器经常用于电脑、打印机、万用表这些设备上做提示音,提示音一般也很简单,就是简单发出个声音就行,我们用程序简单做了个 4KHZ 频率下的发声和 1KHZ 频率下的发声程序代码如下:
#include
sbit BUZZ = P1^6; //蜂鸣器控制引脚
unsigned char T0RH = 0; //T0 重载值的高字节
unsigned char T0RL = 0; //T0 重载值的低字节
voidOpenBuzz(unsigned int frequ);
void StopBuzz();
void main(){
unsigned int i;
TMOD = 0x01; //配置 T0 工作在模式 1,但先不启动
EA = 1;
while(1){ //使能全局中断
OpenBuzz(4000); //以 4KHz 的频率启动蜂鸣器
for (i=0; i<40000; i++);
StopBuzz(); //停止蜂鸣器
for (i=0; i<40000; i++);
OpenBuzz(1000); //以 1KHz 的频率启动蜂鸣器
for (i=0; i<40000; i++);
StopBuzz(); //停止蜂鸣器
for (i=0; i<40000; i++);
}
}
/* 蜂鸣器启动函数,frequ-工作频率 */
void OpenBuzz(unsigned int frequ){
unsigned int reload;//计算所需的定时器重载值
reload = 65536 - (11059200/12)/(frequ*2); //由给定频率计算定时器重载值
T0RH = (unsigned char)(reload >> 8); //16 位重载值分解为高低两个字节
T0RL = (unsigned char)reload;
TH0 = 0xFF; //设定一个接近溢出的初值,以使定时器马上投入工作
TL0 = 0xFE;
ET0 = 1; //使能 T0 中断
TR0 = 1; //启动 T0
}
/* 蜂鸣器停止函数 */
void StopBuzz(){
ET0 = 0; //禁用 T0 中断
TR0 = 0; //停止 T0
}
/* T0 中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0()interrupt1{
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
BUZZ = ~BUZZ; //反转蜂鸣器控制电平
}
㈩ 51单片机的蜂鸣器问题
#include<reg51.h>
sbit beep = P1^7;
char sss;
bit bbb;
//*****************************
void sleep(int ms) //延时
{
int i;
for(;ms > 0; ms--) for(i = 0; i < 124; i++);
}
//******************************
void init() //初始化定时器0
{
TMOD = 0x01;
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
//*******************************
void main()
{
char i;
init(); // 中断
while(1) {
if (bbb) { //蜂鸣器发出多.
bbb = 0;
for (i = 0; i < 124; i++) {
beep = ~beep;
sleep(1);
}
}
}
}
//********************************
void TIMER0() interrupt 1
{
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
sss++;
if (sss == 20) {
sss = 0;
bbb = 1;
}
}
//********************************