求高手指点下程序

2019-07-16 04:39发布

按键K1.控制4个流水灯轮流闪烁。按键按下一次换一个灯闪烁。现在遇到的问题是:我按下按键的判断时间跟灯闪烁的延时时间一样。例如,我把灯的闪烁改成1s一次,按键就也会跟着变成要按1s才会换下个灯亮。我把判断按键放进延时,然后在有按键按下时让他延时一下。但是我一加下面这个注释123的延时。就会导致整个delay02的时间延长,从而导致灯的闪烁不符合我要的时间。求大神给个解决让按键判断时间跟灯闪烁延时时间分开的法子。
#include<reg52.h>
sbit K1=P1^0;
sbit L1=P1^4;
sbit L2=P1^5;
sbit L3=P1^6;
sbit L4=P1^7;
unsigned char i,j,k,a,b,c,d,;
void delay02s()
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
  for(k=248;k>0;k--)//;
  {
   if(K1==0)
   
   {
    a++;
    if(a==4)
    {
     a=0;
    }
       for(b=10;b>0;b--)//1
          for(c=40;c>0;c--)//2
            for(d=248;d>0;d--);//3.一加这个延时就会导致整个延时变长。
             return;//程序运行到这里会马上跳回主函数。
   }
  }
}
void main()
{  
    a=0;
    while(1)
{
  if(a==0)
  {
   L4=1;//初始化其他灯的状态,保持只有一个灯闪烁,其他灭。
   L1=~L1;
   delay02s();
  }
  if(a==1)
  {
   L1=1;
   L2=~L2;
if(K==1){
   delay02s();}
  }
  if(a==2)
  {
   L2=1;
   L3=~L3;
   delay02s();
  }
  if(a==3)
  {
   L3=1;
   L4=~L4;
   delay02s();
  }
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
xuge7837
1楼-- · 2019-07-16 07:25
void delay20ms();
void main()
{
    unsigned char   shift=0x11;
     while(1)
    {
              if(k1==1)//按一下按钮,马上放开
          {
                        if(shift==0)shift=0x11;
              P1=shift;
              delay20ms();
              shift<<=1;
                 }
       }
}
可以试试上面的,delay20ms,自己写。


草根白骨精
2楼-- · 2019-07-16 11:49
delay02s(xx);
用参数传递解决,xx表示多少个20MS,在delay02s(u8 num)函数里面再加个for(;num > 0; num --){把你程序包含在里面},同时提醒你一下,你是空函数,不需要返回

一周热门 更多>