Before I go any further, I should probably mention that I've never actually got I2C working - though I do know the basic principles. I'm not the most qualified person to answer this question.
Are you familiar with what is going on on the SDA and CLK lines in a working I2C communication? If not, there are plenty of guides online, so it would be a good idea to get accustomed with it.
To begin to analyse the waveforms, first look for the start bit. Then look at the logic level of SDA at each preceding falling edge. The first 7 of these bits form the device address. The bit after that determines whether the master intends to read (1) or write to (0) the slave device. The bit after that is the acknowledge bit. If this is low, then the slave has received the address and is ready to continue the communication. If not, something's going wrong.
The line in your code #define SLAVE_ADDRESS_LCD 0x40
would be an obvious mistake if, as you say, the LCD address is actually 0x28.