#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "reg51.h"  
#define mydata (( unsigned char xdata *)0x0076)  //記憶體起始位
sbit RES=P3^0;
sbit RD0=P3^1;
sbit INT00=P3^2;
sbit INT10=P3^3;
sbit DC=P3^4;
sbit CS=P3^5;
sbit WR0=P3^6;
sbit SCLK=P1^0;				
sbit SDIN=P1^1;
int jj;


//----------------------------------8X8字型 start----------------------------------------
unsigned char code CODE0[]={0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00};
unsigned char code CODE1[]={0x00,0x38,0x10,0x10,0x10,0x30,0x10,0x00}; 
unsigned char code CODE2[]={0x00,0x7C,0x20,0x10,0x08,0x44,0x38,0x00}; 
unsigned char code CODE3[]={0x00,0x38,0x48,0x08,0x10,0x48,0x38,0x00}; 
unsigned char code CODE4[]={0x00,0x04,0x7E,0x24,0x14,0x0C,0x04,0x00}; 
unsigned char code CODE5[]={0x00,0x3C,0x02,0x02,0x3C,0x20,0x1E,0x00}; 
unsigned char code CODE6[]={0x00,0x1C,0x22,0x22,0x3C,0x20,0x1C,0x00}; 
unsigned char code CODE7[]={0x00,0x10,0x10,0x08,0x04,0x24,0x3C,0x00}; 
unsigned char code CODE8[]={0x00,0x38,0x44,0x38,0x38,0x44,0x38,0x00}; 
unsigned char code CODE9[]={0x00,0x10,0x08,0x3C,0x44,0x44,0x38,0x00}; 
 
unsigned char code CODEA[]={0x00,0x24,0x24,0x3C,0x24,0x18,0x18,0x00}; 
unsigned char code CODEB[]={0x00,0x3C,0x24,0x24,0x38,0x24,0x38,0x00}; 
unsigned char code CODEC[]={0x00,0x3C,0x40,0x40,0x40,0x40,0x3C,0x00}; 
unsigned char code CODED[]={0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x00}; 
unsigned char code CODEE[]={0x00,0x3C,0x20,0x20,0x38,0x20,0x3C,0x00}; 
unsigned char code CODEF[]={0x00,0x20,0x28,0x38,0x28,0x20,0x3C,0x00}; 
unsigned char code CODEG[]={0x00,0x38,0x4C,0x5C,0x40,0x44,0x3C,0x00}; 
unsigned char code CODEH[]={0x00,0x24,0x24,0x24,0x3C,0x24,0x24,0x00}; 
unsigned char code CODEI[]={0x00,0x38,0x10,0x10,0x10,0x10,0x38,0x00};
unsigned char code CODEJ[]={0x00,0x18,0x28,0x08,0x08,0x08,0x38,0x00};
unsigned char code CODEK[]={0x00,0x24,0x28,0x30,0x30,0x28,0x24,0x00};
unsigned char code CODEL[]={0x00,0x3E,0x20,0x20,0x20,0x20,0x20,0x00};
unsigned char code CODEM[]={0x00,0x42,0x42,0x42,0x5A,0x66,0x42,0x00};
unsigned char code CODEN[]={0x00,0x42,0x46,0x4A,0x52,0x62,0x42,0x00};
unsigned char code CODEO[]={0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00};
unsigned char code CODEP[]={0x00,0x20,0x20,0x38,0x24,0x24,0x38,0x00};
unsigned char code CODEQ[]={0x00,0x3C,0x5C,0x44,0x44,0x44,0x38,0x00};
unsigned char code CODER[]={0x00,0x24,0x28,0x30,0x2C,0x24,0x3C,0x00};
unsigned char code CODES[]={0x00,0x1C,0x24,0x08,0x10,0x24,0x38,0x00};
unsigned char code CODET[]={0x00,0x10,0x10,0x10,0x10,0x10,0x7C,0x00};
unsigned char code CODEU[]={0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x00};
unsigned char code CODEV[]={0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x00};
unsigned char code CODEW[]={0x00,0x42,0x66,0x5A,0x42,0x42,0x42,0x00};
unsigned char code CODEX[]={0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00};
unsigned char code CODEY[]={0x00,0x10,0x10,0x10,0x10,0x28,0x44,0x00};
unsigned char code CODEZ[]={0x00,0x7E,0x20,0x10,0x08,0x04,0x7E,0x00};

