51单片机的蜂鸣器问题

// 目的是让蜂鸣器一秒钟响一下“duo”

#include<reg51.h>
sbit beep=P1^7;
//*****************************

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;
EA=1;
ET0=1;
TR0=1;
}

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

void main()
{

init(); // 中断
while(1) // 蜂鸣器发出多
{
beep=~beep;
sleep(1);
}
}

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

void TIMER0() interrupt 1
{

TH0=(65535-50000)/256;
TL0=(65535-50000)%256;

}

【问题】结果就一直发出duo 而不是隔一秒发出一下 ??

第1个回答  推荐于2017-09-06
#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;
}
}
//********************************追问

char i 是做什么的呢 =)

if (bbb) // 蜂鸣器发出多.
{
bbb = 0;
for (i = 0; i < 124; i++)
{
beep = ~beep;
sleep(1);
}
}

有了sleep(1)的延时 为啥还给beep=~beep; 做计数呢 ?

if (bbb) // 蜂鸣器发出多.
{
bbb = 0;
beep = ~beep;
sleep(1);

}

追答

先试试看,效果如何?

本回答被提问者采纳
第2个回答  2011-07-28
延时函数不对,改下:
for(i=0;i<10000;i++)
如果太长了间隔,改为2000或多少,自己试下
第3个回答  2011-08-03
beep=~beep,是为了生成方波
第4个回答  2011-07-28
发音程序放在中断服务程序。 我是大概看了一下不知道对不对

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网