qq_33419134 2022-07-14 16:31 采纳率: 50%
浏览 66
已结题

51单片机,使用数组怎么保存引脚?

问题遇到的现象和发生背景

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

我的解答思路和尝试过的方法

试过其他数组类型,也是不行

我想要达到的结果

不知道这样保存是不是对的

  • 写回答

2条回答 默认 最新

  • qllaoda 2022-07-14 17:36
    关注

    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]);
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 乐观的study123 2022-07-14 16:53
    关注

    你不能那么定义,你可以在程序中读取键盘的值,把值存放到数组

    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月23日
  • 已采纳回答 7月15日
  • 修改了问题 7月14日
  • 创建了问题 7月14日

悬赏问题

  • ¥30 android百度地图SDK海量点显示标题
  • ¥15 windows导入environment.yml运行conda env create -f environment_win.yml命令报错
  • ¥15 这段代码可以正常运行,打包后无法执行,在执行for内容之前一直不断弹窗,请修改调整
  • ¥15 C语言判断有向图是否存在环路
  • ¥15 请问4.11到4.18以及4.27和4.29公式的具体推导过程是怎样的呢
  • ¥20 将resnet50中的卷积替换微ODConv动态卷积
  • ¥15 通过文本框输入商品信息点击按钮将商品信息列举出来点击加入购物车商品信息添加到表单中
  • ¥100 这是什么压缩算法?如何解压?
  • ¥20 upload上传实验报错500,如何解决?(操作系统-windows)
  • ¥15 谁知道 ShaderGraph 那个节点可以接入 Particle System -> Custom Data