标题: 单片机流水灯代码问题 [打印本页]

作者: CJBJTT    时间: 2019-10-30 00:48
标题: 单片机流水灯代码问题
这是我的代码,请问为什么仿真的时候会一个灯先走一遍,然后才开始按顺序1到8个等依次走一遍

DENG.png (35.6 KB, 下载次数: 27)

DENG.png

作者: sZhou    时间: 2019-10-30 06:43
编译后看汇编代码,单步运行不就知道了
作者: xianfajushi    时间: 2019-10-30 06:45
写了2种位移,嵌套循环,也算是花样流水灯了,自己写的会不知道流水灯效果,那你不是写,是抄袭的?你可分别把其中一条移位语句注释掉试看。
作者: mengzhixinheng    时间: 2019-10-30 07:49
k值不对,第一遍后a的初值被改变为0xff
作者: csmyldl    时间: 2019-10-30 07:52
k=1时,此时a=0xfe,for (l=1;l<=8;l++)循环控制一个灯走一遍,k=2时,此时a=0xff,执行a=a<<k后,a=0xfc,才符合你编程逻辑
作者: wulin    时间: 2019-10-30 08:07
  1. #include<reg52.h>

  2. void delay(unsigned int ms)
  3. {
  4.         unsigned int i,j;
  5.         for(i=ms;i>0;i--)      
  6.                 for(j=114;j>0;j--);
  7. }

  8. void main()
  9. {
  10.         unsigned char a=0xfe;
  11.         while(1)
  12.         {
  13.                 P1=a;
  14.                 delay(1000);
  15.                 a=(a<<1)+1;
  16.                 if(a==0xff)
  17.                         a=0xfe;
  18.         }
  19. }
复制代码

作者: CJBJTT    时间: 2019-10-30 10:14
mengzhixinheng 发表于 2019-10-30 07:49
k值不对,第一遍后a的初值被改变为0xff

对,在第二个循环要用其他参数代替a,谢谢
作者: CJBJTT    时间: 2019-10-30 10:15
csmyldl 发表于 2019-10-30 07:52
k=1时,此时a=0xfe,for (l=1;l

谢谢,知道了,是第二个循环里面要用一个参数代替a,我没注意直接改变a的值了
作者: CJBJTT    时间: 2019-10-30 19:49
#include<reg52.h>


DELAY(unsigned int ms)      
{
    unsigned int i,j;
    for(i=ms;i>0;i--)
        for(j=114;j>0;j--);
    return 0;  
}
void main()
{
        int a,b,k,l;
        while(1)
        {        a=0xfe;          
                for(k=0;k<8;k++)
                {        if(k>0)
                                a=a<<1;
                        b=a;                       
                        for(l=k;l<8;l++)
                        {        P1=b;
                                DELAY(400);
                                b=(b<<1)+1;       
                        }
                }         
        }
}
这是我的最终代码




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