51单片机,使用数组怎么保存引脚?
int keyNum = 0;
int showKey(){
int LN = 3;
int CN = 3;
char L[] = {P1_3,P1_2,P1_1,P1_0}; //矩阵竖向按钮 这是第十行代码
char C[] = {P1_7,P1_6,P1_5,P1_4};//矩阵横向按钮
LCD_ShowString(1,3,"HOLLE");
while(LN>=0){
P1 = 0xFF;
L[LN] = 0;
while(CN){
if(C[CN] == 0){while(C[CN] == 0);Delay(20);keyNum = 1;}
CN--;
}
LN--;
}
}
Build target 'Target 1'
compiling ShowKey.c
ShowKey.c(10): error C247: non-address/-constant initializer
ShowKey.c(10): error C247: non-address/-constant initializer
ShowKey.c(10): error C247: non-address/-constant initializer
ShowKey.c(10): error C247: non-address/-constant initializer
ShowKey.c(11): error C247: non-address/-constant initializer
ShowKey.c(11): error C247: non-address/-constant initializer
ShowKey.c(11): error C247: non-address/-constant initializer
ShowKey.c(11): error C247: non-address/-constant initializer
Target not created.
Build Time Elapsed: 00:00:00
试过其他数组类型,也是不行
不知道这样保存是不是对的
sfr不能作为变量使用,我大概明白你的用法,你是希望根据指定的索引自动选择操作某个寄存器,你要实现这个目的,可能得用复杂点的方法,写个函数,根据传输的参数的索引值,用if或switch之类的分支语句,选择一个sfr来进行操作。
像这样
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
#define P1_1_ID 1
#define P1_2_ID 2
char ReadIO(char port_id)
{
switch(port_id){
case P1_1_ID:
return P1_1;
break;
case P1_2_ID:
return P1_2;
break;
}
}
main()
{
char L[] = {P1_3_ID,P1_2_ID,P1_1_ID,P1_0_ID};
ReadIO(L[1]);
}
你不能那么定义,你可以在程序中读取键盘的值,把值存放到数组