我使用字符串和指针编写了以下代码,用于8051微控制器的LCD接口。我声明了两个字符串,分别是str1和str2以及指针ptr1和ptr2。当我初始化两个指向字符串开头的指针时,我得到错误C231说' ptr1' :重新定义和ptr2相同。以下是代码:
#include<reg51.h>
char str1[]="abcd";
char str2[]="efgh";
int i;
char *ptr1;
ptr1=&str1[0];
char *ptr2;
ptr2=&str2[0];
sbit rs=P1^0;
sbit wr=P1^1;
sbit en=P1^2;
void delay()
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<1275;j++);
}
void lcd_inl()
{
comwrt(0x38);
comwrt(0x0f);
comwrt(0x01);
comwrt(0x81);
}
void datwrt(char)
{
P2=ch;
rs=1;
wr=0;
en=1;
delay();
en=0;
}
void comwrt(int)
{
P2=i;
rs=0;
wr=0;
en=1;
delay();
en=0;
}
void main()
{
P1=0x00;
P2=0x00;
lcd_inl();
delay();
while(!*ptr1)
{
datwrt(*ptr1);
ptr1++;
}
delay();
while(!*ptr2)
{
comwrt(0xc1);
delay();
datwrt(*ptr2);
ptr2++;
}
while(1);
}
答案 0 :(得分:2)
这一行
SET ano=%Ret:~6,4%
除了作为定义的一部分合并的初始化语句之外,必须在函数内,所有可执行代码都必须。
所以你需要
ptr1=&str1[0];
编辑(来自OP的评论),如下所示:
char *ptr1 = str1;
我查看了reg51.h,但没有#include<reg51.h>
char str1[]="abcd";
char str2[]="efgh";
int i;
char *ptr1 = str1;
char *ptr2 = str2;
sbit rs=P1^0;
sbit wr=P1^1;
sbit en=P1^2;
或str1
或str2
或ptr1
。因此,如果您仍然收到错误,有些事情您没有告诉我们。