//***************************************************************
//
//*****    Focus LCDs     *****
//***** LCDs Made Simple  *****
//***** www.FocusLCDs.com *****
//
//***************************************************************
//
////vci=3.3v 
//****************************************************************
void write_command (unsigned char y) // (uchar y,uchar x)
{
  unsigned char i;
csb=0;
sclb=0;
sdi=0;
sclb=1;
for(i=0;i<8;i++)
    {
     sclb=0;      
      if (y&0x80)
       {
          sdi=1;
        }
          else
         {
          sdi=0;
         }
       sclb=1;
      y=y<<1;
    }
csb=1;
}
//***************************************************************
void write_data(unsigned char w) // (uchar w, uchar v)
{
  unsigned char i;
csb=0;
sclb=0;
sdi=1;
sclb=1;
for(i=0;i<8;i++)
 {
  sclb=0;
     if (w&0x80)
     {
        sdi=1;
       }
          else
        {
         sdi=0;
        }
   sclb=1;
   w=w<<1;
    }
csb=1;
}

//***********************����ʾ����******************************
void write_DISPdata(unsigned char data_l,data_h)
{
byte a,i,b;
csb=0;
sclb=0;
sdi=1;
sclb=1;
a=data_l;
for(i=0;i<8;i++)
 {
    sclb=0;
     if (a&0x80) 
      {
        sdi=1; 
         }
          else
       { 
         sdi=0;
         }
  sclb=1;
   a=a<<1;
    }
csb=0;
sclb=0;
sdi=1;
sclb=1;
b=data_h;
for(i=0;i<8;i++)
 {
  sclb=0;
     if (b&0x80)
  {
        sdi=1;
}
          else
{
         sdi=0;
}
  sclb=1;
   b=b<<1;
    }
csb=1;
}
/*************************************************/
void initi(void)
{ 
   res=1;
   delay(1);
   res=0;
   delay(10);
   res=1;
   delay(120);
//***************************************************************//LCD SETING
write_command(0x11); 
delay(120);      //Delay 120ms 

write_command(0x36);
write_data(0x00);

write_command(0x3a);
write_data(0x05);  //65k
//--------------------------------ST7789V Frame rate setting----------------------------------//
write_command(0xb2);
write_data(0x0c);
write_data(0x0c);
write_data(0x00);
write_data(0x33);
write_data(0x33);

write_command(0xb7);
write_data(0x70);

//---------------------------------ST7789V Power setting--------------------------------------//
write_command(0xbb);
write_data(0x1B);//VCOM

write_command(0xc0);
write_data(0x2c);

write_command(0xc2);
write_data(0x01);

write_command(0xc3);
write_data(0x0B);

write_command(0xc4);
write_data(0x27);

write_command(0xc6);
write_data(0x0f);	 

write_command(0xd0);
write_data(0xa4);
write_data(0xA1);
//--------------------------------ST7789V gamma setting---------------------------------------//
write_command(0xe0);
write_data(0xD0);
write_data(0x06);
write_data(0x0B);
write_data(0x09);
write_data(0x08);
write_data(0x30);
write_data(0x30);
write_data(0x5B);
write_data(0x4B);
write_data(0x18);
write_data(0x14);
write_data(0x14);
write_data(0x2C);
write_data(0x32);

write_command(0xe1);
write_data(0xD0);
write_data(0x05);
write_data(0x0A);
write_data(0x0A);
write_data(0x07);
write_data(0x28);
write_data(0x32);
write_data(0x2C);
write_data(0x49);
write_data(0x18);
write_data(0x13);
write_data(0x13);
write_data(0x2C);
write_data(0x33);


write_command(0x21); //����

write_command(0x2A); //Frame rate control
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0xEF);

write_command(0x2B); //Display function control
write_data(0x00);
write_data(0x00);
write_data(0x01);
write_data(0x3F);


write_command(0x29); //display on
write_command(0x2c);

  }

//*********************************************************************************************
void EnterSleep (void)
{
    write_command(0x28);
    delay(20);
    write_command(0x10);
  
  }

//*********************************************************
void ExitSleep (void)

 {
    write_command(0x11);
    delay(120);
    write_command(0x29);

   }


//*****************���ڵ�ַ************************************

void LCD_Window_Set(int x0,int y0,int x1,int y1)
{ 
  LCD_Cmd_wr(0x2a);
  LCD_para_wr(x0>>8);
  LCD_para_wr(x0);
  LCD_para_wr(x1>>8);
  LCD_para_wr(x1); 
  
  LCD_Cmd_wr(0x2b);
  LCD_para_wr(y0>>8);
  LCD_para_wr(y0);
  LCD_para_wr(y1>>8);
  LCD_para_wr(y1); 

  LCD_Cmd_wr(0x2c);
}