C51编程出错:456.C(18): error C247: non-address/-constant initializer

以下是我写的问题程序:
#include<reg52.h>
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^4;
sbit D6=P1^5;
sbit D7=P1^6;
sbit D8=P1^7;

void Delay() //定义延时函数
{ int i;
for(i=1;i<20000;i++);
}
void main() //主函数
{
int j;
unsigned char a[7]={D1,D2,D3,D4,D5,D6,D7,D8};
for(j=0;j<8;j++)
a[j]=0;
}

unsigned char a[7]={D1,D2,D3,D4,D5,D6,D7,D8}; 有问题 不能这么写
想实现流水灯 这么写
while(1)
{
a=0x01; //赋初值00000001
for(i=0;i<7;i++)
{
P0=a;
delay(500);
a=a<<1; //左移
}
for(i=0;i<7;i++)
{
P0=a;
delay(500);
a=a>>1; //右移
}
}追问

大侠,能给我解释一下代码的具体含义吗?我是是单片机小白,看不懂啊!麻烦大侠再把那个流水灯的程序从头文件开始再完整的写一遍!谢谢大侠!!!

追答

//8个led左右循环来回移动
#include
unsigned char a,i; //定义1个变量a,用来给P0口赋值

void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}

void main()
{
while(1)
{
a=0x01; //赋初值00000001
for(i=0;i>1; //右移
}
}

}

追问

大侠,能加你QQ吗?还有好多问题想向你请教!不胜感激呐!!

追答

多看看书 在单片机论坛逛逛 论坛问也很多人回答的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-08
a[7]是unsigned char类型数组,D1....D7是sbit类型,肯定会报错。而且C51不支持位数组
相似回答