📄 ili9320tp.c
字号:
//use ILI9320 or equivalent IC for 240RGB*320 QVGA LCM
//8080 mcu timing 16bit data bus
//VDD=VCI=3.3V
//LM-M0N0TCTLW3D FPC
//LCD: HDT24G03C-A(Arima)
//writed by beyond
//DATE:2007/08/13
#include <reg52.h>
//#include <gray.h>
//#include <main.h>
#include<pic.h>
sfr16 DPTR=0x82;
sbit RES = P3^0;
sbit A0 = P3^1;
sbit WRB = P3^2;
//sbit CS_MAIN=P3^6;
sbit AUTOB =P0^6;
sbit STEPB =P0^7;
sbit DCLK = P3^3;
sbit CSA = P3^4;
sbit DIN = P3^5;
sbit DOUT = P3^6;
sbit ENTI = P3^7;
void main_init(void);
void main_Write_COM(unsigned int wrcomH);
void main_Write_DATA(unsigned int DH);
void main_W_com_data(unsigned int com1,dat1);
void picture(void);
void main_DAT(unsigned int OY,unsigned int WS);
void main_address_set(void);
void main_Pattern(unsigned int jk,jm);
void main_gray(void);
void color(void);
void blue(void);
void main_picture(void);
void delaymms(int count);
void delayms(int count);
void point(void);
int ADS7843_WriteRead(unsigned char px);
void press(void);
main()
{
RES=1;
delaymms(300);
RES=0;
delaymms(300);
RES=1;
delaymms(700);
main_init();
while(1)
{
main_Pattern(0xf800,0xf800); //red
//delaymms(10);
press();
///
main_Pattern(0xf800,0x001f); //blue
// delaymms(100);
press();
main_Pattern(0x001f,0x07e0); //green
// delaymms(100);
press();
main_Pattern(0x0000,0x0000); //black
//delaymms(100);
//
press();
// main_gray(); //gray
// delaymms(10);
//press();
// color(); //color
// delaymms(100);
// press();
// blue(); //blue
// delaymms(100);
// press();
main_Pattern(0xffff,0xffff); //white
//delaymms(1);
press();
main_gray(); //gray
// delaymms(10);
press();
picture(); //picture
// delaymms(10);
press();
while(1)
{
if(ENTI==0)
{
point();
}
}
}
}
void main_init(void)
{
//9320
delayms(50); //this delay time is necessary
main_W_com_data(0x00e5, 0x8000);
main_W_com_data(0x0000, 0x0001); // Start internal OSC.
main_W_com_data(0x0001, 0x0100); // set SS and SM bit
main_W_com_data(0x0002, 0x0700); // set 1 line inversion 0700
main_W_com_data(0x0003, 0x1030); // 10b0 set GRAM write direction and BGR=1.
main_W_com_data(0x0004, 0x0000); // Resize register
main_W_com_data(0x0008, 0x0202); // set the back porch and front porch
main_W_com_data(0x0009, 0x0000); // set non-display area refresh cycle ISC[]
main_W_com_data(0x000A, 0x0000); // FMARK function
main_W_com_data(0x000C, 0x0000); // RGB interface setting
main_W_com_data(0x000D, 0x000f); // Frame marker Position
main_W_com_data(0x000F, 0x0000); // RGB interface polarity
//*************Power On sequence ****************
main_W_com_data(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
main_W_com_data(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
main_W_com_data(0x0012, 0x0000); // VREG1OUT voltage
main_W_com_data(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
delayms(20); // Dis-charge capacitor power voltage
main_W_com_data(0x0010, 0x1fb0); //0x17b0 SAP, BT[3:0], AP, DSTB, SLP, STB
main_W_com_data(0x0011, 0x0007); //0137 //0134 OK // DC1[2:0], DC0[2:0], VC[2:0]
delayms(20); // Delay 50ms
main_W_com_data(0x0012, 0x011e); //013E // VREG1OUT voltage
delayms(20); // Delay 50ms
main_W_com_data(0x0013, 0x1f00); //1500 /1f00 // VDV[4:0] for VCOM amplitude
main_W_com_data(0x0029, 0x001f); // VCM[4:0] for VCOMH //13
delayms(20);
main_W_com_data(0x0020, 0x0000); // GRAM horizontal Address
main_W_com_data(0x0021, 0x0000); // GRAM Vertical Address
main_W_com_data(0x002B, 0x0020);
// ----------- Adjust the Gamma Curve ----------//
/*
main_W_com_data(0x0030, 0x0000);
main_W_com_data(0x0031, 0x0505);
main_W_com_data(0x0032, 0x0004);
main_W_com_data(0x0035, 0x0006);
main_W_com_data(0x0036, 0x0707);
main_W_com_data(0x0037, 0x0105);
main_W_com_data(0x0038, 0x0002);
main_W_com_data(0x0039, 0x0707);
main_W_com_data(0x003C, 0x0704);
main_W_com_data(0x003D, 0x0807);
*/
main_W_com_data(0x0030, 0x0403);
main_W_com_data(0x0031, 0x0403);
main_W_com_data(0x0032, 0x0403);
main_W_com_data(0x0035, 0x0000);
main_W_com_data(0x0036, 0x0000);
main_W_com_data(0x0037, 0x0403);
main_W_com_data(0x0038, 0x0403);
main_W_com_data(0x0039, 0x0403);
main_W_com_data(0x003C, 0x0000);
main_W_com_data(0x003D, 0x1400);
/*
main_W_com_data(0x0030, 0x0000);
main_W_com_data(0x0031, 0x0201);
main_W_com_data(0x0032, 0x0202);
main_W_com_data(0x0035, 0x0106);
main_W_com_data(0x0036, 0x1000);
main_W_com_data(0x0037, 0x0302);
main_W_com_data(0x0038, 0x0707);
main_W_com_data(0x0039, 0x0707);
main_W_com_data(0x003C, 0x0600);
main_W_com_data(0x003D, 0x020E);
*/
//------------------ Set GRAM area ---------------//
main_W_com_data(0x0050, 0x0000); // Horizontal GRAM Start Address 00
main_W_com_data(0x0051, 0x00EF); // Horizontal GRAM End Address
main_W_com_data(0x0052, 0x0000); // Vertical GRAM Start Address
main_W_com_data(0x0053, 0x013F); // Vertical GRAM Start Address
main_W_com_data(0x0060, 0x2700); // Gate Scan Line
main_W_com_data(0x0061, 0x0001); // NDL,VLE, REV
main_W_com_data(0x006A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
main_W_com_data(0x0080, 0x0000);
main_W_com_data(0x0081, 0x0000);
main_W_com_data(0x0082, 0x0000);
main_W_com_data(0x0083, 0x0000);
main_W_com_data(0x0084, 0x0000);
main_W_com_data(0x0085, 0x0000);
//-------------- Panel Control -------------------//
main_W_com_data(0x0090, 0x0000); //0010
main_W_com_data(0x0092, 0x0000);//0000
main_W_com_data(0x0093, 0x0003);//0003
main_W_com_data(0x0095, 0x0110);//0110
main_W_com_data(0x0097, 0x0000);
main_W_com_data(0x0098, 0x0000);
main_W_com_data(0x0007, 0x0173); // 0x0173 262K color and display ON
}
void main_Write_COM(unsigned int wrcomH)
{
// CS_MAIN =0;
DPTR=wrcomH;
A0=0;
P2=DPH;
A0=0;
P1=DPL;
WRB=0;
WRB=1;
// CS_MAIN =1;
}
void main_Write_DATA(unsigned int DH)
{
/// CS_MAIN =0;
DPTR=DH;
A0=1;
P2=DPH;
A0=1;
P1=DPL;
WRB=0;
WRB=1;
// CS_MAIN =1;
}
void main_DAT(int OY, WS)
{
// CS_MAIN =0;
//DPTR=;
A0=1;
P2=OY;
A0=1;
P1=WS;
WRB=0;
WRB=1;
// CS_MAIN =1;
}
void main_W_com_data(unsigned int com1,dat1)
{
main_Write_COM(com1);
main_Write_DATA(dat1);
}
void main_address_set(void)
{
main_W_com_data(0x0020,0x0000);
main_W_com_data(0x0021,0x0000);
main_Write_COM(0x0022);
}
void main_Pattern(unsigned int jk,jm)
{
int i,j;
main_address_set();
for(i=0;i<240;i++)
{
main_Write_DATA(jk);
}
for(i=0;i<318;i++)
{
main_Write_DATA(jk);
for (j=0;j<238;j++)
{
main_Write_DATA(jm);
}
main_Write_DATA(jk);
}
for(i=0;i<240;i++)
{
main_Write_DATA(jk);
}
}
void main_gray(void)
{
unsigned char A,B,C;
unsigned int i,j,k,DH;
//unsigned char DH;
main_address_set();
for(k=0;k<160;k++)
{
A=0;
B=0;
C=0;
for(i=0;i<16;i++)
{
DH=(A<<11)+(B<<5)+C;
for(j=0;j<15;j++)
{
main_Write_DATA(DH);
}
A=A+2;
B=B+4;
C=C+2;
}
}
for(i=0;i<160;i++)
{
for(j=0;j<120;j++)
{
main_Write_DATA(0xffff);
}
for(j=0;j<120;j++)
{
main_Write_DATA(0x0000);
}
}
}
void color(void)
{
unsigned int i,j;
main_address_set();
for(i=0;i<64;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0xf800);
}
}
for(i=0;i<64;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0x07e0);
}
}
for(i=0;i<64;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0x001f);
}
}
for(i=0;i<64;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0XFFE0); //yellow
}
}
for(i=0;i<64;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0XFFFF);
}
}
}
void blue(void)
{
unsigned int i,j;
main_address_set();
for(i=0;i<320;i++)
{
for(j=0;j<48;j++)
{
main_Write_DATA(0x001f);
}
for(j=0;j<48;j++)
{
main_Write_DATA(0x000f);
}
for(j=0;j<48;j++)
{
main_Write_DATA(0x0007);
}
for(j=0;j<48;j++)
{
main_Write_DATA(0x0003);
}
for(j=0;j<48;j++)
{
main_Write_DATA(0x0001);
}
}
}
void picture(void) //picture
{
int i,j,x=0,y=1,a,c;
main_address_set();
for(i=0;i<60;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0x0000);
}
}
for(j=0;j<200;j++)
{ //1
for (c=0;c<45;c++)
{
main_Write_DATA(0x0000);
}
for (a=45;a<195;a++)
{
main_DAT(pic[x],pic[y]);
x=x+2;
y=y+2;
}
for (c=195;c<240;c++)
{
main_Write_DATA(0x0000);
}
} //2
for(i=0;i<60;i++)
{
for(j=0;j<240;j++)
{
main_Write_DATA(0x0000);
}
}
}
/*
void picture(void) //picture
{
int i,j,x=0,y=1,a;
main_W_com_data(0x0001, 0x0100); // set SS and SM bit
main_W_com_data(0x0002, 0x0700); // set 1 line inversion 0700
main_W_com_data(0x0003, 0x1030); // 10b0 set GRAM write direction and
main_W_com_data(0x0050, 45);
main_W_com_data(0x0051,194);
main_W_com_data(0x0052,60);
main_W_com_data(0x0053,259);
main_W_com_data(0x0020,45);
main_W_com_data(0x0021,60);
main_Write_COM(0x0022);
for (j=0;j<200;j++)
{
for (a=0;a<150;a++)
{
main_DAT(pic[x],pic[y]);
x=x+2;
y=y+2;
}
}
}
*/
void press(void) // powertip STEP or AUTO Status
{
while (AUTOB==0&STEPB==1)
{}
if(STEPB==0)
{
delaymms(5);
while(STEPB==0)
{}
}
else if(AUTOB==1)
{
delaymms(5);
}
}
void delayms(int count)
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<500;j++);
}
void delaymms(int count) /* X10ms */
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<2;j++);
}
int ADS7843_WriteRead(unsigned char px)
{
int dat,i;
CSA=0;
px = px|0x80;
DCLK=0;
DIN=0;
delaymms(5);
for(i=0;i<8;i++)
{
if((px&0x80)!= 0)
{
DIN=1;
}
else
{
DIN=0;
}
delaymms(1);
DCLK=1;
delaymms(1);
DCLK=0;
delaymms(1);
px=px<<1;
}
DIN=0;
delaymms(1);
DCLK=1;
delaymms(1);
dat=0;
for(i=0;i<8;i++)
{
dat=dat<<1;
DCLK=0;
if(DOUT!= 0) dat=dat|1;
DCLK=1;
delaymms(1);
}
DCLK=0;
delaymms(1);
for(i=0;i<3;i++)
{
DCLK=1;
delaymms(1);
DCLK=0;
delaymms(1);
}
CSA=1;
return(dat);
}
void point(void)
{
long int x,y,xx,yy;
x=0;
y=0;
//y=320-((( ADS7843_WriteRead(0x98))-20)*320/236);
//y=320-(( ADS7843_WriteRead(0x98)-20)*180/256)*2;
y=320-(( ADS7843_WriteRead(0x98)-19)*183/256)*2;
yy=320-( ADS7843_WriteRead(0x98)*180/236)*2;
//x=240-(( ADS7843_WriteRead(0xD8)-2)*240/256);
x=240-(( ADS7843_WriteRead(0xD8)-15)*281/256);
//xx=240-( ADS7843_WriteRead(0xD8));
xx=240-( ADS7843_WriteRead(0xD8));
if ((yy>0x120)&&(yy<0x13f))
{
if (xx<0x30)
{
// main_address_set();
main_Pattern(0xffff,0xffff);
}
//if ((yy>0x120)&&(yy<0x13f))
if((xx<0x60)&&(xx>0x30))
{
// main_address_set();
main_Pattern(0x07e0,0x07e0);
}
// if ((yy>0x120)&&(yy<0x13f))
if((xx<0x90)&&(xx>0x60))
{
// main_address_set();
// main_Pattern(0x001f,0x001f);
picture();
}
// if ((yy>0x120)&&(yy<0x13f))
if((xx<0xc0)&&(xx>0x90))
{
// main_address_set();
main_Pattern(0x0000,0x0000);
}
// if ((yy>0x120)&&(yy<0x13f))
// if (xx>0xc0)
// {
// main_address_set();
// main_Pattern(0x0000,0xffff);
// }
}
else
main_W_com_data(0x0020,x);
main_W_com_data(0x0021,y+1);
main_Write_COM(0x0022);
main_Write_DATA(0xffff);
//****************************** main_Write_DATA(0xffff);
main_W_com_data(0x0020,x);
main_W_com_data(0x0021,y);
main_Write_COM(0x0022);
main_Write_DATA(0xffff);
// ************************** main_Write_DATA(0xffff);
// **************************** main_Write_DATA(0xffff);
main_W_com_data(0x0020,x+1);
main_W_com_data(0x0021,y);
main_Write_COM(0x0022);
main_Write_DATA(0xffff);
// **************************** main_Write_DATA(0xffff);
// ***************************** main_Write_DATA(0xffff);
// xx=0;
// yy=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -