如何使用txt文件中的换行符将LCD光标移至下一行?

时间:2019-01-20 18:19:51

标签: c newline atmega lcd

我正在编写一个程序来读取.txt文件中的字符,并将此数据串行发送到MCU ATMEGA2560的UART。该MCU的LCD显示屏应一行一行接一个地显示字符。一旦遇到换行符'\ n',。txt行的下一行应打印在LCD显示屏的下一行中。现在,我面临的问题是尽管我能够在LCD上一个接一个地打印字符,但是换行符不会将光标移动到下一行的开头。取而代之的是,日语(或我不确定)字符会被打印在其位置,而下一行的字符将与其他字符打印在同一行。我只需要帮助将换行符作为LCD的命令/请求来处理,以便光标移动到下一行,而不是在同一行上打印随机的特殊字符。

我已经使用pySerial从txt文件中顺序读取了字符。我已经完成了适当的编码,并且可以在Windows 10上运行。我还已经将字符一个接一个地写入UART。这是用必要的编码进行串行写入的代码的一部分。我不确定这是否是我要去的地方。

$(document).ready(function() {
    $.ajax({
            type: "post",
            url: '/echo/json/',
            data: {},
            success: function(data) {
                var valid = $.trim(data);
                if (valid.toLowerCase().indexOf("error") == '-1') {
                    localStorage.setItem("swal", JSON.stringify({
                        title: "Good job!",
                        text: 'Thanks',
                        icon: "success",
                        button: true
                    }));

                    swal(JSON.parse(localStorage.getItem("swal"))).then(() => location.reload());
            } else {
                swal("Oops", data, "error");
            }
        }
    });
});

来到C代码中,串行接收数据并将接收到的字符存储在变量中。我尝试附加字符,但我认为这似乎是导致问题的原因。

with open(args.file) as f:
        for line in f:
            for ch in line:
                serialPort.write(ch.encode())

要发送到UART的串行数据的格式为'11,23、8 \ nC1,A5,F3#'。散列表示串行数据的结尾。

在LCD上应显示如下:

11、23、8

C1,A5,F3

我们非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

似乎append函数没有按原样使用换行符。这是我解决问题的方法。

ISR(USART2_RX_vect)     // ISR for receive complete interrupt
{
    data[count]= UDR2;
    UDR2 = data[count];
    if(data[count] == 0x0A)
    {
        lcd_cursor(2,1);
        pos = count;
        count++;
        flag = FALSE;
    }
    else if(count > pos && flag == FALSE)
    {
        lcd_wr_char(data[count]);
        x[a]=data[count];
        a++;
        count++;
        flag = FALSE;
    }
    else if(flag==TRUE)
    {
        lcd_wr_char(data[count]);
        y[b]=data[count];
        b++;
        count++;
        flag = TRUE;
    }
}

我将输入的数据与换行符十六进制值(0x0A)进行了比较,如果发现相等,请跳过该字符并将光标移至LCD显示屏的第二行。