单片机中,关于流水灯问题,从P1口接了8盏led灯,要实现从上到下两次,从下到上两次,然后再闪两次的c程序

#include<reg51.h>
void delay(unsigned int xms);
unsigned char code a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},b[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void x_and_s(unsigned int m);
void s_and_x(unsigned int n);
void main()
{
unsigned int n;
while(1)
{s_and_x(2);
x_and_s(2);
for(n=2;n>0;n--)
{P1=0;
delay(300);
P1=1;
delay(300);}
}
}

void x_and_s(unsigned int m)
{unsigned char i,j;
for(j=m;j>0;j--)
for(i=0;i<8;i++)
{P1=b[i];
delay(500);}
}

void s_and_x(unsigned int n)
{unsigned char i,j;
for(j=n;j>0;j--)
for(i=0;i<8;i++)
{P1=a[i];
delay(500);}
}
帮忙看看,是不是哪里有错了。结果是只有一个灯在亮。

你好 大致看了一下,没有测试,感觉问题出在这个程序段
for(n=2;n>0;n--)
{P1=0;
delay(300);
P1=1;
delay(300);
P1口是个8位口,P1=1相当于00000000+00000001,
将P1=0改成P1=0x00,P1=1改成P1=0xff,这样该能解决问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-08
把这个函数加上,
void delay(unsigned int xms);
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=50;y>0;y--);
}
另外把P1=1;
改成P1=0xff;