попытаюсь по-порядку 1. рассмотрим
void LCD_busy()
{
unsigned char i,j;
for(i=0;i<500;i++) //A simple for loop for delay
for(j=0;j<255;j++);
}
здесь i и j описаны как unsigned char, т.е. могут принимать значения от 0 до 255. Т.е. цикл for(i=0;i<500;i++) будет вечным, поскольку i никогда не достигнет 500
2. не знаю какая у Вас тактовая, но выполнение
LCD_en=1;
LCD_en=0;
создаст импульс Е длительностью всего 2 такта. При тактовой 24МГц это будет около 80 нсек, а индикатору нужно не меньше 500 нсек
3. В LCD_init() тайминги вообще не выдержаны, посмотрите например рисунок на стр.5
http://www.melt.ah …cs/file2087%5B1%5D.pdf
там всё очень хорошо видно
4. Флаг busy в принципе не является необходимым. Я его не использую.
5. До более сложных реализаций Вам пока далеко, для начала лучше сделайте работоспособным простой алгоритм