Двойная буферизация не спасает от скачков между панелями. Бороться можно тремя путями.
Путь 1.
Сделать развертку по строкам, а не по столбцам. Если кол-во строк равно скважности, то такой проблемы не возникает. И при движении текста появляется эффект наклона букв и нет эффекта растяжения/сжатия Для "правильного" наклона вправо развертку нужно начинать с нижней строки. (в дальнейшем предполагаю, что строки нумеруются снизу) Алгоритм обычный - а) вывод с 0-й по 7-ю горизонталь б)сдвиг буфера влево на 1 вертикаль.
Если скважность 1:8, а кол-во строк 16 (2 панели одна над другой, каждая со скважностью 1:8), то при обычном подходе движущееся изображение будет "рваться" между панелями.
Для "правильного" отображения нужно организовать вывод на экран так, светящаяся активная строка развертки верхней панели "подхватывала" развертываемое изображение нижней панели.
Разъясняю:
Допустим, табло высотой в 16 точек состоит из 2х панелей, расположенныйх одна над другой. Каждая панель высотой в 8 точек. Развертка на панелях - снизу вверх, с 0-й по 7-ю строку. Развертка на обеих панелях синхронная, т.е. управление строчными ключами обейх панелей можно объединить. Таким образом, имеем 2 одновременно активных ключа. (2 луча, если проводить аналогию с ЭЛТ)
При отображении строка на верхней панели должна "подхватывать" изображение нижней, т.е. после 7й строки нижней панели 0-вая строка верхней должна продолжать отрисовывать
тот же кадр. Так как оба ключа панелей работают одновременно, то нижняя панель
в это же время должна рисовать уже следующий кадр изображения (возможно, уже сдвинутый влево на 1 точку). ТО есть мы дожны иметь 2 буфера - для верхней и нижней панели. и сдвиг изображения в буфере верхней панели делать на 1 кадр позже.
Проще говоря, изображение на каждой следующей (верхней) панели должно отставать ровно на
1 кадр развертки от изображения на предыдущей(нижней) панели, т.е. при регенерации 100Гц - на 10 мс. И так с каждой вышестоящей панелью (при высоте в 24,32,40 точек...).
Или выражаясь немного по-иному, каждый луч (лучем называю активный ключ, который пробегает с нижней строки нижней панели к верхней строке верхней панели) должен рисовать
свой кадр. На строке высотой 16 точек таких луча 2 и, соответственно, в одно и то же время на строку выводится 2 разных кадра. И на каждый луч нужно иметь свой буфер.
Путь 2. Оставить развертку "по столбцам". Здесь эффекта наклона букв нет. Алгоритм реализации движения, собственно, ничем не отличается от первого пути. Принцип тот же. Только панели стоят боком. Но немного сложнее в реализации, так как здесь двумя или тремя буферами не обойдешся (ширина строки обычно > 24 точек). Насчет, эффекта растяжения/сжатия - ничег не скажу. На моей строке такого не наблюдал. Хотя на строках других производителей он мне даже понравился. Может, не наблюдал из-за того, что расстояние наблюдения строки было слишком малое. А от этого много чего зависит.
Ну, и
3-й путь (мой любимый) - статика. И для светодиодов полезно, и программировать проще некуда

. И побочных эффектов никаких нет. Благо, стоимость драйверов растворяется в стоимости хороших светодиодов.
З.Ы. "1 кадр развертки" специально выделил для того, чтобы отличать его от одного кадра генерируемого изображения. Т.е. когда одно генерируемое изображение выводится 2,3,4..... кадра.