打印

请教一个蜂鸣器不能关闭的问题

[复制链接]
1098|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CallReceiver|  楼主 | 2015-11-15 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P3^7;
uint n,nn;
uint j;

void delay500(void)
{
uchar i;
for(i=230;i>0;i--);
}

void beep_beep()
{
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率1KHz
delay500(); //延时500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率500Hz
delay500(); //延时1ms
delay500();
}
}

main()
{
TMOD=0x01;
TH0=0xfc; TL0=0x66; //1ms定时
EA=1; ET0=1;
TR0=1;
while(1)
{
beep_beep();
}
}

void Time0(void) interrupt 1 using 0
{
TH0=0xfc; //1ms定时
TL0=0x66;
n++;
if(n==100)
{
n=0;
nn++;
}
if(nn==5)
{
nn=0;
BEEP=1; //关闭蜂鸣器
}
}
沙发
handleMessage| | 2015-11-15 16:34 | 只看该作者
首先确定:真的是用的蜂鸣器吗???看代码似乎是扬声器????

使用特权

评论回复
板凳
boy1990| | 2015-11-15 16:43 | 只看该作者
P3.7输出直接驱动蜂鸣器,一般是不行的声音太小,可以加一级三极管驱动一下。

使用特权

评论回复
地板
JY-DX-JY| | 2015-11-15 16:43 | 只看该作者
你主程序里不断取反,怎么能关闭呢?

使用特权

评论回复
5
forget345| | 2015-11-16 09:46 | 只看该作者
JY-DX-JY 发表于 2015-11-15 16:43
你主程序里不断取反,怎么能关闭呢?

楼上正解
while(1)
{
beep_beep();
}   这一段会不断的被执行,导致beep_beep();一直被调用。beep_beep();只在你需要的时候调用一下,
比如定时器中定时10秒钟,置位一个标志位Flag = 1; 然后在
while(1)
{
  if(Flag == 1)
{
   Flag = 0;
   beep_beep();
}
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

1695

帖子

1

粉丝