Не...

цель маленько не такая. )))
Просто есть несколько типов индикаторов на разных контроллерах. Какой контроллер у меня - не известно. Т.к. не могу на него найти точный даташит, да и производитель китайский... Поэтому решил пойти путем "голь на выдумку хитра". Т.е. собрать типы инициализации всех возможных контроллеров и сделать один универсальный для всех. И он даже начал работать, пока я не взялся за оптимизацию и что-то поломал, пока не могу найти что...
Вот для MT-16S2H:
1. Включить питание
2. Ждать 20 мс.
3. Команда 0011 (8 разрядов)
4. Ждать 40 мкс.
5. Команда 0011
6. Ждать 40 мкс.
7. Команда 0011
8. Ждать 40 мкс.
9. Команда 0010 (4 разряда)
10. Ждать 40 мкс.
11. Дальше не регламентировано. )))))
Вот для HD44780:
1. Включить питание
2. Ждать 15 мс.
3. Команда 0011
4. Ждать 4,1 мс.
5. Команда 0011
6. Ждать 100 мкс.
7. Команда 0011
8. Ждать 50 мкс. (хотя не регламентировано)
9. Команда 0010
10. Ждать 50 мкс. и т.д.
Вот для KS0066:
1. Включить питание
2. Ждать 30 мс.
3. Команда 0010
4. Ждать 39 мкс.
5. Дальше уже полные команды и паузы 39 мкс. А для очистка дисплея с паузой 1, 53 мс.
Если повторить несколько раз подряд одну и туже команду для KS0066, думаю ничего страшного с ним не будет. А вот если для HD44780 не дописать одну команду? Вместо трех подряд подать две? Думаю, ему не понравится.
А паузы при инициализации выбрать самые длинные из указанных. Однако, в целях "сжимания" кода, хотелось бы использовать не разные задержки в разных местах, а одни и те же в некоторых. Например, пауза №2 (при включении) длинной 20 мс. использовать для задержки после очистки дисплея (медленная команда) вместо 1,6 мс.