unsigned char code CODEEM[]={0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00};
unsigned char code CODEDC[]={0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00};
unsigned char code CODEDOT[]={0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00};
//----------------------------------8X8字型 end-----------------------------------------------


void clear(void);


void delay(unsigned int a)
{
while(a!=0)
  a--;
}

//-------------------------(SPI LOW------------------------------------------
void SPI_LOW(void)
{
SCLK=0;
SDIN=0;
SCLK=1;
}
//-------------------------SPI LOW)------------------------------------------
//-------------------------(SPI HIGH------------------------------------------
void SPI_HIGH(void)
{
SCLK=0;
SDIN=1;
SCLK=1;
}
//-------------------------SPI HIGH)------------------------------------------------
//-------------------------(SPI SERIAL Sned-----------------------------------------
void SPI_SERIAL(unsigned char a)
{
  if (((a&0x80)>>7) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x40)>>6) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x20)>>5) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x10)>>4) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x08)>>3) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x04)>>2) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if (((a&0x02)>>1) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}

  if ((a&0x01) == 1)
  {SPI_HIGH();}
  else
  {SPI_LOW();}
}
//-------------------------SPI SERIAL Sned)-----------------------------------------
void data_out(char a)
{
CS=0;
DC=1;
SPI_SERIAL(a);
DC=0;
DC=1;
CS=1;

}
//-------------------------------------------------------------------------------------
void comm_out(char a)
{
CS=0;
DC=0;
SPI_SERIAL(a);

DC=1;
CS=1;
}
//-------------------------------------------------------------------------------------
void init_oledSSD1327(void)
{
CS=0;
RES=1;
comm_out(0xae);//Display OFF
comm_out(0x81);//Set Contrast Control
comm_out(0xac);//VCC=16.5V

comm_out(0xa0);//Set Re-map
comm_out(0x42);//53//42

comm_out(0xa1);//Set Display Start Line
comm_out(0x00);

comm_out(0xa2);//Set Display Offset
comm_out(0x00);

comm_out(0xa4);//Normal Display

comm_out(0xa8);//Set MUX Ratio
comm_out(0x3f);

comm_out(0xab);//Function Selection A
comm_out(0x01);//Enable internal VDD regulator

comm_out(0xad);//External Internal IREF Selection
comm_out(0x9e);

comm_out(0xb1);//Set Phase Length
comm_out(0x11);

comm_out(0xb3);//Set Front Clock Divider/Oscillator Frequency
comm_out(0x90);//0XF0=127HZ   0XF1=63  0XA0=108  0X90= 104

comm_out(0xb9);//Linear LUT

comm_out(0xbc);//Set Pre-charge voltage
comm_out(0x04);

comm_out(0xbe);//Set VCOMH
comm_out(0x07);

clear( );// clear the whole DDRAM.
comm_out(0xaf);//Display on
//-------------------------------------------------






}

//----------------計時器0 setting start----------------------------------------------------
void delay_Time(unsigned int i)
{
TR0=1;
TL0=(256-240);   //120us 
TH0=(256-240);   //24M Hz (quartz)
while(i!=0){
    while(TF0!=1);
    TF0=0;
    i--;
    }
TR0=0;
}
void delay_second(unsigned char i)
{
while(i!=0){
  delay_Time(10);
  i--;
  }
}
void ads_xy(int x_s, int x_e, int y_s, int y_e)
{

  comm_out(0x15);
  comm_out(x_s);
  comm_out(x_e);		//COL max : 127(3f)
  comm_out(0x75);
  comm_out(y_s);
  comm_out(y_e);		//ROW max : 80(4f)
}
//-----------------WORD START-----------------
void OQC_WORD(void)
{
void word_out(char *);
 ads_xy(42,45,90,97);
 word_out(CODEO);
 ads_xy(46,49,90,97);
 word_out(CODEQ);
 ads_xy(50,53,90,97);
 word_out(CODEC);
}

