I would start by applying power and verifying the powerup test pattern works. The first row of characters will be darkened boxes, followed by a blank second row. If it remains blank, it's either a display fault, or you have the Vo pin set to minimum contrast. Otherwise, this is the startup sequence I use in my 4-bit displays. Keep in mind 4-bit mode uses pins Data4 thru Data7; with Data4 as the LSB. To "EXECUTE," I ground the ENable pin for 1us, then raise it back to Vdd.
---ON POWER UP
* RS pin grounded
* EN pin at Vcc
* R/W permanently grounded into write mode
---LCD INITIALIZE
* Hold 16.320ms (15ms minimum required)
* Send "03h" to LCD bus
* EXECUTE
* Hold 4.608ms (4.1 minimum required)
* EXECUTE
* Hold 128us
* EXECUTE
* Hold 128us
* Send "02h" to bus ("Function set" for using a 4 bit interface)
* EXECUTE
* Hold 128us
---LCD BUS WIDTH AND DISPLAY SIZE SETUP
* Send "02h" to bus ("Function Set" command)
* EXECUTE
* Hold 64us
* Send "04h" to bus (To indicate dual line display)
* EXECUTE
* Hold 64us
After that I send the remainder of command to power off the display, change cursor options, then tell the LCD to power on again. Basically all my holds are 10% longer than the minimum recommendation.