下述程序K1开关不起作用是怎么回事,要如何修改,新手级别,请教高手解释一下。
#include<reg52.h>//包含单片机寄存器头文件
sbit Dor=P1^0;
sbit K1=P3^7;
/************************************************************
函数功能://1000us基准延时程序
************************************************************/
void delay1000us()
{
unsigned char j;
for(j=0;j<114;j++)
{;}
}
/************************************************************
函数功能://1666us基准延时程序
************************************************************/
void delay1666us()
{
unsigned char j;
for(j=0;j<190;j++)
{;}
}
/************************************************************
函数功能://延时约30ms函数
************************************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
/************************************************************
函数功能://产生500HZ频率的声音的函数
************************************************************/
void beep500()
{
Dor=0;
delay1000us();
Dor=1;
delay1000us();
}
/************************************************************
函数功能://产生300HZ频率的声音的函数
************************************************************/
void beep300()
{
Dor=0;
delay1666us();
Dor=1;
delay1666us();
}
/************************************************************
函数功能://每次循环之间的时间间隔
************************************************************/
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{;}
}
}
/************************************************************
函数功能://振响声音函数
************************************************************/
void zhengxiang()
{
unsigned int t;
while(1)
{
for(t=0;t<500;t++)
{
beep500();
}
for(t=0;t<750;t++)
{
beep300();
}
Dor=1;
delay1ms(1000);
}
}
/************************************************************
函数功能://主函数
************************************************************/
void main()
{
Dor=0;
for(;;)
{
while(1)
{
if(K1==1)
delay();
Dor=~Dor;
zhengxiang();
while(!K1);
}
}
}
最佳答案
看了下,你的
void zhengxiang()
死循环了(进入该函数后不能退出)
试试去掉其中的
while(1)
{
和后面一个 }
追问:
还有个问题,可是上电就响,能不能上电不响,按键才响。请教。 追答:
if(K1==1){ delay(); Dor=~Dor; zhengxiang();} //加一对{}试试,这样,只有K1为1是,才响
追问:
成功!是什么原理啊?刚入道不久,我有点摸着头脑,请教?
你原来的程序,当K1==1时,只执行delay();然后就执行下面的 zhengxiang();声音了而加个{}后,只有当K1==1时,才会执行{}中的内容这个是C语言的基础
其他回答
暂无其它回答!