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



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

我已经使用pySerial连续读取了txt文件中的字符。我已经完成了适当的编码,并且正在Windows10上运行。我还把字符一个接一个地写在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 != '')
{
lcd_wr_char(*str);
str++;
}
}
void append(char* s, char c)
{
int len = strlen(s);
s[len]=c;
s[len+1]='';
}
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

任何帮助都将不胜感激。非常感谢。

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

最新更新