Слишком сложно всё.
Попытайтесь для начала подключить экран напрямую к пинам ардуины, и завести в обычном, параллельном режиме. Лучше - в 4-битном режиме.
А уже потом, когда всё получится, можете попробовать данные формировать последовательно, загружать их в регистр, а потом защёлкивать на его выходах, чтобы они так же, параллельно, уходили в дисплей.
Инициализацию можете подсмотреть у меня (
код,
заголовки). Только я использую I2C-8bit преобразователь PCF8574, а у Вас будет свой последовательный интерфейс. То есть, по сути, можно будет только функцию I2CWriteByte() заменить своей аналогичной, задача которой - передать данные последовательно в регистр, а потом выбросить их на выходы регистра.
У меня выходы D7..D4 дисплея подключены к 7..4 выходам PCF8574, E подключен к 2 выходу, RW - к 1-му, RS - к 0-му. Ну и подсветка, BCKL - к 4-му. Можете подключить регистр так же, без использования разных стабилитронов. Просто 8 выходов регистра - к 4 шинам данных и трём управляющим входам, напрямую. Главное - сформировать на них нужные данные, и передать параллельно на дисплей.