/* QG-2864KSWLG01 */
/* CH1116 IIC  */

#include "io51.h"

void sh1106()
{
RES=1;  
   delay(1000);
   RES=0;   
   delay(1000);      
   RES=1;
   delay(1000);
write_i(0xAE);    /*display off*/       
       
       write_i(0x02);    /*set lower column address*/       
       write_i(0x10);    /*set higher column address*/
       
       write_i(0x40);    /*set display start line*/
       
       write_i(0xB0);    /*set page address*/
       
       write_i(0x81);    /*contract control*/
       write_i(0xff);    /*128*/
       
       write_i(0xA1);    /*set segment remap*/
      
       write_i(0xA6);    /*normal / reverse*/
       
       write_i(0xA8);    /*multiplex ratio*/
       write_i(0x3F);    /*duty = 1/64*/
       
       write_i(0xad);    /*set charge pump enable*/
       write_i(0x8b);     /*    0x8B    ÄÚ¹©VCC   */
       
        write_i(0x33);    /*0X30---0X33  set VPP   9V */
       
       write_i(0xC8);    /*Com scan direction*/
       
       write_i(0xD3);    /*set display offset*/
       write_i(0x00);   /*   0x20  */
       
       write_i(0xD5);    /*set osc division*/
       write_i(0x80);    
       
       write_i(0xD9);    /*set pre-charge period*/
       write_i(0x1f);    /*0x22*/
       
       write_i(0xDA);    /*set COM pins*/
       write_i(0x12);
       
       write_i(0xdb);    /*set vcomh*/
       write_i(0x40);           
       
       write_i(0xAF);    /*display ON*/
       
 }                
void write_w(unsigned char dat)
{
   unsigned char m,da;
   unsigned char j;
   da=dat;
   for(j=0;j<8;j++)
   {
     m=da;
     SCL=0;     
     m=m&0x80;
     if(m==0x80)
        {
      	  SDA=1;
        }
     else
        {
      	  SDA=0;
        }     
     da=da<<1;
     SCL=1;
    }
       
    SCL=0;
    SCL=1;
}
      
void write_i(unsigned char ins)
{
   start();
   write_w(0x78);
   write_w(0x00);
   write_w(ins);
   stop();
}

void write_d(unsigned char dat)
{
   start();
   write_w(0x78);
   write_w(0x40);
   write_w(dat);
   stop();
}          

 void  start()
{
  SCL=1;
  SDA=1;
  SDA=0;
  SCL=0;
}

void  stop()
{
  SCL=0;
  SDA=0;
  SDA=1;
  SCL=1;
}

void delay(unsigned int t)
{
     while(t>0)
       {
       	  t--;
       }
}
