我的目的是:让八个led灯依次向右亮同时依次熄灭,然后向左亮同时依次熄灭。
我遇到的问题是:运行到最后,第八个灯会常亮
#include<regx51.h>
#include<intrins.h>
#define uint unsigned int //定义uint
#define uchar unsigned char //定义uchar
uchar 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); //声明函数delay
void delayms(uint); //声明函数delayms
int 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--);
}