Microcontroller 通过串口导入字符串并在LCD显示屏上打印

Microcontroller 通过串口导入字符串并在LCD显示屏上打印,microcontroller,pic,Microcontroller,Pic,我想在LCD上显示string=“MYNAME”。我在串行端口上导入字符串,但它没有显示在LCD上。错误是什么?有人能帮我吗?我使用pic16f887和pic模拟器IDE。是否有一些功能或其他功能?您需要检查每个字符的UART1_数据_就绪,并将字符的接收放入一个循环中,该循环在按“.”键时结束。此外,还需要将strcpy移出循环,这样就不会在每个字符上都写入输出字符串 编辑:替换strcat,因为它要求两个变量都是字符串 我还添加了一个回音,以确保程序正确地从UART接收字符 //======

我想在LCD上显示
string=“MYNAME”
。我在串行端口上导入字符串,但它没有显示在LCD上。错误是什么?有人能帮我吗?我使用pic16f887和pic模拟器IDE。是否有一些功能或其他功能?

您需要检查每个字符的UART1_数据_就绪,并将字符的接收放入一个循环中,该循环在按“.”键时结束。此外,还需要将strcpy移出循环,这样就不会在每个字符上都写入输出字符串

编辑:替换strcat,因为它要求两个变量都是字符串

我还添加了一个回音,以确保程序正确地从UART接收字符

//================= konfigure LCD
// porta za podatoci e PORTB
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
char name;
char txt[16];


void init(){
    PORTB = 0xFF;
    TRISB = 0x00;
    ANSEL = 0x00;
    ANSELH = 0x00;
    C1ON_bit = 0;
    C2ON_bit = 0;
    UART1_Init(9600);
    Delay_ms(100);
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
}
//=========================================================



void main()
{
    init();
    UART1_Write_Text("Start");
    UART1_Write(10);
    UART1_Write(13);
    do{
    }
    while(!UART1_Data_Ready());

    name = UART1_Read();
    if (name!='.')
    {
        strcpy(txt,"name");
        strcat(txt,name);
        Lcd_Out(1,1, txt);
        Delay_ms(1);
    }
    else
        Lcd_Out(2,1, "error");
}

请帮助我,这对我来说非常重要……@user1011868,如果您在“if(name!=”。)行上放置一个断点(从读取字符返回后),您是否曾经到达过那里?如果是这样的话,name的值是多少?我尝试使用此代码,但仍然不起作用,仅在LCD上显示name,而不是通过串行端口发送的值“kiki”…刚刚发现另一个bug,您无法将字符连接到字符串。我将更新我的答案。您是否输入了我之前要求的断点,以便在调用UART1\u Read后可以看到'name'变量的值?另外,你也可以回显你的角色——我会把它添加到我的答案中。我的任务还有一个问题,我不知道如何解决第一部分。这是发布任务时的链接。如果你知道,请帮助我?
strcpy(txt,"name ");
while (1)
{
    while(!UART1_Data_Ready());

    name = UART1_Read();
    if (name!='.')
    {
        char i;

        UART1_Write(name);
        i = strlen(txt);
        txt[i] = name;      // add char to end of string
        txt[i+1] = '\0';    // add zero to terminate new string
        Lcd_Out(1,1, txt);
        Delay_ms(1);
    }
    else
    {
        UART1_Write(13);     // cr
        UART1_Write(10);     // lf
        break;
}