📄 ili9325.c
字号:
WriteWord(boutd,numbelImg,0x004C,0x0012,0x0000);
}
void FillIconWindow(long int Xstart,long int Ystart,unsigned int rgb)
{
unsigned char i,j;
BlockWrite(Xstart,Xstart+29,Ystart,Ystart+29);
for(i=0;i<30;i++)
for(j=0;j<30;j++)
{
WriteChar(rgb);
}
}
void WriteIconWindow(long int Xstart,long int Ystart,unsigned char code *p)
{
unsigned char i,j;
BlockWrite(Xstart,Xstart+29,Ystart,Ystart+29);
CS0=0;
RS=1;
RD0=1;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
DBH=*p++;
DBL=*p++;
WR0=0;
WR0=1;
}
}
RS=1;
CS0=1;
}
unsigned char ConvPosX(unsigned int x)
{
if(x<=300) x=0;
if(x>300)
{
x=(x-300)/14.58; //(3800-300)/240=14.58
}
if(x>239) x=239;
return x;
}
unsigned int ConvPosY(unsigned int y)
{
if(y<=250) y=0;
if(y>250)
{
y=(y-250)/10.78; //(3700-250)/320=10.78
}
if(y>319) y=319;
return y;
}
void WritePixel(unsigned char x,unsigned int y,unsigned int rgb)
{
//x: x_start & x_end; y:y_start & y_end;
unsigned char i;
BlockWrite(x,x+3,y,y+3);
for(i=0;i<16;i++)
{
WriteChar(rgb);
}
//DispPos(ConvPosX(TP_X),ConvPosY(TP_Y));
}
void DrawLine(unsigned char Xstart,unsigned int Ystart,unsigned char Xend,unsigned int Yend,unsigned int rgb)
{
unsigned int i;
if (Xstart==Xend)
{
BlockWrite(Xstart,Xstart,Ystart,Yend);
for(i=Ystart;i<Yend+1;i++)
{
WriteChar(rgb);
}
}
if (Ystart==Yend)
{
BlockWrite(Xstart,Xend,Ystart,Ystart);
for(i=Xstart;i<Xend+1;i++)
{
WriteChar(rgb);
}
}
}
void DrawGird(unsigned int rgb)
{
unsigned int i;
for(i=15;i<ROW-1;i=i+16)
{
DrawLine(0,i,COL-1,i,rgb);
}
for(i=15;i<COL-1;i=i+16)
{
DrawLine(i,0,i,ROW-1,rgb);
}
}
void StartSPI(void) //SPI开始
{
DCLK=0;
TP_CS=1;
DIN=1;
DCLK=1;
TP_CS=0;
}
void WriteCharToTP(unsigned char dat)
{
unsigned char i;
DCLK=0;
for(i=0;i<8;i++)
{
dat<<=1;
DIN=CY;
DCLK=0; _nop_();_nop_();_nop_();
DCLK=1; _nop_();_nop_();_nop_();
}
}
unsigned int ReadCharFromTP(void)
{
unsigned char i;
unsigned int dat=0;
for(i=0;i<12;i++)
{
dat<<=1;
DCLK=1; _nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT) dat++;
}
return dat;
}
void StartTPTest(void) //外部中断0 用来接受键盘发来的数据
{
Delay(30);
StartSPI();
// while(BUSY);
Delay(10);
WriteCharToTP(0x90); //送控制字 10010000 即用差分方式读X坐标
// while(BUSY);
Delay(10);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
TP_Y=ReadCharFromTP();
WriteCharToTP(0xD0); //送控制字 11010000 即用差分方式读Y坐标
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
TP_X=ReadCharFromTP();
TP_CS=1;
}
void EnterSLP(void)
{
//FOR ILI9325
WriteComm(0x0007);WriteData(0x0000);
Delay(50);
WriteComm(0x0010);WriteData(0x0000);
WriteComm(0x0011);WriteData(0x0000);
WriteComm(0x0012);WriteData(0x0000);
WriteComm(0x0013);WriteData(0x0000);
Delay(100);
WriteComm(0x0010);WriteData(0x0002);
}
void ExitSLP(void)
{
//FOR ILI9325
WriteComm(0x0010);WriteData(0x0000);
WriteComm(0x0011);WriteData(0x0000);
WriteComm(0x0012);WriteData(0x0000);
WriteComm(0x0013);WriteData(0x0000);
Delay(50);
WriteComm(0x0010);WriteData(0x1690);
WriteComm(0x0011);WriteData(0x0227);
Delay(50);
WriteComm(0x0012);WriteData(0x001D);
WriteComm(0x0013);WriteData(0x0800);
WriteComm(0x0029);WriteData(0x0014);
Delay(50);
WriteComm(0x0007);WriteData(0x0133);
}
void InitLCD(void)
{
//FOR WTK2.8,ILI9325
WriteComm(0x00E3);WriteData(0x3008);
WriteComm(0x00E7);WriteData(0x0012);
WriteComm(0x00EF);WriteData(0x1231);
WriteComm(0x0001);WriteData(0x0100);
WriteComm(0x0002);WriteData(0x0700);
WriteComm(0x0003);WriteData(0x1030);
WriteComm(0x0004);WriteData(0x0000);
WriteComm(0x0008);WriteData(0x0207);
WriteComm(0x0009);WriteData(0x0000);
WriteComm(0x000A);WriteData(0x0000);
WriteComm(0x000C);WriteData(0x0000);
WriteComm(0x000D);WriteData(0x0000);
WriteComm(0x000F);WriteData(0x0000);
WriteComm(0x0010);WriteData(0x0000);
WriteComm(0x0011);WriteData(0x0007);
WriteComm(0x0012);WriteData(0x0000);
WriteComm(0x0013);WriteData(0x0000);
Delay(100);
WriteComm(0x0010);WriteData(0x1690);
WriteComm(0x0011);WriteData(0x0227);
WriteComm(0x0012);WriteData(0x001D);
WriteComm(0x0013);WriteData(0x0800);
WriteComm(0x0029);WriteData(0x0014);
Delay(100);
WriteComm(0x0020);WriteData(0x0000);
WriteComm(0x0021);WriteData(0x0000);
WriteComm(0x0030);WriteData(0x0007);
WriteComm(0x0031);WriteData(0x0707);
WriteComm(0x0032);WriteData(0x0006);
WriteComm(0x0035);WriteData(0x0704);
WriteComm(0x0036);WriteData(0x1F04);
WriteComm(0x0037);WriteData(0x0004);
WriteComm(0x0038);WriteData(0x0000);
WriteComm(0x0039);WriteData(0x0706);
WriteComm(0x003C);WriteData(0x0701);
WriteComm(0x003D);WriteData(0x000F);
WriteComm(0x0050);WriteData(0x0000);
WriteComm(0x0051);WriteData(0x00ef);
WriteComm(0x0052);WriteData(0x0000);
WriteComm(0x0053);WriteData(0x013f);
WriteComm(0x0060);WriteData(0xA700);
WriteComm(0x0061);WriteData(0x0001);
WriteComm(0x006a);WriteData(0x0000);
WriteComm(0x0080);WriteData(0x0000);
WriteComm(0x0081);WriteData(0x0000);
WriteComm(0x0082);WriteData(0x0000);
WriteComm(0x0083);WriteData(0x0000);
WriteComm(0x0084);WriteData(0x0000);
WriteComm(0x0085);WriteData(0x0000);
WriteComm(0x0090);WriteData(0x0010);
WriteComm(0x0092);WriteData(0x0000);
WriteComm(0x0093);WriteData(0x0003);
WriteComm(0x0095);WriteData(0x0110);
WriteComm(0x0097);WriteData(0x0000);
WriteComm(0x0098);WriteData(0x0000);
WriteComm(0x0007);WriteData(0x0133);
}
void INT0_CTRL(unsigned char i)
{
//IE: EX0 1-外部INT0 打开;0-外部INT0 关闭
PX0 = 0; // IP:中断优先级为0
IT0 = 0; // TCON:低电平触发
EX0 = i; // 1-外部INT0 打开 0-外部INT0 关闭
//EA = 1; // 1-所有中断有效;0-关闭所有中断
}
void INT0_FUN(void) interrupt 0 // P3.2
{
EX0 = 0; //外部0关闭
EA=0; //所有中断无效
TP_IRQ=1;
StartTPTest();
if(FG_DISP_POS) DispPos(TP_X,TP_Y);
//tp test point 1
if(((TP_X>=1700)&&(TP_X<=0x2000))&&((TP_Y>=1700)&&(TP_Y<=0x2000))&&(FG_STEP_1))
{
FillIconWindow(COL/2-15,ROW/2-15,0xffff);
//DrawGird(0x2410);
WriteIconWindow(COL-30,0,cursorIcon);
FG_STEP=FG_STEP<<1;Delay(50);
}
//tp test point 2
if(((TP_X>=3300)&&(TP_X<=3800))&&((TP_Y>=100)&&(TP_Y<=600))&&(FG_STEP_2))
{
FillIconWindow(COL-30,0,0xffff);
//DrawGird(0x2410);
WriteIconWindow(0,0,cursorIcon);
FG_STEP=FG_STEP<<1;Delay(50);
}
//tp test point 3
if(((TP_X>=100)&&(TP_X<=600))&&((TP_Y>=100)&&(TP_Y<=600))&&(FG_STEP_3))
{
FillIconWindow(0,0,0xffff);
//DrawGird(0x2410);
WriteIconWindow(0,ROW-30,cursorIcon);
FG_STEP=FG_STEP<<1;Delay(50);
}
//tp test point 4
if(((TP_X>=100)&&(TP_X<=600))&((TP_Y>=3300)&&(TP_Y<=3800))&&(FG_STEP_4))
{
FillIconWindow(0,ROW-30,0xffff);
//DrawGird(0x2410);
WriteIconWindow(COL-30,ROW-30,cursorIcon);
FG_STEP=FG_STEP<<1;Delay(50);
}
//tp test point 5
if(((TP_X>=3300)&&(TP_X<=3800))&&((TP_Y>=3300)&&(TP_Y<=3800))&&(FG_STEP_5))
{
FillIconWindow(COL-30,ROW-30,0xffff);
//DrawGird(0x2410);
WriteIconWindow(COL/2-15,ROW/2-15,goodIcon);
FG_STEP=0x01;Delay(300);
FG_STEP=FG_STEP<<1;
}
// draw line test
if(FG_STEP_6)
{
WritePixel(ConvPosX(TP_X),ConvPosY(TP_Y),0xf800);
DispPos(ConvPosX(TP_X),ConvPosY(TP_Y));
}
BlockWrite(0,COL-1,0,ROW-1);
EX0 = 1; //外部0 打开
EA=1; //所有中断有效
}
void T0_CTRL(unsigned char i)
{
TMOD=0x01; // T0:16位定时器
PT0 = 1; // IP: 中断优先级为1
TH0=0x00;
TL0=0x00;
ET0 = 1;
TR0 = i; // 1-T0 打开; 0-T0 关闭
//EA = 1; // 1-所有中断有效;0-关闭所有中断
}
void T0_FUN(void) interrupt 1
{
ET0 = 0; // T0无效
TR0 = 0; // T0关断
KEY2 = 1;
KEY3 = 1;
KEY4 = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -