#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int

sbit CS=P3^2;
sbit A0=P3^3;
sbit RDB=P3^4;
sbit WRB=P3^5;
sbit RES=P3^7;
sbit key=P3^0;

uchar code colorc[]={0xf8,0x00,0x07,0xe0,0x00,0x1f,0xff,0xe0,0x1f,0xff,0x00,0x00,0xff,0xff};

void delay20us()
{
   _nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();
}

void WriteCOM(unsigned char a)
{
    CS=0;
    A0=0;
    P1=a;
    WRB=0;
    delay20us();
    WRB=1;
    CS=1;
}

void WriteDAT(unsigned char b)
{
    CS=0;
    A0=1;
    P1=b;
    WRB=0;
    delay20us();
    WRB=1;
    CS=1;
}

void delayms(uint ms)
{
   uint i;
   for(;ms!=0;ms--)
   {for(i=200;i!=0;i--);}
}

main()
{
        uchar i,j,k=0;
	RES=1;
        delayms(100);
	RES=0;
	delayms(100);
	RES=1;
	delayms(120);

	WriteCOM(0x01);
	delayms(50);

	WriteCOM(0x11);//SLEEP OUT
	delayms(200);

	WriteCOM(0xFF);
	WriteDAT(0x40);
	WriteDAT(0x03);
	WriteDAT(0x1A);

	WriteCOM(0xd9);
	WriteDAT(0x60);
	WriteCOM(0xc7);
	WriteDAT(0x90);
	delayms(200);

	WriteCOM(0xB1);
	WriteDAT(0x04);
	WriteDAT(0x25);
	WriteDAT(0x18);

	WriteCOM(0xB2);
	WriteDAT(0x04);
	WriteDAT(0x25);
	WriteDAT(0x18);

	WriteCOM(0xB3);
	WriteDAT(0x04);
	WriteDAT(0x25);
	WriteDAT(0x18);
	WriteDAT(0x04);
	WriteDAT(0x25);
	WriteDAT(0x18);

	WriteCOM(0xB4);
	WriteDAT(0x03);

	WriteCOM(0xB6);
	WriteDAT(0x15);
	WriteDAT(0x02);

	WriteCOM(0xC0);// POWER CONTROL 1 GVDD&VCI1
	WriteDAT(0x02);
	WriteDAT(0x70);

	WriteCOM(0xC1);// POWER CONTROL 2 GVDD&VCI1
	WriteDAT(0x07);

	WriteCOM(0xC2);// POWER CONTROL 3 GVDD&VCI1
	WriteDAT(0x01);
	WriteDAT(0x01);

	WriteCOM(0xC3);// POWER CONTROL 4 GVDD&VCI1
	WriteDAT(0x02);
	WriteDAT(0x07);

	WriteCOM(0xC4);// POWER CONTROL 5 GVDD&VCI1
	WriteDAT(0x02);
	WriteDAT(0x04);

	WriteCOM(0xFC);// POWER CONTROL 6 GVDD&VCI1
	WriteDAT(0x11);
	WriteDAT(0x17);

	WriteCOM(0xC5);//VCOMH&VCOML
	WriteDAT(0x3c);
	WriteDAT(0x4f);

	WriteCOM(0x36);//MV,MX,MY,RGB
	WriteDAT(0xC8);


	WriteCOM(0x3a);//GAMMA SET BY REGISTER
	WriteDAT(0x05);

	//***********************GAMMA*************************
	WriteCOM(0xE0);
	WriteDAT(0x06);
	WriteDAT(0x0E);
	WriteDAT(0x05);
	WriteDAT(0x20);
	WriteDAT(0x27);
	WriteDAT(0x23);
	WriteDAT(0x1C);
	WriteDAT(0x21);
	WriteDAT(0x20);
	WriteDAT(0x1C);
	WriteDAT(0x26);
	WriteDAT(0x2F);
	WriteDAT(0x00);
	WriteDAT(0x03);
	WriteDAT(0x00);
	WriteDAT(0x24);

	WriteCOM(0xE1);
	WriteDAT(0x06);
	WriteDAT(0x10);
	WriteDAT(0x05);
	WriteDAT(0x21);
	WriteDAT(0x27);
	WriteDAT(0x22);
	WriteDAT(0x1C);
	WriteDAT(0x21);
	WriteDAT(0x1F);
	WriteDAT(0x1D);
	WriteDAT(0x27);
	WriteDAT(0x2F);
	WriteDAT(0x05);
	WriteDAT(0x03);
	WriteDAT(0x00);
	WriteDAT(0x3F);

	//***************************RAM ADDRESS*******************
	WriteCOM(0x2A);
	WriteDAT(0x00);
	WriteDAT(0x02);
	WriteDAT(0x00);
	WriteDAT(0x81);

	WriteCOM(0x2B);
	WriteDAT(0x00);
	WriteDAT(0x03);
	WriteDAT(0x00);
	WriteDAT(0x82);

	WriteCOM(0x29);
	delayms(100);

	WriteCOM(0x2C); //³õÊ¼»¯½áÊø
    
  while(1)
  {
   for (i=0;i<128;i++)
    {
    for (j=0;j<128;j++)
       {
           WriteDAT(colorc[k]);
	   WriteDAT(colorc[k+1]);  //display green
        }
     }
     delayms(2000);
     k+=2;
     if(k>14)
       k=0;
  }

}





