8051 to I2C backpack/4 bit LCD Byte Construct Probelms
It looks like you have a 1602 LCD with a 4-bit interface. I recently wrote an interface to the 1602 for the MSP430. It is in 'C', but you should be able to follow it. 

You need to 'OR' in the control bits for every I2C access. You probably don't need 4 accesses like I used. I like to end with all signals at default (looks nice on a scope). The 'backlight' bit is vendor dependent, your module may not use it. gbBackLight is a global boolean set/cleared elsewhere.

#define LCD_I2C_SLAVE_ADDR   0x27

// HW Port Bits
#define LCD_D7   0b10000000    // Most significant data bit in 4-bit mode
#define LCD_D4   0b00010000    // Least significant data bit in 4-bit mode
#define LCD_BACK 0b00001000    // Back-light bit
#define LCD_EN   0b00000100    // Enable bit
#define LCD_RW   0b00000010    // Read/Write bit
#define LCD_RS   0b00000001    // Register select bit, 0 = Instr, 1 = Data

#define LCD_DDDD 0b11110000    // All data bits in 4-bit mode


// Instruction control bits
#define LCD_INSTR_CLEAR_DISP       0x01
#define LCD_INSTR_RETURN_HOME      0x02
#define LCD_INSTR_ENTRY_MODE_SET   0x04
#define LCD_INSTR_DISP_ON_OFF      0x08
#define LCD_INSTR_CURS_DISP_SHIFT  0x10
#define LCD_INSTR_SET_FUNCT        0x20
#define LCD_INSTR_SET_CGRAPH_ADDR  0x40
#define LCD_INSTR_SET_DATA_ADDR    0x80

// Bit definitions for Display on/off
#define LCD_DISPLAY_ON             0x04
#define LCD_DISPLAY_CURS           0x02
#define LCD_DISPLAY_BLINK          0x01

// Bit definitions for Cursor shift
#define LCD_CURS_SHIFT_RIGHT       0x04

// Bit definitions for Set Function
#define LCD_FUNCTION_8BIT          0x10
#define LCD_FUNCTION_2LINE         0x08
#define LCD_FUNCTION_5x11          0x04

// Write an instruction to the LCD display
// Assumes that LCD is already in 4-bit mode
boolean_t WriteLcdInstr( uint8_t u8Data )
{
   uint8_t au8TxData[4];


   // Write upper LCD nibble (always from upper DIO nibble)
   au8TxData[0] = ( gbBackLight &lt;&lt; 3 );
   au8TxData[1] = ( u8Data &amp; 0xF0 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_EN;
   au8TxData[2] = ( u8Data &amp; 0xF0 ) | ( gbBackLight &lt;&lt; 3 );           // Write occurs when EN goes low
   au8TxData[3] = ( gbBackLight &lt;&lt; 3 );

   I2C_Master_Write( LCD_I2C_SLAVE_ADDR, au8TxData, 4 );

   __delay_cycles( LCD_EXEC_CYC );       // Don't really need a delay here, added to make scope interpretation easier


   // Write lower LCD nibble (always from upper DIO nibble)
   au8TxData[0] = ( gbBackLight &lt;&lt; 3 );
   au8TxData[1] = ( u8Data &lt;&lt; 4 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_EN;
   au8TxData[2] = ( u8Data &lt;&lt; 4 ) | ( gbBackLight &lt;&lt; 3 );              // Write occurs when EN goes low
   au8TxData[3] = ( gbBackLight &lt;&lt; 3 );

   I2C_Master_Write( LCD_I2C_SLAVE_ADDR, au8TxData, 4 );

   __delay_cycles( LCD_EXEC_CYC );       // This delay might be important


   // 'Clear' and 'Home' take a long time
   if ( u8Data &lt;= LCD_INSTR_RETURN_HOME )
   {
      __delay_cycles( LCD_HOME_CYC );
   }

   return ( TRUE );
}



// Write a character to the LCD display at the current cursor position (or to the custom graphic RAM if CG addr was set last)
// Assumes that LCD is already in 4-bit mode
// Cursor will increment afterwards
boolean_t WriteLcdData( uint8_t u8Data )
{
   uint8_t au8TxData[4];


   // Write upper LCD nibble (always from upper DIO nibble)
   au8TxData[0] = ( gbBackLight &lt;&lt; 3 ) | LCD_RS;
   au8TxData[1] = ( u8Data &amp; 0xF0 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_EN | LCD_RS;
   au8TxData[2] = ( u8Data &amp; 0xF0 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_RS;           // Write occurs when EN goes low
   au8TxData[3] = ( gbBackLight &lt;&lt; 3 );

   I2C_Master_Write( LCD_I2C_SLAVE_ADDR, au8TxData, 4 );

   __delay_cycles( LCD_EXEC_CYC );       // Don't really need a delay here, added to make scope interpretation easier


   // Write lower LCD nibble (always from upper DIO nibble)
   au8TxData[0] = ( gbBackLight &lt;&lt; 3 ) | LCD_RS;
   au8TxData[1] = ( u8Data &lt;&lt; 4 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_EN | LCD_RS;
   au8TxData[2] = ( u8Data &lt;&lt; 4 ) | ( gbBackLight &lt;&lt; 3 ) | LCD_RS;             // Write occurs when EN goes low
   au8TxData[3] = ( gbBackLight &lt;&lt; 3 );

   I2C_Master_Write( LCD_I2C_SLAVE_ADDR, au8TxData, 4 );

   __delay_cycles( LCD_EXEC_CYC );        // This delay might be important

   return ( TRUE );
}