Текстовый режим LCD
Я согласен с другими, если вы пишете в текстовом режиме, нет никакого смысла делать это на уровне персонажа. Время обработки, необходимое для выполнения вычислений, вероятно, займет столько же времени, сколько и время для написания материала.
Более того, уровень на персонажа будет проходить через часть памяти, поскольку вам нужно будет буферизовать то, что отображается в данный момент (то есть, что было написано в последний раз).
Вы можете упростить процесс, разделив экран на секции (линии, как правило, наиболее удобны), а затем отметив их при изменении этой линии. Это особенно полезно, если вы хотите записать в буфер памяти вашего экрана и синхронизировать его позже (например, с временным прерыванием).
Сокращение по проекту
Вместо того, чтобы оставить это на усмотрение водителя, вы можете уменьшить время записи на уровне приложения, гарантируя, что вы будете писать только то, что изменяется. Этого можно достичь, назначив конкретные ячейки значений, по сути, выполнив следующее:
char text[50];
int val;
...
lcd_print("The count is ", 0, 0); // Print static text at the coords (0,0)
sprintf(text, "%d", val);
lcd_print(text, 0, 13); // Print changing text at (0,13)
...
sprintf(text, "%d", val);
lcd_print(text, 0, 13); // Print changing text at (0,13)
А не:
char text[50];
int val;
...
sprintf(text, "The count is %d", val);
lcd_print(text, 0, 0); // Print all text at the coords (0,0)
...
sprintf(text, "The count is %d", val);
lcd_print(text, 0, 0); // Print all text at the coords (0,0)
Графический режим LCD
С другой стороны, если ваш процесс записи довольно дорогой, как у меня (~ 20 байт, рисование символа в графическом режиме), тогда было бы полезно сэкономить время на символьной основе. Есть две схемы, которые вы можете использовать. Первый, как вы описываете, но вы также можете рассмотреть (при использовании графического режима) концепцию буферизации горизонтальной линии пикселей через строку текста.
Запись каждого символа для каждого символа требует ручного перемещения курсора записи на линию пикселей, предполагая, что вы рисуете горизонтально, а затем сверху вниз. Этот шаг можно удалить, написав все верхние строки всех символов в текстовой строке или, что еще лучше, изменив подмножество (т. Е. «ABC», а затем отдельно «I» в «XXXDEFGHX» -> «ABCDEFGHI»).
Конечно, точное сохранение с использованием последнего метода будет зависеть от того, сколько строк пикселей составляют высоту символа. Чем больше строк, тем больше экономия (потому что вам нужно больше перемещать курсор).