I am trying to interface mlx90614 with nuvoton mcu,for the sensor default i2c address is 0x5a,can anybody help me with this?

#include “N76E003.h”
#include “SFR_Macro.h”
#include “Function_define.h”
#include “Common.h”
#include “Delay.h”
#define regular_I2C_pins 0
#define alternate_I2C_pins 1

#define regular_I2C_GPIOs() do{P13_OpenDrain_Mode; P14_OpenDrain_Mode; clr_I2CPX;}while(0)
#define alternative_I2C_GPIOs() do{P02_OpenDrain_Mode; P16_OpenDrain_Mode; set_I2CPX;}while(0)

#define I2C_GPIO_Init(mode) do{if(mode != 0){alternative_I2C_GPIOs();}else{regular_I2C_GPIOs();}}while(0)

#define I2C_CLOCK 0x27 //Fclk = Fsys / (4*(prescalar + 1))

#define I2C_ACK 0
#define I2C_NACK 1

#define timeout_count 1000

void I2C_init(void);
void I2C_start(void);
void I2C_stop(void);
unsigned char I2C_read(unsigned char ack_mode);
void I2C_write(unsigned char value);

#define I2C_W 0
#define I2C_R 1

#define MLX_addr 0x5A
#define MLX_WR (MLX_addr + I2C_W)
#define MLX_RD (MLX_addr + I2C_R)

void I2C_init(void)
{
I2C_GPIO_Init(regular_I2C_pins);
I2CLK = I2C_CLOCK;
set_I2CEN;
}

void I2C_start(void)
{
signed int t = timeout_count;

set_STA;                                

clr_SI;
while((SI == 0) && (t > 0))
{
t–;
};
}

void I2C_stop(void)
{
signed int t = timeout_count;

clr_SI;

set_STO;
while((STO == 1) && (t > 0))
{
t–;
};
}

unsigned char I2C_read(unsigned char ack_mode)
{
signed int t = timeout_count;
unsigned char value = 0x00;

set_AA;                             

clr_SI;
while((SI == 0) && (t > 0))
{
t–;
};

value = I2DAT;

if(ack_mode == I2C_NACK)
{
	t = timeout_count;
	clr_AA;   
	clr_SI;
	while((SI == 0) && (t > 0))
	{
		t--;
	};   		
}

return value;

}

void I2C_write(unsigned char value)
{
signed int t = timeout_count;

I2DAT = value; 
clr_STA;           
clr_SI;
while((SI == 0) && (t > 0))
{
	t--;
};  

}

unsigned char MLX_read(unsigned char address);
void MLX_write(unsigned char address, unsigned char value);
void MLX_write(unsigned char address, unsigned char value)
{
I2C_start();
I2C_write(MLX_addr );
I2C_write(address);
I2C_write(value);
I2C_stop();
}
unsigned char MLX_read(unsigned char address)
{
unsigned char value = 0x00;
I2C_start();
I2C_write(MLX_RD );
I2C_write(address);
I2C_start();
I2C_write(MLX_RD );
value = I2C_read(I2C_NACK);
printf ("\n The value read is %d",value );
I2C_stop();
return value;
}
void main(void)
{
char c=0x00;
InitialUART0_Timer3(115200);
TI = 1;
I2C_init();
while(1)
{

       MLX_read();

        };

}