从 UART 接收的数据中获取子字符串并放入 LCD

2024-01-08

发布为基于的新问题this one https://stackoverflow.com/questions/59559083/is-there-string-in-c(OP 最初对已回滚的问题进行了巨大更改),因为用户表示他们无法自己提出问题。

About 图16F877A: 我从 UART(COM 端口)接收数据并显示在 LCD 16x4 上。 我收到的数据构成:

Line1#Line2#Line3#Line4

我想将接收到的数据发送到LCD,如下所示:

/*LCD16x4
 :~~~~~~~~~~~~~~~~:
 : Line1          :
 : Line2          :
 : Line3          :
 : Line4          :
 :________________:
*/

我把char数组到行x, col y(开始于1) to a LCD by:

lcd_gotoxy(x, y);
printf(lcd_putc, data);

我有一个char array:

char data[];

我尝试创建getLcdContents函数来逐一获取每一行:

char* getLcdContents(char arr[], int line)
{
    char delimiter = '#';
    int8 begin = 0;
    int8 end = 0;
    int step = 0;
    char result[20];

    //!   printf("* Array length: %u \r\n", strlen(arr));
    //!   printf("* Array  : %s \r\n",arr);
    for (int8 i = 0; i < strlen(arr); i++)
    {
        if (arr[i] == delimiter)
        {
            end = i;
            step++;
            if (step == line)
            {
                for (int k = 0; k < 20; k++)
                {
                    if (k < end - begin)
                    {
                        result[k] = arr[k + begin];
                        //printf("*result[%u]: %s \r\n",k,arr[k+begin]);
                    }
                    else
                    {
                        result[k] = " ";
                    }
                }
            }
            begin = i + 1;
        }
    }

    result[20] = '\0';
    printf("* Line%u  : %s \r\n", line, result);
    return result;
}

然后从获取数据RDA_isr(void)放到LCD by:

#INT_RDA
Void RDA_isr(Void)
{
    gets(rx);

    char* row1 = getLcdContents(rx, 1);
    lcd_gotoxy(1, 1);
    printf(lcd_putc, row1);

    char* row2 = getLcdContents(rx, 2);
    lcd_gotoxy(1, 2);
    printf(lcd_putc, row2);

    char* row3 = getLcdContents(rx, 3);
    lcd_gotoxy(1, 3);
    printf(lcd_putc, row3);

    char* row4 = getLcdContents(rx, 4);
    lcd_gotoxy(1, 4);
    printf(lcd_putc, row4);
}

但这是行不通的。谁能帮我?非常感谢!


首先,您返回当函数返回时不再存在的局部变量。

由于它是 PIC uC,我个人会重用原始字符串来保留内存。

int split(char **argv, char *string)
{
    int argc = 0;

    argv[0] = string;
    while(*string)
    {
        if(*string == '#') 
        {
            *string = 0;
            argc++;
            argv[argc] = string + 1;
        }
            string++;
    }
    if(argv[argc][0]) argc++;
    return argc;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 UART 接收的数据中获取子字符串并放入 LCD 的相关文章

随机推荐