Внимательно проверь инициализацию!
Похоже, ты неправильно инициализируешь ЖКИ
После каждого выставления на портах необходимо провести процедуру clockE(); иначе эти данные не защелкнутся и ЖКИ их не увидит!
И, поскольку ты все равно не пользуешься прерываниями, сделай отдельную функцию clockE, что-то вроде
void lcd_clock_E(void)
{
CNTRL_PORT |= _BV(LCD_ENABLE); //E = 1
__delay_cycles(150); //10us но вроде достаточно 1мкс
CNTRL_PORT &= ~(_BV(LCD_ENABLE)); //E = 0
}
void lcd_init(void)
{
CNTRL_PORT &= ~(_BV(LCD_RS));
CNTRL_PORT &= ~(_BV(LCD_RW));
__delay_cycles(222000); // Wait more than 15ms
LCD_PORT = 0x3A; // Startup Sequence
lcd_clock_E(); //Вот это ты забыл!!!
__delay_cycles(61000); // Wait more than 4.1ms
lcd_clock_E(); //Вот это ты забыл!!!
__delay_cycles(1500); // Wait more than 0.1ms
lcd_clock_E(); //Вот это ты забыл!!!
LCD_PORT = 0x3A;
lcd_clock_E(); //Вот это ты забыл!!!
while(LCD_GET_BUSY()); //С этого момента ЖКИ дает адекватную инфу в бите BF
__delay_cycles(61000);
lcd_wr_reg(INST_REG,0x0E);
while(LCD_GET_BUSY());
__delay_cycles(61000);
lcd_wr_reg(INST_REG,0x01);
while(LCD_GET_BUSY());
__delay_cycles(61000);
lcd_wr_reg(INST_REG,0x06);
while(LCD_GET_BUSY());
__delay_cycles(61000);
}
По окончании инициализации индикатор может мигнуть. Это можно расценивать как успешную инициализацию. Только учти, что данная процедура -- для 8-ножечного обмена. Для 4-ножечного она немного уменьшится.
ВАЖНО!!! Может быть очень смешно, но уточни, как ты подаешь смещение на ножку контрастности - а то можно вообще ничего не увидеть и при правильной инициализации :)
Скажешь, получилось ли :)
Успехов!