
我用STC51单片机控制蜂鸣器、为什么只发出很低的不正常声音(正常应该是那种尖的声音吧)?程序和图如下:
蜂鸣器部分图部分程序:sbitbeep=P1^7;sbitLedGreen=P0^7;/*定时器0初始化*/voidtimer0_init(void){TMOD|=0x0...
蜂鸣器部分图
部分程序:
sbit beep=P1^7;
sbit LedGreen=P0^7;
/*定时器0初始化*/
void timer0_init(void)
{
TMOD|=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*定时器0中断子函数*/
void timer0_isr() interrupt 1
{
static u16 num=0,n=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
if(n==10)
{
n=0;
flag=1;
}
}
/***************主函数***************/
void main(void)
{
timer0_init();
beep=0;
while(1)
{
if(flag)
{
flag=0;
beep=~beep;
}
}
}
按道理说应该是高电平(即beep=1)蜂鸣器响?可为什么一上电或者一复位蜂鸣器还响持续约1秒钟???(就算一复位IO口是高电平、而我的主程序首先就将beep=0了、也不至于这么夸张吧?)然后蜂鸣器就很低的声音响?感觉像的滴滴答答的声音?而如果用延时程序就可以有规律的响(每500ms响一下、正常声音)、可实际情况不容许我用延时程序。
另外还有按键扫描程序也可测试:
/*按键扫描函数*/
u8 keyscan(void)
{
u8 keyvalue;
keyport=0x0f;
if(keyport!=0x0f)
{
delay_ms(10);
if(keyport!=0x0f)
{
keyport=0x7f;
if(keyport!=0x7f)
{
keyvalue=keyport&0x0f;
keyvalue|=0x70;
while(keyport!=0x7f)
{
display();
beep=1;
LedGreen=0;
}
// beep=0;
// LedGreen=1;
return keyvalue;
}
}
}
按道理应该当按键按一下以后蜂鸣器会一直响啊、因为beep=1了、没有置0;可是事实是很低的声音响一声之后就没了、而LED灯就是一直亮、真搞不懂是为什么?
这个问题困扰我几天了、求各位高手帮忙解决啊~ 展开
部分程序:
sbit beep=P1^7;
sbit LedGreen=P0^7;
/*定时器0初始化*/
void timer0_init(void)
{
TMOD|=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*定时器0中断子函数*/
void timer0_isr() interrupt 1
{
static u16 num=0,n=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
if(n==10)
{
n=0;
flag=1;
}
}
/***************主函数***************/
void main(void)
{
timer0_init();
beep=0;
while(1)
{
if(flag)
{
flag=0;
beep=~beep;
}
}
}
按道理说应该是高电平(即beep=1)蜂鸣器响?可为什么一上电或者一复位蜂鸣器还响持续约1秒钟???(就算一复位IO口是高电平、而我的主程序首先就将beep=0了、也不至于这么夸张吧?)然后蜂鸣器就很低的声音响?感觉像的滴滴答答的声音?而如果用延时程序就可以有规律的响(每500ms响一下、正常声音)、可实际情况不容许我用延时程序。
另外还有按键扫描程序也可测试:
/*按键扫描函数*/
u8 keyscan(void)
{
u8 keyvalue;
keyport=0x0f;
if(keyport!=0x0f)
{
delay_ms(10);
if(keyport!=0x0f)
{
keyport=0x7f;
if(keyport!=0x7f)
{
keyvalue=keyport&0x0f;
keyvalue|=0x70;
while(keyport!=0x7f)
{
display();
beep=1;
LedGreen=0;
}
// beep=0;
// LedGreen=1;
return keyvalue;
}
}
}
按道理应该当按键按一下以后蜂鸣器会一直响啊、因为beep=1了、没有置0;可是事实是很低的声音响一声之后就没了、而LED灯就是一直亮、真搞不懂是为什么?
这个问题困扰我几天了、求各位高手帮忙解决啊~ 展开
1个回答
展开全部
蜂鸣器有2种。一种相当于一个喇叭,这种蜂鸣器需要你指定频率,也就是你要不断的写0和1到Px口。
还有一种是内部带震荡和驱动的蜂鸣器,只需要加合适的电源就响。
另外建议将蜂鸣器放置到三极管C与电源+之间。
还有一种是内部带震荡和驱动的蜂鸣器,只需要加合适的电源就响。
另外建议将蜂鸣器放置到三极管C与电源+之间。
追问
谢谢你的回答、不过我的这蜂鸣器只要写一次1就可以一直响了吧?我用延时程序就可以的:
while(1)
{
beep=~beep;
delay_ms(500);
}
同样是500ms、为什么用定时器就不行?(定时器程序见一开始的提问)真是难解、、、求解释啊~~~
另外针对你说的第二点、我想问下蜂鸣器为什么要这样放(三极管C与电源+之间)?我想知道原因、或者说这样放好在哪里?请帮忙解释下、谢谢~

2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询