📄 uc1697vmtp.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 + -