⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uc1697vmtp.c

📁 ultrachip uc1698 test programe with MTP
💻 C
字号:
//UC1698u---128*160 2007-12-12
#include "reg51.h"
#include "uc1697.h"

sbit CS0 = P3^0;
sbit RST = P3^5;
sbit CD  = P3^6;	
sbit WR0 = P3^7;	
sbit WR1 = P3^4;

sbit K2=P0^1;
sbit K3=P3^3;
sbit K1=P3^2;
sbit K4=P0^0;
 
   unsigned char pm=0x70;/*vop,PM值*/
   unsigned char pmm=0x00;/*vop加减后的临界值*/
   unsigned char dv0=0x00;/*VOP增减基数*/
   unsigned char dv=0x40;/*MTP阶数*/
   unsigned char pm0=0x00;/*vop偏移量的值*/
   unsigned char pm01=0x00;/*一位一位写入寄存器*/

void init(void);
void display_black(void);
void display_white(void);
void writei(unsigned char d);
void writed(unsigned char d);
void horizontal();
void vertical();
void frame();
void snow();
void delay(long tt);
void display_rgb(unsigned char a,unsigned char b);
void display_colorbar();
void display_pic();
void windowprogram(void);
void vopup(void);
void vopdown(void);
void otp_erase(void);
void otp_operation(void);
void otp_program(void);
void count(void);
unsigned char kscan();
void redgray();
unsigned char readcmd(void);

void main(void)
{
unsigned char key=0;

RST=0;
delay(200);
RST=1;
delay(20000);
init();
display_pic();

delay(20000);


readcmd();

delay(20000);

while(1)
   {
      	key= key+kscan();
      	if(key>6) key=1;
      	switch(key)
       	{
      		case 1:{display_rgb(0xf8,0x00);}break;//r
      		case 2:{display_rgb(0x07,0xe0);}break;//g
      		case 3:{display_rgb(0x00,0x1f);}break;//b
      		case 4:{display_colorbar() ;} break;
     		case 5:{display_pic();      } break;
     		case 6:{redgray();          } break;
       		default:break;

        }
    }
    
}

void redgray()
{
	int i,j;
    unsigned char red;
    for(red=0x08;red<=0xf8;red=red+0x10)
	{
	for(i=0;i<16;i++)
	  {
	for(j=0;j<80;j++)
	    {
		writed(red);writed(0x00);
	    }
	  }	
	  if(red==0xf8)
	  break;
}
}


unsigned char kscan()
{
	//unsigned char i=80;
	while(1)
	{
		if(K1==0|K2==0|K3==0|K4==0)
		{
			if(K1==0)
			{
				delay(10);
				if(K1==1)
				{
					delay(10);
                    
					return(1);
				}
			}
			if(K2==0)
			{
				delay(10);

				if(K2==1)
				{
	              delay(100);
	              otp_erase();   /*一定要erase before programme*/
	              delay(100);
				  vopup();
				  delay(100);	
				}
			}
			if(K3==0)
			{
				delay(10);
				if(K3==1)
				{
				delay(100);
				otp_erase();   /*一定要erase before programme*/
				delay(100);
				vopdown();
			    delay(100);
				}
			}
			if(K4==0)
		   {
			 delay(10);	
			 if(K4==1)
			{
				delay(100);
				otp_operation();
			
			}
		   }
		   
		}
	}
}

void init(void)
{

  //  writei(0xb8);
//   writei(0x00);

//&&&&&&&&& Display Setting &&&&&&&&&********


    writei(0xe2);   //system reset
    delay(100);


    writei(0x2f);   //set power control

	writei(0x24);

    writei(0x2b);

	//writei(0xeb);  //SET lcd bias 1/12  writei(0xea);

	//writei(0x81);   //set Vbias potentiometer
	//writei(0x66);   //0~255   writei(0x70);

	writei(0xea);

	writei(0x81);   //set Vbias potentiometer
	writei(0x70);
//	writei(0x76);   //0~255   writei(0x76);
//	writei(0xc2);
//  writei(0x8b);   //set ram address contrast  89

    writei(0xa3);

	writei(0xc8);   //set N-LINE inversion
    writei(0x18);

    writei(0xc0);

	writei(0xd1);   //SET color pattern
    writei(0xd6);  //SET color mode --65k color


	writei(0xde);
    writei(0xaf);   //set display enable

}


void windowprogram(void)
{

      writei(0x70);
      writei(0x60);
	  writei(0x10);
	  writei(0x00);

      writei(0xF4);//set colum address start
      writei(0x00);

      writei(0xF6);
      writei(0x7f);//set colum address end

      writei(0xF5);//set row address start
      writei(0x00);

      writei(0xF7);//set row address end
      writei(0x9f);
      writei(0xF8);//set window outside mode enable

}


unsigned char readcmd(void)
{  
unsigned char status1,status2,status3;

CS0=0;
WR0=1;
P1=0xff; 
CD=0;

WR1=0;
status1=P1;
WR1=1;
P1=status1;

CS0=0;
WR0=1;
P1=0xff; 
CD=0;

WR1=0;
status2=P1;
WR1=1;
P1=status2;

CS0=0;
WR0=1;
P1=0xff;
CD=0;

WR1=0;
status3=P1;
WR1=1;
P1=status3;

CS0=1;
return(status2);
}

void display_pic()
{
   int i,j,k=0;	
   windowprogram();
   for(i=0;i<128;i++)
	{
	 for(j=0;j<320;j++)
	   {writed(pic[k++]);}
		
	}
}


