标题: 单片机新人刚学,在学到LED流水程序有些不会 [打印本页]

作者: herohr0209    时间: 2022-4-2 23:36
标题: 单片机新人刚学,在学到LED流水程序有些不会
这个闪烁间隔300ms左右还有:增加闪烁间隔时间(一次增加50ms)
        增加闪烁间隔时间(一次减少加50ms)   
单片机程序写到这不会写了  求求帮帮可以嘛   需要咋改

#include<AT89X52.H>
#include<intrins.h>
sbit SW=P3^0;
typedef unsigned int u16;
void delay(u16 i)
{
         
                while(i--);
}

void main()
{
  unsigned char i;
        unsigned char temp;
         unsigned int CYCLE=600,PWM_LOW=0;

        
               
        if(SW!=0)
        {
                temp=0x80;
                for(i=0;i<8;i++)
                  {
                        P1=~temp;
                        delay(50000);
                        temp=_cror_(temp,1);
                  }
                        
        }        

        if(SW==0)
          {
                        
                temp=0x01;
                 for(i=0;i<8;i++)
      {
                        P1=~temp;
                        delay(50000);
                  
                                
                        temp=_crol_(temp,1);
            }
               
    }

}


作者: zhxiufan    时间: 2022-4-3 08:44
你这个程序框架是无法实现所说的功能的。可以考虑用定时器,或者增加几个变量来尝试。最好还是用中断比较好。
作者: herohr0209    时间: 2022-4-3 09:24
zhxiufan 发表于 2022-4-3 08:44
你这个程序框架是无法实现所说的功能的。可以考虑用定时器,或者增加几个变量来尝试。最好还是用中断比较好 ...

谢谢啦   可是我还是不太懂  因为刚学有些东西没学到      我现在想做的是用开关改变流水灯的走向 和 延迟递增
作者: 斯安居危    时间: 2022-4-3 11:20
你可以用这种方式,能实现就是太啰嗦了,适合我这样的新手,你试试肯定可以完成你说的功能,精确度不高,可以用debug,尽量减小误差
void main()
{   sbit  SW=P3^0;//尽量不用这个端口,P3口的端口都是双功能口,可以用P012的任意端口
   unsigned  long i=0;
  unsigned char  j=xx;
  while(1)
  {
     while(j--)//这里的值需要计算看下面一次循环需要多少时间给j赋值
    {
      SW=1;
      for(i=0;i<xx;i++);
      SW=0;
      for(i=0;i<xx;i++);
    }
     j=xx;//
while(j--)//这里的值需要计算看下面一次循环需要多少时间给j赋值
    {
      SW=1;
      for(i=0;i<xx;i++);
      SW=0;
      for(i=0;i<xx;i++);
    }
  }
}



作者: alunli    时间: 2022-4-3 15:38
把Delay(50000) 改成Delay(X),然后,通过按键改变X的值即可。
作者: herohr0209    时间: 2022-4-4 08:15
alunli 发表于 2022-4-3 15:38
把Delay(50000) 改成Delay(X),然后,通过按键改变X的值即可。

我试过了  改为X就会闪得超级很快
作者: 一事无成    时间: 2022-4-4 17:05
有一个简单的方法,把端口的状态值写到一个数组里(数组最好加code关键字),然后再循环延时调用。
作者: herohr0209    时间: 2022-4-7 07:50
一事无成 发表于 2022-4-4 17:05
有一个简单的方法,把端口的状态值写到一个数组里(数组最好加code关键字),然后再循环延时调用。

不会呀。。。听不懂
作者: wd1988    时间: 2022-4-7 08:41
herohr0209 发表于 2022-4-4 08:15
我试过了  改为X就会闪得超级很快

有没有给X赋值啊,按现在一开始X=50000,通过按键1按一下 X=X+5000,按键2按一下X=X-5000,通过按键改变延时时间。





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