【发布时间】:2019-06-14 05:25:14
【问题描述】:
我正在编写一个程序来从 .txt 文件中读取字符并将这些数据串行发送到 MCU ATMEGA2560 的 UART。此单片机所附的液晶显示器应逐行显示字符。一旦遇到换行符“\n”,.txt 行的下一行应打印在 LCD 显示屏的下一行中。现在我在这里面临的问题是,虽然我能够在 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 #' 哈希表示串行数据结束。
在液晶显示屏上应显示如下:
11、23、8
C1、A5、F3
非常感谢任何帮助。谢谢。
【问题讨论】:
-
试试回车?还是两者兼而有之?
-
The LCD display什么液晶显示器?lcd_set_4bit看起来像 HD44780。 HD44780 具有设置光标位置的指定命令。熟悉他们。阅读 HD44780 和 arduino HD44780 库的文档。您可能必须手动处理换行符并将光标位置设置为下一行。 -
没关系。我自己解决了这个问题。谢谢您的帮助。 :)
-
@KarthikNayak 然后标记为已解决并编辑或回答这个问题,也许有人会遇到同样的问题。
-
@dunajski 是的。更新。我猜我太忙于我的项目工作了。谢谢你。 :)