In my previous post, I asked you to Google for LCD software initialization, you will see some examples there.
Added after 5 minutes:
This is what I have for a 2 x 16, you will need to adapt to your needs:
void LCD_InitDisplay()
{
RS = 0; //RS = 0
RW = 0; //R/W = 0
Delay10KTCYx(36); //Wait aprox. 30 mSec.
PORTB = 0x30; //Function Set: 8 bits
Delay10KTCYx(6); //Wait aprox. 5 mSec.
PORTB = 0x30; //Function Set: 8 bits
Delay1KTCYx(2); //Wait aprox 100uSec. (166 uSec)
LCD_WriteCommand(0x38); //Function Set: 8 bits, 2 lines, 5x7 character font
LCD_WriteCommand(0x0C); //ON/OFF Control: Display on,
LCD_WriteCommand(0x01); //Clear display
LCD_WriteCommand(0x06); //Increment, no shift
}//LCD_InitDisplay
Again remember the NOP() after RS and RW settings depends on the system speed.