标题: 写单片机LED流水灯和闪烁结合的程序出现的问题 [打印本页]

作者: stayalone838    时间: 2022-11-28 17:27
标题: 写单片机LED流水灯和闪烁结合的程序出现的问题

我写的是郭天祥10天征服单片机的LED课后练习5,我现在遇到的两个问题是,在流水灯结束后的闪烁那个循环里面,如果我把0xff(LED全灭)写在前面再延时300ms之后写0x00(LED全亮),LED会闪烁,但是LED非常暗;但是如果我把0x00(LED全亮),写在前面再延时300ms之后写0xff(LED全灭),LED就不闪烁了,会一直亮着,直到LED闪烁循环结束,这就相当于我闪烁部分白写了......有没有同样写过这个练习的,有遇到我这样的问题吗,感谢热心大佬解答~

以下为代码:
#include <REGX51.H>

typedef char u8;
typedef int u16;

#define LED_PORT P2//宏定义整个LED端口

void delay(u16 x)//延时函数,当ten_us传入1,大约延时10us
{
        u16 y,z;
        for(y=0;y<x;y++)
                for(z=0;z<115;z++);
}

main()
{  
  u8 i=0,b=0;//定义变量i和b
  while(1)
  {
          for(i=0;i<8;i++)                                         
          {
              LED_PORT=~(0x01<<i);//从LED1亮起,i每增加一次,移位一次
              delay(200); // 延时大约0.2秒
          }
          for(i=0;i<8;i++)
          {
              LED_PORT=~(0x80>>i);//从LED8亮起,i每增加一次,移位一次
              delay(200);// 延时大约0.2秒
             }
          b++;//b自加1
          if(b%2==0)//上下循环两次后进入此循环
          {                                    
                  for(i=0;i<5;i++)
                  {
                          LED_PORT=0xff;//LED全灭
                          delay(300);
                          LED_PORT=0x00;//LED全亮
                  }
          }
  }
}


作者: lkc8210    时间: 2022-11-28 17:59
  1.           if(b%2==0)//上下循环两次后进入此循环
  2.           {                                    
  3.                   for(i=0;i<5;i++)
  4.                   {
  5.                           LED_PORT=0xff;//LED全灭
  6.                           delay(300);
  7.                           LED_PORT=0x00;//LED全亮
  8.                           delay(300);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  9.                   }
  10.           }
复制代码

作者: stayalone838    时间: 2022-11-29 20:36
lkc8210 发表于 2022-11-28 17:59

原来是这样,是我疏忽了,非常感谢你~




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