gpt4 book ai didi

c - 如何利用 txt 文件中的换行符将 lcd 光标移至下一行?

转载 作者:行者123 更新时间:2023-11-30 16:22:48 26 4
gpt4 key购买 nike

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

我已经使用 pySerial 从 txt 文件中连续读取字符。我已经完成了适当的编码并在 Windows 10 上运行。我还将字符一一写入到 UART 上。这是代码的一部分,它使用必要的编码进行串行写入。我不确定这是否是我出错的地方。

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

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

    volatile unsigned char data;
unsigned char h[] ;

//Function to print string on LCD
void lcd_string(char *str)
{
while(*str != '\0')
{
lcd_wr_char(*str);
str++;
}
}
void append(char* s, char c)
{
int len = strlen(s);
s[len]=c;
s[len+1]='\0';
}

SIGNAL(SIG_USART2_RECV) // ISR for receive complete interrupt
{
data = UDR2;
UDR2 = data;
append(h,data);
}

//The main program which has to do the job.

int main(void)
{
init_devices();
lcd_set_4bit();
lcd_init();
while(1)
{
lcd_cursor(1,1);
lcd_string(h);
}
}

发送到 UART 的串行数据的格式为“11, 23, 8\nC1, A5, F3 #”,哈希值表示串行数据的结束。

在 LCD 上,应显示如下:

11,23,8

C1、A5、F3

我们非常乐意提供任何帮助。谢谢。

最佳答案

似乎追加函数没有按原样接受换行符。这是我解决问题的方法。

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) 进行比较,如果发现相等,则跳过该字符并将光标移动到液晶显示屏的第二行。

关于c - 如何利用 txt 文件中的换行符将 lcd 光标移至下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54279511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com