// 目的是让蜂鸣器一秒钟响一下“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 而不是隔一秒发出一下 ??
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);
}
先试试看,效果如何?
本回答被提问者采纳for(i=0;i<10000;i++)
如果太长了间隔,改为2000或多少,自己试下