遇到一道流水灯问题,大神请进,谢谢了

2019-07-15 16:16发布

  1. 题目是第一次一个灯流动一次,第二次两个灯流动,依次到8个灯,时间间隔为300ms。我写出的程序第3次开始灯的显示就有问题。大神帮忙改下,谢谢了。
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
lichengjie2015
1楼-- · 2019-07-16 06:03
不好意思,第一次发的程序有误,这是正确的,亲测无误。


#include<reg52.h>
#include<intrins.h>
void delay(int x)
{
        int i,j;
        for(i=110;i>=0;i--)
                for(j=x;j>=0;j--);
}
void main()
{
        
        int a,b;
        while(1)
        {
                a=0xfe;
                for(b=0;b<8;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xfc;
                for(b=0;b<7;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf8;
                for(b=0;b<6;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf0;
                for(b=0;b<5;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xe0;
                for(b=0;b<4;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xc0;
                for(b=0;b<3;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0x80;
                for(b=0;b<2;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                P1=0;
                delay(100);
        }
}
lichengjie2015
2楼-- · 2019-07-16 08:11
不好意思,第一次发的程序有误,这是正确的,亲测无误。


#include<reg52.h>
#include<intrins.h>
void delay(int x)
{
        int i,j;
        for(i=110;i>=0;i--)
                for(j=x;j>=0;j--);
}
void main()
{
        
        int a,b;
        while(1)
        {
                a=0xfe;
                for(b=0;b<8;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xfc;
                for(b=0;b<7;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf8;
                for(b=0;b<6;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf0;
                for(b=0;b<5;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xe0;
                for(b=0;b<4;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xc0;
                for(b=0;b<3;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0x80;
                for(b=0;b<2;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                P1=0;
                delay(100);
        }
}
lichengjie2015
3楼-- · 2019-07-16 12:19
不好意思,第一次发的程序有误,这是正确的,亲测无误。


#include<reg52.h>
#include<intrins.h>
void delay(int x)
{
        int i,j;
        for(i=110;i>=0;i--)
                for(j=x;j>=0;j--);
}
void main()
{
        
        int a,b;
        while(1)
        {
                a=0xfe;
                for(b=0;b<8;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xfc;
                for(b=0;b<7;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf8;
                for(b=0;b<6;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xf0;
                for(b=0;b<5;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xe0;
                for(b=0;b<4;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0xc0;
                for(b=0;b<3;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                a=0x80;
                for(b=0;b<2;b++)
                {
                P1=a;
                a=_crol_(a,1);
                delay(100);
                }
                delay(100);

                P1=0;
                delay(100);
        }
}
cxj1423
4楼-- · 2019-07-16 16:42
 精彩回答 2  元偷偷看……
丶未云何龙
5楼-- · 2019-07-16 17:32
cxj1423 发表于 2015-8-16 20:01
这个应该满足你的要求,前提是将硬件设置好

#include

不好意思,可能是我没表达清楚,第一次只有一个灯在流动,第二次两个灯一起流动,以此类推。。。还是谢谢你的回答,有兴趣的话就继续帮想下这题怎么做。
赤焰火狐
6楼-- · 2019-07-16 19:32
本人亲测,符合你的要求。
#include<reg52.h>
#include<intrins.h>

#define uint unsigned int
#define uchar unsigned char

uchar code dat[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};

void Delayms(uint n)
{
        uint i,j;
        for(i=n;i>0;i--)
                for(j=115;j>0;j--);
}

void main()
{
        uchar a,b,c;
        while(1)
        {
                for(a=0;a<7;a++)
                {
                        c=dat[a];
                        for(b=8-a;b>0;b--)
                        {
                                P0=c;
                                Delayms(300);
                                c=_crol_(c,1);
                        }
                }
                a=4;
                while(a--)
                {
                        P0=0x00;
                        Delayms(300);
                        P0=~P0;
                        Delayms(300);
                }
        }
}

一周热门 更多>