Edit. Довел до работоспособности. Подключение по 4-битной шине. То есть дисплей висит на 1 порту. Экономия выводов МК. Чтение Busy нет. Итак. Что такое lcd_send_com_nibble(). Так как передача по 4-битной шине, то тут особый алгоритм. Дисплей по умолчанию на 8-битной шине. Его нужно переключить yf 4-битную шину.
Задержка 50-100 мс после включения.
Отправка команды 0x30. Старшая тетрада. Управления по 8-битной шине.
Задержка 5 мс.
Отправка команды 0x30. Старшая тетрада. Управления по 8-битной шине.
Задержка 5 мс.
Отправка команды 0x30. Старшая тетрада. Управления по 8-битной шине.
Задержка 5 мс.
Отправка команды 0x20. Старшая тетрада. Управления по 4-битной шине.
Задержка 50 мкс.
Отправка команды 0x28. Байт. Управления по 4-битной шине. 2-строчный режим. В вашем случае 1 строка.
Задержка 50 мкс.
Отправка команды 0x01. Байт. Сброс дисплея. И так далее.
Задержка 50 мкс.
_delay_ms(100);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x20);
_delay_us(100);
lcd_send_com(0x28);
_delay_us(100);
lcd_send_com(0x01);
_delay_ms(5);
lcd_send_com(0x06);
_delay_us(100);
lcd_send_com(0x0C);
_delay_us(100);