51单片机:流水灯每循环一次,都让一个灯常亮

题目可能说得不清楚,我这里补充一下,
比如:0-7号灯,流水灯亮一轮之后,0号等就常亮了,然后1-7也流水一次后,1号灯也变成常亮了
结果就是,8个灯都变成常亮。请问代码要怎么改?

以下原普通流水灯代码:
#include<reg52.h>
#include<intrins.h>

void delay(unsigned char i){
unsigned char m,n;
for(m=i;m>0;m--)
for(n=125;n>0;n--);
}

void main(){
unsigned char k,j;
while(1){
P1=0xfe; //第一位
for(k=0;k<8;k++){
delay(2000); //延时
P1=_crol_(P1,1);//左移1位
}
}
}

while(1){
P1=0xfe; //第一位
for(k=0;k<8;k++){
delay(2000); //延时
P1=_crol_(P1,1);//左移1位
}
}

改为

unsigned char m; 
while(1){ 

    m=0xff;
            for(j=0;j<8;j++){
                m<<=1;    
                P1=m; //第一位
for(k=j;k<8;k++){
delay(2000); //延时
P1=_crol_(P1,1);//左移1位

            } 
            while(1);  // 如果要周而复始变化,就注释掉本行 
}

追问

额……好厉害…………【但不是我想要的效果OTL…………(

追答

完全是照你的文字描述实现的呀,
你说要的....大家可以帮你;
你想要的,...不说出来的话,嘿嘿,也许只有你最亲近的人能帮你.......

追问

OAO……我在单片机运行的状况是,第一轮:一盏灯在流水;第二轮:两盏灯在流水;第三轮:三盏灯在流水……
其实我想要的是,每一轮都是只有一盏灯啦,然后每流水一轮,就领一盏常亮,比如第二次流水的时候,1号灯就会常亮不动了,流水灯从第二个灯开始;第三轮,有两个灯固定常亮,流水灯从第三个开始

追答不好意思,理解错了,也写错代码了.下面是修改了的:

unsigned char k,j;
 unsigned char m,n,u; 
 while(1){ 
 
    m=0xff;
  n=0x01; 
    for(j=0;j<8;j++){
   u=n;                 
   n<<=1;  
   for(k=j;k<8;k++){    
    delay(2000);    //??
    P1=m&~u;//??1?                     
    u<<=1; 
   }
   m<<=1; 
  } 
            while(1);  // ?????????,?????? 
 }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-12
把P1=0xfe;放到while()上面去,你试试
相似回答