下述程序K1开关不起作用是怎么回事,要如何修改,新手级别,请教高手解释一下。

原问题:下述程序K1开关不起作用是怎么回事,要如何修改,新手级别,请教高手解释一下。
分类:编程开发 > 最后更新时间:【2017-07-13 22:17:54】
问题补充:

#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语言的基础
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    19

    分享到:

    其他回答

    暂无其它回答!

      推荐