IO Port Expender MCP23017

#define IOEXPENDER_Write_Addess		0x40 //0b0100A2A1A00
uint8_t I2C_Write_IO(char add,char data)
{
	I2C_Start();
	I2C_Write(IOEXPENDER_Write_Addess);
	I2C_Write(add);
	I2C_Write(data);
	I2C_Stop();
}
#define IOEXPENDER_Read_Addess		0x41 //0b0100A2A1A01
uint8_t I2C_Read_IO(char add)
{
    uint8_t value;
	I2C_Start();
	I2C_Write(IOEXPENDER_Write_Addess);
	I2C_Write(add);
	I2C_Start();
	I2C_Write(IOEXPENDER_Read_Addess);
	value=I2C_Read_Nack();
	I2C_Stop();
	return value;
}
  #include<avr/io.h>
  #include<util/delay.h>
  #include<util/twi.h>
  #include"IO_Expender.h"
int main(void)
 {
  twi_init();
  uint8_t pushButton,shift=1;
  /******************** initialize MCP23017 *******************/
  // I/O Control Register: BANK=0, SEQOP=1, HAEN=1(Enable Addressing)
  I2C_Write_IO(IOCONA,0x28);
  I2C_Write_IO(IODIRA,0x00); //GPIOA as output
  I2C_Write_IO(IODIRB,0xff); //GPIOB as input
  I2C_Write_IO(GPPUB,0xff);  //enable pull-up resister for GPB
  _delay_ms(5);
  /*************************************************************/
  while(1)
	{
	 pushButton=I2C_Read_IO(GPIOB);
	 if(pushButton == 0b11111011)
	 {
		for(int i=7;i>=0;i--)
		{
			I2C_Write_IO(GPIOA,(1<<i));
			_delay_ms(500);
		}
	 }else 
		I2C_Write_IO(GPIOA,shift);
		_delay_ms(500);
		shift=(shift<<1);
		if(shift == 0)
		shift=1;
	}
return 0;
}