void LOI_WORD(void)
{
void word_out(char *);
 ads_xy(42,45,90,97);
 word_out(CODEL);
 ads_xy(46,49,90,97);
 word_out(CODEO);
 ads_xy(50,53,90,97);
 word_out(CODEI);
}

void AGING_WORD(void)
{
void word_out(char *);

 ads_xy(46,49,90,97);
 word_out(CODEA);
 ads_xy(50,53,90,97);
 word_out(CODEG);
}

void REL_WORD(void)
{
void word_out(char *);
 ads_xy(42,45,90,97);
 word_out(CODER);
 ads_xy(46,49,90,97);
 word_out(CODEEM);
 ads_xy(50,53,90,97);
 word_out(CODET);
}
void VOLTAGE_WORD(void)
{
void word_out(char *);
 ads_xy(10,13,63,70);
 word_out(CODE1);
 ads_xy(14,17,63,70);
 word_out(CODE5);
 ads_xy(18,21,63,70);
 word_out(CODEV);
}

void VERSION_WORD(void)
{
void word_out(char *);
 ads_xy(42,45,63,70);
 word_out(CODER);
 ads_xy(46,49,63,70);
 word_out(CODE0);
 ads_xy(50,53,63,70);
 word_out(CODE2);
}
void VERSION_WORD_AG(void)
{
void word_out(char *);
 ads_xy(10,13,63,70);
 word_out(CODER);
 ads_xy(14,17,63,70);
 word_out(CODE0);
 ads_xy(18,21,63,70);
 word_out(CODE2);
}

void WORD(void)
{
void word_out(char *);

 ads_xy(10,13,90,97);
 word_out(CODEP);
 ads_xy(14,17,90,97);
 word_out(CODE2);
 ads_xy(18,21,90,97);
 word_out(CODE4);
 ads_xy(22,25,90,97);
 word_out(CODE2);
 ads_xy(26,29,90,97);
 word_out(CODE0);
 ads_xy(30,33,90,97);
 word_out(CODE1);

}






void DATE_WORD(void)
{
void word_out(char *);

 ads_xy(10,13,31,38);
 word_out(CODE2);

 ads_xy(14,17,31,38);
 word_out(CODE0);

 ads_xy(18,21,31,38);
 word_out(CODE1);
 ads_xy(22,25,31,38);
 word_out(CODE0);
 ads_xy(26,29,31,38);
 word_out(CODEEM);
 ads_xy(30,33,31,38);
 word_out(CODE0);
 ads_xy(34,37,31,38);
 word_out(CODE7);
 ads_xy(38,41,31,38);
 word_out(CODEEM);
 ads_xy(42,45,31,38);
 word_out(CODE3);
 ads_xy(46,49,31,38);
 word_out(CODE0);
 
 
}
//-----------------WORD END -------------------
// FRAME 
void frame(void)
{
int i;	
 ads_xy(0x00,0x00,0x00,0x3f);
 for (i=0;i<64;i++)
 {
  data_out(0xf0);
 }
 ads_xy(0x7f,0x7f,0x00,0x3f);
 for (i=0;i<64;i++)
 {
  data_out(0x0f);
 }
 
  ads_xy(0x00,0x7f,0x00,0x00);
 for (i=0;i<128;i++)
 {data_out(0xff);}

 ads_xy(0x00,0x7f,0x3f,0x3f);
 for (i=0;i<128;i++)
 {data_out(0xff);}

}
void ads()
{
  comm_out(0x15);//set column address
  comm_out(0x00);//Column Start Address
  comm_out(0x7f);//Column End Address
  comm_out(0x75);//set row address
  comm_out(0x00);//Row Start Address
  comm_out(0x3f);//Row End Address
}
//  清除畫面
void clear(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<64;i++)
{
for(j=0;j<128;j++)
{
data_out(0x00);
}
}

}
// 全點亮
void All_on(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<64;i++)
{
for(j=0;j<128;j++)
{
data_out(0xff);
}
}

}


// 全點亮
void All_on_s(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x01);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<64;i++)
{
for(j=0;j<127;j++)
{
data_out(0xff);
}
}

}



void gray(void)
{
int i,j,k,y=0x00;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(k=0;k<16;k++)
{
for(i=0;i<4;i++)
	{
	
	for(j=0;j<128;j++)
		{
		data_out(y);
		}
	
	}
y=y+0x11;
}

}

void checkerboard1(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<32;i++)
{
for(j=0;j<128;j++)
{
data_out(0xf0);
}

for(j=0;j<128;j++)
{
data_out(0x0f);
}

}

}



void checkerboard2(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<32;i++)
{
for(j=0;j<128;j++)
{
data_out(0x0f);
}

for(j=0;j<128;j++)
{
data_out(0xf0);
}

}

}


void checkerboard22(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<16;i++)
{
for(j=0;j<64;j++)
{
data_out(0xff);
data_out(0x00);
}
for(j=0;j<64;j++)
{
data_out(0xff);
data_out(0x00);
}

for(j=0;j<64;j++)
{
data_out(0x00);
data_out(0xff);
}
for(j=0;j<64;j++)
{
data_out(0x00);
data_out(0xff);
}

}

}


void line1100(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<64;i++)
{
for(j=0;j<64;j++)
{
data_out(0xff);
data_out(0x00);
}
}

}


void line0011(void)
{
int i,j;
comm_out(0x15);//Set column address
comm_out(0x00);//Column Start Address
comm_out(0x7f);//Column End Address
comm_out(0x75);//Set row address
comm_out(0x00);//Row Start Address
comm_out(0x3f);//Row End Address
for(i=0;i<64;i++)
{
for(j=0;j<64;j++)
{
data_out(0x00);
data_out(0xff);
}
}

}


void checkerboard3(void)
{
int i,j,k;

  comm_out(0x15);//set column address
  comm_out(0x00);//Column Start Address
  comm_out(0x3f);//Column End Address
  comm_out(0x75);//set row address
  comm_out(0x00);//Row Start Address
  comm_out(0x7F);//Row End Address

for(i=0;i<4;i++)
 {
  for(j=0;j<64;j++)
  {
   data_out(0x0f);
    }
	for(k=0;k<64;k++)
	{
	data_out(0xf0);
	  }
  }
}

void scroll_down()
{
int i;
while(1)
{
jj=0;
for(i=0;i<128;i++)
 {
  comm_out(0xa1);
  comm_out(i);
   delay(6000);
	 if (INT00==0) {jj=1;break;}		  
 }
     if (jj==1) {break;}	
}
init_oledSSD1327();
}


void lineff(void)
{
int i,j;
ads();
for(i=0;i<128;i++)
 {
  
  for(j=0;j<64;j++)
  { 
  data_out(0xf0);
  data_out(0xf0); 
  }
 }
}

void line00(void)
{
int i,j;
ads();
for(i=0;i<128;i++)
 {
  
  for(j=0;j<64;j++)
  { 
  data_out(0x0f);
  data_out(0x0f); 
  }
 }
}


void word_out(char a[])
{
int i,j;
unsigned char word;
 for(i=0;i<8;i++)
 {
 	for(j=0;j<4;j++)
	{
	word=(((a[i])<<(j*2))&0xc0);
	if(word == 0xc0){data_out(0xff);}
		else if (word == 0x80){ data_out(0xf0);}
			else if (word == 0x40){data_out(0x0f);}
				else{data_out(0x00);}
	}
 }
}


void swctrl(void)
{
	while(1)
	  {
	  	if (INT00==0) break;
      }
delay_second(10);
	clear();
}

void swctrlnc(void)
{
	while(1)
	  {
	  	if (INT00==0) break;
      }
delay_second(10);
//	clear();
}

//---------------------------------------------------------------