void display_colorbar()
{
	int i,j;

	for(i=0;i<16;i++)//r
	{
	for(j=0;j<160;j++)
	{writed(0xf8);writed(0x00);}
	}

	for(i=0;i<16;i++)//rg
	{
	for(j=0;j<160;j++)
	{writed(0xff);writed(0xe0);}
	}

	for(i=0;i<16;i++)//g
	{
	for(j=0;j<160;j++)
	{writed(0x07);writed(0xe0);}
	}

	for(i=0;i<16;i++)//gb
	{
	for(j=0;j<160;j++)
	{writed(0x07);writed(0xff);}
	}

	for(i=0;i<16;i++)//b
	{
	for(j=0;j<160;j++)
	{writed(0x00);writed(0x1f);}
	}

	for(i=0;i<16;i++)//rb
	{
	for(j=0;j<160;j++)
	{writed(0xf8);writed(0x1f);}
	}

	for(i=0;i<16;i++)//white
	{
	for(j=0;j<160;j++)
	{writed(0xff);writed(0xff);}
	}

	for(i=0;i<16;i++)//black
	{
	for(j=0;j<160;j++)
	{writed(0x00);writed(0x00);}
	}	
}
void display_rgb(unsigned char a,unsigned char b)
{

	int i,j;
	for(i=0;i<128;i++)
     {
		for(j=0;j<160;j++)
		{writed(a); writed(b);}	
     }
}
void snow()
{
	  int i;
      int j;
     for(i=0;i<64;i++)
     {
		for(j=0;j<160;j++)
		{
		writed(0xff);
		writed(0xff);
		writed(0x00); 
		writed(0x00);

		} 
		for(j=0;j<160;j++)
		{
		writed(0x00);
		writed(0x00);
		writed(0xff); 
		writed(0xff);

		} 
		
     }
}
void horizontal()
{  
  int i;
  int j;
  for(i=0;i<64;i++)
     {
		for(j=0;j<320;j++)
		{writed(0xff); }
        for(j=0;j<320;j++)
        {writed(0x00);}
		
     }
  

}
void vertical()
{
	  int i;
      int j;
     for(i=0;i<128;i++)
     {
		for(j=0;j<160;j++)
		{
		writed(0xff);
		writed(0xff); 
		writed(0x00); 
		writed(0x00);  
		}
     }
}
	 
void display_black(void)
{
  int i;
  int j;
  for(i=0;i<128;i++)
     {
		for(j=0;j<320;j++)
		{
		writed(0xff); 
		}
     }
  

}

void display_white(void)
{
  int i;
  int j;
 for(i=0;i<128;i++)
     {
		for(j=0;j<320;j++)
		{
		writed(0x00); 
		}
	 }
}


void writei(unsigned char d)
{
        CS0=0;
		CD=0;
 		WR1=1;	
        
	    P1=d;
	    WR0=0; 
		WR0=1;    
        CS0=1;   
}

void writed(unsigned char d)
{
        CS0=0;
		CD=1;
	    WR1=1;	  
	       
	    P1=d;
	    WR0=0;  
	    WR0=1;    
        CS0=1;   
}

void delay(long tt)
{
while(tt>0)
    {tt--;}

}


void vopup(void)
{
   unsigned char i=0xb0; 
   dv++;
   dv0++;
   pmm=pm+dv0;
   delay(200);
   writei(0x81); 
   writei(pmm);
   delay(200);

   if(pmm<i)  
    count();
    else
    pm0=0x00;
    delay(1000);
}

void vopdown(void)
{  
   unsigned char i=0x30;
   dv--;
   dv0--;
   pmm=pm+dv0;
   delay(200);
   writei(0x81);
   writei(pmm);

   delay(200);

   if(pmm>i)   
     count();
     else
     pm0=0x00;
     delay(1000);
}

void count(void)
{ 
   if(dv>0x40)
   pm0=dv-0x40;
   else
   pm0=(0x40-dv)|0x40;

}

void otp_operation(void)
{
  RST=0;
  delay(5000);
  RST=1;
  delay(5000);
  otp_erase();   /*erase before programme*/
  delay(50000);

  pm01=pm0&0x01;
  otp_program();
  delay(1000);

  pm01=pm0&0x02;
  otp_program();
  delay(1000);

  pm01=pm0&0x04;
  otp_program();
  delay(1000);

  pm01=pm0&0x08;
  otp_program();
  delay(1000);

  pm01=pm0&0x10;
  otp_program();
  delay(1000);

  pm01=pm0&0x20;
  otp_program();
  delay(2000);

  
  pm01=pm0&0x40;
  otp_program();
  delay(1000);

  delay(2000);

     RST=0;
     delay(5000);
     RST=1;
     delay(20000);/*要大于150ms,才能读到OTP的值*/
     init();

     while(1)
      {display_pic();}
}

void otp_erase(void)
{
    writei(0xa3);
    writei(0xf4);
    writei(0x00);
    writei(0xf5);
    
    writei(0x00);

    writei(0xf6);
    writei(0x50);

    writei(0xf7);
    writei(0x08);

    writei(0xb9);
   
    writei(0x7f);

    writei(0x00);
    writei(0xb8);
    writei(0x0a);
    delay(5000);
}

void otp_program(void)
{
    RST=0;//一定要RST
    delay(2000);
    RST=1;
    delay(2000);

    writei(0xa3);

    writei(0xf4);
    writei(0x00);

    writei(0xf5);
    
	writei(0x00);


    writei(0xf6);
    writei(0x50);

    writei(0xf7);
    writei(0x08);
    writei(0xb9);
    writei(pm01);
    writei(0x00);

    delay(3000);//加DELAY

    writei(0xb8);
    writei(0x0b);
    delay(8000);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -