?? lds191.c
字號:
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#include"128x160map.h"
#define nop _nop_()
#define uchar unsigned char
#define uint unsigned int
//#define ID2_Sign 0x7f//0X00~0X7F
//#define ID3S_Sign 0x03//0x00~0x03
#define ID2_Sign 0x20//is b226(1650) use
#define ID3S_Sign 0x01//is b226(1650) use
sbit RS =P3^0;
sbit W_R=P3^1;
sbit R_D=P3^2;
sbit CS1B=P3^3;
sbit RSTB=P3^4;
sbit LED=P3^7;
sbit MTP_VOP=P1^5;
sbit key_mtp=P1^6;
sbit key_add=P1^7;
sbit key_sub=P1^3;
uchar electron;
uchar temp_add,temp_sub;
/////////////////////////////////////
void delay_11us(void)
{
uchar i=1;
nop;
nop;
nop;
do
{
i--;
}while(i);
}
///////////////////////////
void delay_ms(uchar j)
{
uchar i;
while(j)
{
for(i=0;i<78;i++)
delay_11us();
j--;
}
}
////////////////////////////////////
uchar ReadData(void)
{
uchar i;
P0=0XFF;
RS=1;//read data
CS1B=0;
W_R=1;
R_D=0;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
i=P0&0xff;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
R_D=1;
CS1B=1;
return i;
}
/////////////////////////////////
void WriteCommand(uchar Data)
{
RS=0;//Write Commsnd
CS1B=0;
W_R=0;
P0=Data;
nop;
W_R=1;
CS1B=1;
}
//////////////////////////////////
void WriteData(uchar Data)
{
CS1B=0;
RS=1;//Write data
W_R=0;
P0=Data;
nop;
W_R=1;
CS1B=1;
}
/////////////////////////////////////
void set_whole_screen()
{
WriteCommand(0x2a); //column address set
WriteData(0x00); //upper 8bit start address
WriteData(0x02); //lower 8bit start address
WriteData(0x00); //upper 8bit end address
WriteData(129); //lower 8bit end address
WriteCommand(0x2b); //row address set
WriteData(0x00); //upper 8bit start address
WriteData(0x01); //lower 8bit start address
WriteData(0x00); //upper 8bit end address
WriteData(160); //lower 8bit end address
WriteCommand(0x2c);
}
/*
void rgb1()
{
unsigned int i,j,k=0;
unsigned int color;
uchar code gray[7]={2,5,8,11,15,19,31};
set_whole_screen();
WriteCommand(0x2c);//write memory
for(i=0;i<154;i++)
{
color=gray[i/22];
color<<=6;
color|=(gray[i/22]<<1);
color<<=5;
color|=gray[i/22];
for(j=0;j<128;j++)
{
WriteData(color>>8); //
WriteData((uchar)color);
}
}
}
*/
/////////////////////////////////////////
void INT_191(void)
{
RSTB=1;
delay_ms(1);
RSTB=0;
delay_ms(10);
RSTB=1;
delay_ms(10);
WriteCommand(0x38);//idle mode off
WriteCommand(0x25);
WriteData(electron);//write contrast
WriteCommand(0x11);//sleep out & booster on
delay_ms(100);
WriteCommand(0x36);
WriteData(0Xc0);//MY=1,MX=1,MV=0,ML=0,RGB=0
WriteCommand(0x3A);
WriteData(0X05);//16Bit pixel!!!
WriteCommand(0xbc);//bias control
WriteData(0X01);//00=1/9,01=1/10,10=1/11,11=1/12
WriteCommand(0xbd);//VXH voltage control
WriteData(0X03);//00~07
WriteCommand(0x2a); //column address set
WriteData(0x00); //upper 8bit start address
WriteData(0x02); //lower 8bit start address 0 2
WriteData(0x00); //upper 8bit end address
WriteData(129); //lower 8bit end address 129
WriteCommand(0x2b); //row address set
WriteData(0x00); //upper 8bit start address
WriteData(0x01); //lower 8bit start address 01
WriteData(0x00); //upper 8bit end address
WriteData(160); //lower 8bit end address 160
WriteCommand(0x20);//display inversion off(normal)
WriteCommand(0x13);//normal display on
WriteCommand(0x29);//display on
WriteCommand(0x2c);
}
void EepromDataClear(void)
{
uchar i;
WriteCommand(0xD1); //Write ID2 for EEPROM programming
WriteData(0x00); //ID2[6-0]=000000
WriteCommand(0xD2); //Write ID3 for EEPROM programming
WriteData(0x00); //ID3S[1-0]=00
WriteCommand(0xD3); //Electron volume offset
WriteData(0x00); //EVOF[5-0]=00000
WriteCommand(0xD9); //EEPROM Write start
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
MTP_VOP=0; //append VOP to EPCVD pad,VOP=16V~17V
for(i=0;i<16;i++)
delay_ms(200); //24M OSC,200ms*16/2=delay 1.6s(min 1.5s)
MTP_VOP=1; //remove VOP,VOP=0V!!!
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
WriteCommand(0xD8); //EEPROM Write end
//EEPROM init clear data over
}
///////////////////////////////////////
uchar EepromClearVerify(void)
{
uchar i,j;
//EEPROM Clear Data Verification start
j=0;
WriteCommand(0xd7); //EEPROM verify register set
WriteData(0x81); //EEVF[7-0]=0X81,Eraser status of EEPROM verify
WriteCommand(0x11); //sleep out & booster on
delay_ms(220); //delay 10ms(min 5ms)modify from 5ms to 110ms!(2007-08-29)
WriteCommand(0xdb);//read ID2
ReadData();//dummy read
i=ReadData();
if((i&0x7f)!=0)
j=1;
WriteCommand(0xd6);//read EV offset
i=ReadData();//
if((i&0x9f)!=0)
j=1;
WriteCommand(0xde);//read ID3S Value
ReadData();//dummy read
i=ReadData();
if((i&0x03)!=0)
j=1;
WriteCommand(0xd7); //EEPROM verify register set
WriteData(0x00); //EEVF[7-0]=0X00,exit EEPROM verify
//EEPROM Clear Data Verification over
return j;
}
///////////////////////////////////////
void EepromWriteData(void)//eeprom programming
{
//EEPROM Write Data start
uchar i;
WriteCommand(0xd1); //Write ID2 for EEPROM programming
WriteData(ID2_Sign); //0x01-0x7f
WriteCommand(0xd2); //Write ID3S for EEPROM programming
WriteData(ID3S_Sign); //0x01-0x03
if(temp_add>0)
{
WriteCommand(0xd3); //Write electronic volume offset
WriteData(temp_add); //Write electronic volume offset
}
if(temp_sub>0)
{
WriteCommand(0xd3); //Write electronic volume offset
WriteData(0x80+temp_sub); //Write electronic volume offset
}
WriteCommand(0x10); //sleep in & booster off
WriteCommand(0xd9); //EEPROM Write start
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
MTP_VOP=0; //append VOP to EPCVD pad,VOP=16V~17V
for(i=0;i<16;i++)
delay_ms(200); //24M OSC,200ms*16/2=delay 1.6s(min 1.5s)
MTP_VOP=1; //remove VOP,VOP=0V!!!
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
WriteCommand(0xd8); //EEPROM Write end
}
////////////////////////////////////////
uchar EepromWriteVerify(void)
{
uchar i,k;
k=0;
WriteCommand(0xd7); //EEPROM verify register set
WriteData(0x82); //EEVF[7-0]=0X82,program status EEPROM verify
MTP_VOP=0; //append VOP to EPCVD pad,VOP=16V~17V
for(i=0;i<2;i++)
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
WriteCommand(0x11); //sleep out & booster on
delay_ms(15); //15ms/2=7.5ms (min 5ms)
WriteCommand(0xdb);//read ID2
ReadData();//dummy read
i=ReadData();
if((i&ID2_Sign)!=ID2_Sign)
k=1;
WriteCommand(0xde);//read ID3S Value
ReadData();//dummy read
i=ReadData();
if((i&ID3S_Sign)!=ID3S_Sign)
k=1;
WriteCommand(0xd6);//read EV offset
ReadData();//dummy read
i=ReadData();
if(i&0x80)//EOF5==1
{
if((i&temp_sub)!=temp_sub)
k=1;
}
else
{
if((i&temp_add)!=temp_add)
k=1;
}
WriteCommand(0xd7); //EEPROM verify register set
WriteData(0x00); //EEVF[7-0]=0X00,exit EEPROM verify
MTP_VOP=1; //remove VOP,VOP=0V!!!
return k;
}
///////////////////////////////////////
void AdjustOptimumDisplay(void)
{
uchar i,j;
INT_191();
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0xf8);
WriteData(0x00);
}
}
while(!key_mtp)
{
delay_ms(20);
}
while(key_mtp)
{
delay_ms(20);
while(!key_add)
{
delay_ms(20);
WriteCommand(0x25);
WriteData(++electron);
temp_sub=0;
temp_add+=2;
while(!key_add)
delay_ms(20);
}
while(!key_sub)
{
delay_ms(20);
WriteCommand(0x25);
WriteData(--electron);
temp_sub+=2;
temp_add=0;
while(!key_sub)
delay_ms(20);
}
}
}
///////////////////////////////////
LDS191_MTP()
{
// uchar Hdata,Ldata;
uchar i,MtpClearCount;
uchar temp_electron;
//EXTC=1; //EXTERN CODE ENABLE
RSTB=0;
delay_ms(10);
RSTB=1;
delay_ms(1);
// WriteCommand(0x10); //sleep in & booster off
temp_add=0;
temp_sub=0;
MtpClearCount=4;
temp_electron=electron;
ResetEraserEEPROM:
LED=0; //EEPROM init clear data start/
MtpClearCount--;
if(MtpClearCount==0)
while(1);
EepromDataClear();
LED=1;
WriteCommand(0x11); //sleep out & booster on
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
i=EepromClearVerify();
if(i!=0)
goto ResetEraserEEPROM;
AdjustOptimumDisplay();
EepromWriteData();
WriteCommand(0x11); //sleep out & booster on
delay_ms(220); //24M OSC,220ms/2=delay 110ms(min 100ms)
//i=EepromWriteVerify();
// if(i!=0)
//goto ResetEraserEEPROM;
WriteCommand(0x25); //EV set
WriteData(temp_electron);
WriteCommand(0x29); //display on
}
////////////////////////////////
main()
{
uchar i,j;
uchar *sp;
electron=60;//max=127, 60
while(1)
{
P0=0XAA;
P3=0X0A;
for(i=0;i<5;i++)
delay_ms(255);
P0=0X55;
P3=0X05;
for(i=0;i<5;i++)
delay_ms(255);
}
INT_191();
while(1)
{
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0xf8);
WriteData(0x00);
}
}
for(i=0;i<5;i++)
delay_ms(255);
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0x07);
WriteData(0xe0);
}
}
for(i=0;i<5;i++)
delay_ms(255);
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0x00);
WriteData(0x1f);
}
}
for(i=0;i<5;i++)
delay_ms(255);
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0xff);
WriteData(0xff);
}
}
for(i=0;i<5;i++)
delay_ms(255);
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(0x00);
WriteData(0x00);
}
}
for(i=0;i<5;i++)
delay_ms(255);
sp=map;
set_whole_screen();
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteData(*sp++);
WriteData(*sp++);
}
}
for(i=0;i<7;i++)
delay_ms(255);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -