Для реинициализации символьных LCD при зависаниях и сбоях лучше сразу предусмотреть ключ в питании LCD. Потому, что "защелкивание" только снятием/подачей питания "лечится".
Реинициализировать же чисто программно тоже можно. По крайней мере можно попробовать
Процедуру реинициализации нужно начинать с программирования ширины шины данных. Трижды передать код 0x30, а на четвертый раз 0x38 для 8-ми битной шины или 0x28 для 4-битной шины (младший нибл я указал 8 для случая, если используется двух-/четырех-строчный дисплей и фонт 5*8) . Причем в случае использования 4-х битного подключения код 0x30 передавать не ниблами (0x3, 0x0, 0x3, 0x0, 0x3, 0x0) как ожидалось бы, а как для 8-ми битного режима. (0x3, 0x3, 0x3). Передавать код инициализации нужно конечно же с учетом сдвига, если используются не самые младшие пины порта МК.