标题: 利用开发板上的开关及可受单片机IO脚控制的发光二极管 求分析 [打印本页]

作者: 1279095941    时间: 2020-9-22 22:56
标题: 利用开发板上的开关及可受单片机IO脚控制的发光二极管 求分析
//项目:利用开发板上的开关及可受单片机IO脚控制的发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。
//问题:如果删去第2,3,4个灯的代码,第一个灯就可以按下亮,但是加上后就全不亮了,也没有语法错误,我想知道我的问题出在哪里。
//我是一个初学者,还没有掌握这门技术,希望论坛的大哥们看到这么弱智的问题不要动怒,谢谢您们!!!!

单片机源程序如下:
#include<reg52.h>

sbit sp1=P3^0;
sbit sp2=P3^1;
sbit sp3=P3^2;
sbit sp4=P3^3;

void delay(int z)
{
int x,y;
for(x=z;x>0;x-- )
   for(y=114;y>0;y--) ;
}

void main()
{
if(sp1==0)
{
delay(10);
if(sp1==0)
{P1=0xfe;
delay(5);}
while(1);
}
         if(sp2==0)
{
delay(10);
if(sp2==0)
{P1=0xfd;
delay(5);}
while(1);
}
if(sp3==0)
{
delay(10);
if(sp3==0)
{P1=0xfb;
delay(5);}
while(1);
}
if(sp4==0)
{
delay(10);
if(sp4==0)
{P1=0xf7;
delay(5);}
while(1);
}


}



作者: cuihaodianzi    时间: 2020-9-23 00:07
{P1=0xfe;
delay(5);}
这个时候他不会闪 ,如果共电源的,LED只会亮,然后延时 ,还是亮着,0xFE = 1111 1110
{
  P1 = 0xFE;
  delay(5);
  P1 = 0xFF;
  delay(5);
}
这样 LED 先亮 延时 再灭 再延时 看着就是 闪了 ;后面的都一样
作者: xianfajushi    时间: 2020-9-23 12:56
while(1);修改while(sp1==0);
作者: wulin    时间: 2020-9-23 15:12
每按一次开关SP1,LED1~LED4轮流闪烁,以此反复。
  1. #include<reg52.h>

  2. sbit sp1=P3^0;
  3. //sbit sp2=P3^1;
  4. //sbit sp3=P3^2;
  5. //sbit sp4=P3^3;

  6. char i=0;
  7. int  j=0;

  8. void delay(int z)
  9. {
  10.         int x,y;
  11.         for(x=z;x>0;x-- )
  12.            for(y=114;y>0;y--) ;
  13. }

  14. void main()
  15. {
  16.         while(1)
  17.         {
  18.                 if(sp1==0)
  19.                 {
  20.                         delay(10);
  21.                         if(sp1==0)
  22.                         {
  23.                                 i++;
  24.                                 if(i>=4)
  25.                                         i=0;
  26.                         }
  27.                         while(!sp1);
  28.                 }
  29.                 j++;
  30.                 if(j>=20000)
  31.                         j=0;
  32.                 if(j<10000)
  33.                         P1=~(0x01<<i);
  34.                 else P1=0xff;
  35.         }
  36. }
复制代码

作者: 长风007    时间: 2020-9-23 17:21
问题在while(1);上。多调试两次的。
作者: 1279095941    时间: 2020-9-23 21:51
xianfajushi 发表于 2020-9-23 12:56
while(1);修改while(sp1==0);

谢谢哦,改了之后就可以了,您能解释一下为啥吗?

作者: xianfajushi    时间: 2020-9-24 09:49
while(1);是无限循环while(sp1==0);是等待按键释放




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1