按键运行后为什么最右边的灯会常亮啊

我的目的是:让八个led灯依次向右亮同时依次熄灭,然后向左亮同时依次熄灭。
我遇到的问题是:运行到最后,第八个灯会常亮


```c
#include <REG52.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key2=P3^2;
void delayms(uint);        //声明函数delayms
uchar aa;                //定义aa为大于零的数
void main()
{     int m;
    for(m=1;m>0;m--)//开始
    {    
        if(key2==0)    //按键启动时
        {     
            for(m=1;m>0;m--)
            {    
                aa=0x7f;             //让aa从最左边开始
                P1=aa;
                delayms(100);         
                for(m=8;m>0;m--)         //依次往右
                {
                    aa=_cror_(aa,1);
                    delayms(250);
                    P1=aa;
                    if(aa==0xfe)    //到最右边时            
                    {    
                        for(m=8;m>0;m--)    //依次往左
                        {    
                            aa=_crol_(aa,1);                            
                            delayms(250);
                            P1=aa;
                            if(P1==0x7f)
                               {
                                 P1=0X7F;
                                delayms(250);
                                while(!key2);        //松开按键一
                                
                             }
                        }
                    }
                }    
            }
        }
    }
 
}
void delayms(uint xms) 
{
int i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}



#include<regx51.h>#include<intrins.h>#define uint unsigned int //定义uint#define uchar unsigned char //定义ucharuchar aa;//定义aa为大于零的数sbit key1=P3^3; //定义第一个独立按键sbit key2=P3^2; //定义第二个独立按键sbit key3=P3^1; //定义第三个独立按键sbit key4=P3^0; //定义第四个独立按键//定义LED灯sbit led1=P1^7; sbit led2=P1^6; sbit led3=P1^5;sbit led4=P1^4;sbit led5=P1^3;sbit led6=P1^2;sbit led7=P1^1;sbit led8=P1^0;void delay(uint); //声明函数delayvoid delayms(uint); //声明函数delaymsint m;void main(){ while(1) { if(key1==0) //按键一启动时 for(m=1;m>0;m--) { int i; for(i=3;i>0;i--) //循环三次 { P1=0x00; delayms(100); P1=0xff; delayms(900); while(!key1); //松开按键 } } else if(key2==0) //按键二启动时 for(m=1;m>0;m--)//开始 { aa=0x7f; //让aa从最左边开始 P1=aa; delayms(100); for(m=8;m>0;m--) { aa=cror(aa,1); //依次往右 delayms(250); P1=aa; if(aa==0xfe) //到最右边时 { for(m=8;m>0;m--) { aa=crol(aa,1);//依次往左 delayms(250); P1=aa; if(P1==0x7f) { P1=0X7F; delayms(250); P1=0XFF; delayms(900) while(!key1); } } } } } else if(key3==0) //按键三启动时 { int m; for(m=1;m>0;m--) { //从左到右依次点亮 led1=0; delay(200); led2=0; delay(200); led3=0; delay(200); led4=0; delay(200); led5=0; delay(200); led6=0; delay(200); led7=0; delay(200); led8=0; delay(200); //从左到右依次熄灭 led1=1; delay(200); led2=1; delay(200); led3=1; delay(200); led4=1; delay(200); led5=1; delay(200); led6=1; delay(200); led7=1; delay(200); led8=1; delay(200); //从右到左依次点亮 led8=0; delay(200); led7=0; delay(200); led6=0; delay(200); led5=0; delay(200); led4=0; delay(200); led3=0; delay(200); led2=0; delay(200); led1=0; delay(200); //从右到左依次熄灭 led8=1; delay(200); led7=1; delay(200); led6=1; delay(200); led5=1; delay(200); led4=1; delay(200); led3=1; delay(200); led2=1; delay(200); led1=1; delay(200); //持续熄灭 while(!key1); } } else if(key4==0) //按键四启动时 { int k; for(k=1;k>0;k--) { //从中间往两边亮 led4=0,led5=0; delayms(100); led3=0,led6=0; delayms(100); led2=0,led7=0; delayms(100); led1=0,led8=0; delayms(100); P1=0x00; delayms(100); //从中间往两边熄灭 led4=1,led5=1; delayms(100); led3=1,led6=1; delayms(100); led2=1,led7=1; delayms(100); led1=1,led8=1; delayms(100); //持续熄灭 while(!key1); } } }}void delayms(uint xms) //延迟函数{ int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }//定义delay函数 void delay(uint xms){ uint i,j; for(i=xms;i>0;i--) for(j=50;j>0;j--); }



```

简单来说就是实现向右闪,然后向左闪

多个 for(m=1;m>0;m--) 这样的循环 m 重复赋值会乱的
嵌入式程序需要一个死循环做结束。否则程序有可能跑飞掉。