51单片机倒计时15秒后为什么蜂鸣器不响?

#include"reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit beep=P1^5;

u16 b=1000,c=15;
u8 a[2];
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(u16 i)
{
while(i--);
}

void s()
{
u8 j;
for(j=0;j<=7;j++)
{
switch(j)
{
case 0:P2=0X00;break;
case 1:P2=0X04;break;
case(2):
P2=0X08; break;//显示第2位
case(3):
P2=0X0c; break;//显示第3位
case(4):
P2=0X10; break;//显示第4位
case(5):
P2=0X14; break;//显示第5位
case(6):
P2=0X18; break;//显示第6位
case(7):
P2=0X1c; break;
}
}
P0=a[j];
delay(100);
P0=0X00;

}

void csh()
{
TMOD|=0X01;
TH0=0Xfc;
TL0=0X18;
ET0=1;
EA=1;

TR0=1;
}

void szh()
{
a[0]=smgduan[c%10];
a[1]=smgduan[c/10];

}

void main()
{
csh();
while(1)
{
szh();
s();

if(c==12)
{
EA=0;

beep=~beep;
delay(100);
}
}
}

void zd()interrupt 1
{
TH0=0Xfc;
TL0=0X18;
b--;
if(b==0)
{
b=1000;
c--;

}
}

虽然程序有部分隐患,但不响大概只是你延时太短了,可以改为
beep=~beep;
delay(50000);
delay(50000);
delay(50000);
温馨提示:答案为网友推荐,仅供参考
相似回答