void pitcure(unsigned int ptr_address,unsigned char address_page)
{
	unsigned char i,j,reg1,reg2;
	unsigned char xdata *ptr;
	ads();
	ptr=ptr_address;
	RD0=1;P1=address_page;RD0=0;
	for(i=0;i<64;i++)
	{
		for(j=0;j<128;j++)			//融合2像素至同byte
		{
			reg1=*ptr&0xf0;			//if(*ptr>0xf0){if(*ptr<0xff){k=0xe0;}}
			if(ptr==0xffff){address_page++;/*RD0=1;P1=address_page;RD0=0;*/}ptr++;
			reg2=(*ptr>>4)|reg1;			//if(*ptr>0xf0){if(*ptr<0xff){l=0x0e;}}
			data_out(reg2);
			if(ptr==0xffff){address_page++;/*RD0=1;P1=address_page;RD0=0;*/}ptr++;
		}
	}
}





void OQC (void)
{
int i,x,k=0x2000;
unsigned char xdata *j;
j=mydata;
 

comm_out(0x81);//Set Contrast Control
comm_out(0xac);//VCC=16.5V

pitcure(0x0436+0x1000*0,0); //--------------- 1 全亮
//delay_second(80);
swctrl();
//pitcure(0x0436+0x1000*0,0); //--------------- 1 全亮

All_on_s();//少一根
comm_out(0x81);//Set Contrast Control
comm_out(0xff);//VCC=16.5V
comm_out(0x8e);//Set 
comm_out(0x02);

swctrl();//--------------- 2. Futaba黑

comm_out(0x81);//Set Contrast Control
comm_out(0xac);//VCC=16.5V
comm_out(0x8e);//Set
comm_out(0x00);

pitcure(0x0436+0x1000*0,1); //--------------- 3 1X1棋盤
//delay_second(80);
swctrl();


pitcure(0x0436+0x1000*0,2); //--------------- 4. 2X2棋盤
//delay_second(80);
swctrl();



pitcure(0x0436+0x1000*0,3); //--------------- 5.版本宣告
//delay_second(80);
swctrl();

comm_out(0x81);//Set Contrast Control
comm_out(0xff);//VCC=16.5V
pitcure(0x0436+0x1000*0,4); //--------------- 6.斜線滾動
delay_second(10);
//swctrl();
scroll_down();


}

void t16(void)
	{
	comm_out(0x81); //set contrast
	comm_out(0xac); //second byte
	
	All_on();
	swctrl();
	
	pitcure(0x0436+0x1000*0,1); //--------------- 50%
	//delay_second(80);
	swctrl();
	
	pitcure(0x0436+0x1000*0,2); //--------------- 20%
	//delay_second(80);
	swctrl();
	
	
	
	clear( );// clear the whole DDRAM.
	swctrl();
	
	All_on();
	comm_out(0xae);//Display OFF
	swctrl();
	comm_out(0xaf);//Display ON
	
	
	
	comm_out(0x81); //set contrast
	comm_out(0x2f); //second byte
	pitcure(0x0436+0x1000*0,3); //--------------- 20%
	//delay_second(80);
	swctrl();



/*

  comm_out(0x81); //set contrast
  comm_out(0x00); //second byte
  All_on();
comm_out(0xaf);//Display on
  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x0F); //second byte
  clear();
  All_on();
  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x1F); //second byte
  clear();
  All_on();
  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);


  comm_out(0x81); //set contrast
  comm_out(0x2f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x3f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x4f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x5f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);


  comm_out(0x81); //set contrast
  comm_out(0x6f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x7f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);



  comm_out(0x81); //set contrast
  comm_out(0x8f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0x9f); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0xaf); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);


  comm_out(0x81); //set contrast
  comm_out(0xbf); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0xcf); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0xdf); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);

  comm_out(0x81); //set contrast
  comm_out(0xef); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);


  comm_out(0x81); //set contrast
  comm_out(0xff); //second byte
  clear();
  All_on();

  while(INT00==0);
  delay_second(2);
  while(INT00==1);
  delay_second(2);
clear();
*/
}


void LOI (void)
{


All_on();
delay_second(80);		// 6 sec
checkerboard1();
delay_second(40);		// 3.5 sec
clear();
RES=0;
delay(100);
RES=1;
init_oledSSD1327();
frame();
LOI_WORD();
VOLTAGE_WORD();
VERSION_WORD();
DATE_WORD();
delay_second(20);		// 1.5 sec 
}

