仅在 16x2 LCD 中滚动一些文本(HD44780 显示程序
Only scrolling some Text in 16x2 LCD(HD44780 display programm
我有一个程序显示如下。
第一行:电压:过压
第二行:电流:过电流。
在 LCD 中无法完全显示字母 OVer Voltage 或 Over Current。
我只想滚动这些。但是 Volt : 和 current : 字母将在那里不需要滚动?
因此您需要创建一个例程来循环显示您要显示的消息。
举个例子,第一次发送"Volt: Over Volta"
然后一秒钟后发送 "Volt: ver Voltag"
然后 "Volt: er Voltage" 依此类推。
另一种选择是创建一个例程,在确定 len 后显示带有起始索引的值部分。
以下puesdo代码不是compiled/tested。
char buf[17];
char label[]= "Current";
char value[]= "Over Current";
while(1)
{
if (++start_pos >= (strlen(value)+strlen(label)-16)
{
start_pos=0;
delay(500); //ms
}
snprintf(buf,16,"%s: %s",label,value[start_pos]);
puts(buf); // whatever the name of your routine to send string to LCD
if (start_pos==0)
{
delay(500); //ms
}
delay(1000); //ms NOTE: you probably want to go do some other code during this time.
}
您可能想看看您的 LCD 是否有滚动命令。一些 LCD 有一个字符缓冲区,您可以在其中写入数据,然后给出滚动命令来移动显示的内容。例如,我使用的 LCD 可以在 DDRAM 中每行存储 40 个字符,而只显示 16 个字符。如果我没记错的话,你必须以这种方式同时滚动两行。
如果这不能满足您的喜好,另一种方法是在代码中移动您的缓冲区,然后 re-write 将其全部转移到 LCD。你可以做得足够快,看起来并不可怕。
我有一个程序显示如下。
第一行:电压:过压 第二行:电流:过电流。
在 LCD 中无法完全显示字母 OVer Voltage 或 Over Current。 我只想滚动这些。但是 Volt : 和 current : 字母将在那里不需要滚动?
因此您需要创建一个例程来循环显示您要显示的消息。
举个例子,第一次发送"Volt: Over Volta" 然后一秒钟后发送 "Volt: ver Voltag" 然后 "Volt: er Voltage" 依此类推。
另一种选择是创建一个例程,在确定 len 后显示带有起始索引的值部分。
以下puesdo代码不是compiled/tested。
char buf[17];
char label[]= "Current";
char value[]= "Over Current";
while(1)
{
if (++start_pos >= (strlen(value)+strlen(label)-16)
{
start_pos=0;
delay(500); //ms
}
snprintf(buf,16,"%s: %s",label,value[start_pos]);
puts(buf); // whatever the name of your routine to send string to LCD
if (start_pos==0)
{
delay(500); //ms
}
delay(1000); //ms NOTE: you probably want to go do some other code during this time.
}
您可能想看看您的 LCD 是否有滚动命令。一些 LCD 有一个字符缓冲区,您可以在其中写入数据,然后给出滚动命令来移动显示的内容。例如,我使用的 LCD 可以在 DDRAM 中每行存储 40 个字符,而只显示 16 个字符。如果我没记错的话,你必须以这种方式同时滚动两行。
如果这不能满足您的喜好,另一种方法是在代码中移动您的缓冲区,然后 re-write 将其全部转移到 LCD。你可以做得足够快,看起来并不可怕。