void AGING(void)
{
/////*********************************************
RES=0;
delay(100);
RES=1;
init_oledSSD1327();

All_on();
delay_second(40);		// 1.5 sec 
clear( );// clear the whole DDRAM.
checkerboard1();
delay_second(40);		// 1.5 sec 
clear( );// clear the whole DDRAM.
frame();
AGING_WORD();
VERSION_WORD_AG();
DATE_WORD();
delay_second(40);		// 1.5 sec 

All_on();
delay_second(40);		// 1.5 sec 

checkerboard1();
delay_second(40);		// 1.5 sec 
clear( );// clear the whole DDRAM.
frame();
AGING_WORD();
VERSION_WORD_AG();
DATE_WORD();
delay_second(40);		// 1.5 sec 

All_on();
swctrl();
//*******************************************************
RES=0;
delay(100);
RES=1;

init_oledSSD1327();

frame();
AGING_WORD();
VERSION_WORD_AG();
DATE_WORD();
delay_second(20);		// 1.5 sec 
All_on();
swctrl();
while(1)
{

checkerboard3();

//delay_second(15);		// 0.5 sec 

scroll_down();
	while(1)
	  {
	  	if (INT00==0) break;
      }

 }
}

void RELIABILITY(void)
{
pitcure(0x0436+0x1000*0,0);//------------------------------------ 6
delay_second(40);		// 1 sec 
All_on();
swctrl();
while(1)
{
All_on();
delay_second(20);		// 1 sec 
  comm_out(0x8e); //set contrast
  comm_out(0x02); //second byte

delay_second(20);		// 1 sec 	
line00();
  comm_out(0x8e); //set contrast
  comm_out(0x00); //second byte
delay_second(20);		// 1 sec 
lineff();
delay_second(20);		// 1 sec  
checkerboard1();
delay_second(20);		// 1 sec  
checkerboard2();
delay_second(20);		// 1 sec 
}

}



void pic_out(unsigned char xdata *ptr)	
{
int i,j;
ads();

  for(i=0;i<64;i++)
  {
	for(j=0;j<128;j++)
  	{
 
    data_out(*ptr);
    ptr++;
 // ptr=ptr+1;
  	}
  }
}







//-----------------------------------------------------------------
void demo_kit(void)
{
int i,x,k=0x2000;
unsigned char xdata *j;
j=mydata;

All_on(); //---------------  全亮畫面，方便op判斷
clear();
swctrlnc();//--------------------------------------------------------------NO 1
All_on();  //--------------- 全亮畫面，方便op判斷
comm_out(0xae);//Display off

swctrlnc();//-----------------------------------------------------------------NO 2
comm_out(0xaf);//Display on
//comm_out(0x81);//Set Contrast Control
//comm_out(0x01);//VCC=12V
//pitcure(0x0436+0x1000*0,0); //---------------------------------------------- NO3
//delay_second(80);
//swctrlnc();

while(1)
{
comm_out(0x81);//Set Contrast Control
comm_out(0x87);//VCC=12V
//pitcure(0x0436+0x1000*0,0); //--------------- NO4 全亮畫面
swctrlnc();

comm_out(0x81);//Set Contrast Control
comm_out(0xff);//VCC=12V
comm_out(0x8e);//Set 
comm_out(0x02);


swctrl();//--------------- NO 5 Futaba黑

comm_out(0x81);//Set Contrast Control
comm_out(0x87);//VCC=12V
comm_out(0x8e);//Set
comm_out(0x00);

pitcure(0x0436+0x1000*0,0); //--------------- NO 6 (棋盤與宣告
//delay_second(80);
swctrl();

comm_out(0x81);//Set Contrast Control
comm_out(0xff);//VCC=12V
pitcure(0x0436+0x1000*0,2); //--------------- NO 7 斜線滾動
//delay_second(80);
scroll_down();

gray();//--------------- NO 8 灰階
swctrl();

pitcure(0x0436+0x1000*0,3); //--------------- NO 9 50%點亮
swctrlnc();
All_on();
}

}





void main(void)
{
RES=0;
delay(100);
RES=1;
init_oledSSD1327();
while(1)
{
//demo_kit();




//t16();
OQC();
//LOI();
//AGING();
//RELIABILITY();
//show_pic();

}
}