📄 9320tp.txt
字号:
#include<reg51.h>
//吴迪的软件//
//sfr16 DPTR=0x82;
sbit CS=P1^6; //chip select signal
sbit RES=P3^5; //reset signal
sbit A0=P3^4; //data/command control signal
sbit WRB=P3^6;
sbit RDB=P3^7;
sbit SW3=P1^3;
sbit SW2=P1^4;
//sbit DB0=P1^7;
//sbit DB9=P1^1;
sbit ads7846_cs = P1^0;
sbit ads7846_clk = P3^3;
sbit ads7846_din = P3^2;
sbit ads7846_busy = P1^1;
sbit ads7846_irq = P3^1; //ENTI
sbit ads7846_dout = P3^0;
//====================================================//
void main (void);
void ILI9320_CPT24_Initial(void);
void show_colour_bar (void);
void show_gray (void);
void show_black_window (void);
void write_cmd_data(unsigned char x, unsigned int y);
void write_cmd(unsigned char DH,unsigned char DL);
void write_data(unsigned char DH,unsigned char DL);
void address_set(void);
void delayms(unsigned int tt);
void wait_sw(void) ;
void show_gray32(void);
void show_photo(void);
void show_rgb (unsigned int jk,unsigned int jm);
unsigned char code pic[];
void write_data1 (unsigned int y);
void ads7846_initial(void);
void touch(void);
void write_ads7846(unsigned char x);
unsigned int read_ads7846_x(void);
unsigned int read_ads7846_y(void);
void show_touch(unsigned char line_h,unsigned char line_l,unsigned char row);
//================================================//
void main(void)
{
CS=1;
delayms(10);
RES=0;
delayms(10);
RES=1;
delayms(10);
ILI9320_CPT24_Initial();
while(1)
{
show_rgb(0x0000,0x0000);
//delayms(800);
//wait_sw();
show_rgb(0x0000,0x0000);
//wait_sw();
show_rgb(0x001f,0xf800);
//wait_sw();
show_rgb(0xf800,0x07e0);
//wait_sw();
show_rgb(0xffff,0x8000);
//wait_sw();
show_gray();
//wait_sw();
// show_gray32();
// wait_sw();
show_colour_bar();
//wait_sw();
show_black_window();
//wait_sw();*/
show_rgb(0xff,0xff);
wait_sw();
touch();
wait_sw();
}
}
void show_rgb (unsigned int jk,unsigned int jm)
{
unsigned int i,j;
address_set();
for(i=0;i<1;i++)
{
for(j=0;j<240;j++)
write_data1(jk);
}
for (i=0;i<318;i++)
{
for (j=0;j<1;j++)
write_data1(jk);
for (j=0;j<238;j++)
write_data1(jm);
for (j=0;j<1;j++)
write_data1(jk);
}
for(i=0;i<1;i++)
{
for(j=0;j<240;j++)
write_data1(jk);
}
}
void show_colour_bar (void)
{
int V,H;
address_set();
for(H=0;H<240;H++)
{
for(V=0;V<40;V++)
write_data(0xf8,0x00);
}
for(H=0;H<240;H++)
{
for(V=40;V<80;V++)
write_data(0x07,0xe0);
}
for(H=0;H<240;H++)
{
for(V=80;V<120;V++)
write_data(0x00,0x1f);
}
for(H=0;H<240;H++)
{
for(V=120;V<160;V++)
write_data(0xff,0xe0);
}
for(H=0;H<240;H++)
{
for(V=160;V<200;V++)
write_data(0xf8,0x1f);
}
for(H=0;H<240;H++)
{
for(V=200;V<240;V++)
write_data(0x07,0xff);
}
for(H=0;H<240;H++)
{
for(V=240;V<280;V++)
write_data(0xff,0xff);
}
for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
write_data(0x00,0x00);
}
}
void show_black_window()
{
unsigned int i, j;
address_set();
for(i=0;i<106;i++)
{
for(j=0;j<240;j++)
write_data(0xff,0xff); //white
}
for(j=0;j<108;j++)
{
for(i=0;i<80;i++)
{
write_data(0xff,0xff);
}
for(i=0;i<80;i++)
{
write_data(0x00,0x00);
}
for(i=0;i<80;i++)
{
write_data(0xff,0xff);
}
}
for(i=0;i<106;i++)
{
for(j=0;j<240;j++)
write_data(0xff,0xff); //white
}
}
//==================================================================//
void show_gray(void)
{
unsigned char n,i,j,rgb_r,rgb_g,rgb_b,temp1,temp2,temp3,D1,D2;
// unsigned int jk;
rgb_r=0x00;
rgb_g=0x00;
rgb_b=0x00;
//n=16;
address_set();
for(j=0;j<160;j++)
{
for(n=0;n<16;n++)
{
for(i=0;i<15;i++)
{
temp1=rgb_r;
temp1=rgb_r<<3;
temp2=rgb_g;
D1=((temp2&0x38)>>3)|temp1;
temp3=rgb_b;
D2=temp3|((temp2&0x07)<<5);
//jk=D1<<8|D2;
write_data(D1,D2);
}
rgb_r+=2;
rgb_g+=4;
rgb_b+=2;
}
rgb_r=0x00;
rgb_g=0x00;
rgb_b=0x00;
// for (i=0;i<15;i++)
// write_data(0xffff);
}
for (j=0;j<160;j++)
{
for (i=0;i<120;i++)
{
write_data(0x00,0x00);
}
for (i=0;i<120;i++)
{
write_data(0xff,0xff);
}
}
}
void show_gray32(void)
{
unsigned char n,i,j,rgb_r,rgb_g,rgb_b,temp1,temp2,temp3,D1,D2;
//unsigned int jk;
rgb_r=0x00;
rgb_g=0x00;
rgb_b=0x00;
n=16;
address_set();
for(n=0;n<32;n++)
{
for(i=0;i<10;i++)
{
for(j=0;j<240;j++)
{
temp1=rgb_r;
temp1=rgb_r<<3;
temp2=rgb_g;
D1=((temp2&0x38)>>3)|temp1;
temp3=rgb_b;
D2=temp3|((temp2&0x07)<<5);
// jk=D1<<8|D2;
write_data(D1,D2);
}
}
rgb_r++;
rgb_g+=2;
rgb_b++;
}
}
/*
void show_photo(void)
{
unsigned char j;
unsigned int i;
unsigned long s=0;
address_set();
for (i=0;i<75;i++)
{
for (j=0;j<240;j++)
write_data(0xff,0xff);
}
for (i=0;i<170;i++)
{
for (j=0;j<55;j++)
write_data(0xff,0xff);
for (j=0;j<130;j++)
write_data(pic[s++],pic[s++]);
for (j=0;j<55;j++)
write_data(0xff,0xff);
}
for (i=0;i<75;i++)
{
for (j=0;j<240;j++)
write_data(0xff,0xff);
}
}
*/
//=======================================================//
void write_cmd_data (unsigned char x,unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
write_cmd(0x00,x);
write_data(m,n);
}
void write_data1 (unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
write_data(m,n);
}
void write_cmd(unsigned char DH,unsigned char DL)
{
CS=0;
RDB=1;
A0=0;
P2=DH;
//WRB=0;
//WRB=1;
P0=DL;
WRB=0;
WRB=1;
CS=1;
}
void write_data(unsigned char DH,unsigned char DL)
{
CS=0;
RDB=1;
A0=1;
P2=DH;
//WRB=0;
//WRB=1;
P0=DL;
WRB=0;
WRB=1;
CS=1;
}
void wait_sw(void)
{
while(SW3 == 1)
{
if(SW2 == 0)
{
goto aas;
}
else
{ if(SW3 == 0)
goto aas;
}
}
aas:;
}
//=======================================================
void delayms(unsigned int count)
{
int i,j;
for(i=0;i<count;i++)
{
for(j=0;j<260;j++);
}
}
void ILI9320_CPT24_Initial(void)
{
write_cmd_data(0x00E5, 0x8000); // Start internal OSC.
write_cmd_data(0x0000, 0x0001);
write_cmd_data(0x0001, 0x0100); // set SS and SM bit
write_cmd_data(0x0002, 0x0700); // set 1 line inversion 0x0700
write_cmd_data(0x0003, 0x1030); // set GRAM write direction and BGR=1.
write_cmd_data(0x0004, 0x0000); // Resize register
write_cmd_data(0x0008, 0x0202); // set the back porch and front porch
write_cmd_data(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
write_cmd_data(0x000A, 0x0000); // FMARK function
write_cmd_data(0x000C, 0x0000); // RGB interface setting
write_cmd_data(0x000D, 0x0000); // Frame marker Position
write_cmd_data(0x000F, 0x0000); // RGB interface polarity
// write_cmd_data(0x002B, 0x0020); // Frame Rate and Color Control
write_cmd_data(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
write_cmd_data(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
write_cmd_data(0x0012, 0x0000); // VREG1OUT voltage
write_cmd_data(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
delayms(200); // Dis-charge capacitor power voltage
write_cmd_data(0x0010, 0x17B0); // SAP, BT[3:0], AP, DSTB, SLP, STB
write_cmd_data(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
delayms(50); // Delay 50ms
write_cmd_data(0x0012, 0x013A); // VREG1OUT voltage
delayms(50); // Delay 50ms
write_cmd_data(0x0013, 0x1A00); // VDV[4:0] for VCOM amplitude
write_cmd_data(0x0029, 0x000C); // VCM[4:0] for VCOMH
delayms(50);
write_cmd_data(0x0020, 0x0000); // GRAM horizontal Address
write_cmd_data(0x0021, 0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
write_cmd_data(0x0030, 0x0000);
write_cmd_data(0x0031, 0x0505);
write_cmd_data(0x0032, 0x0004);
write_cmd_data(0x0035, 0x0006);
write_cmd_data(0x0036, 0x0707);
write_cmd_data(0x0037, 0x0105);
write_cmd_data(0x0038, 0x0002);
write_cmd_data(0x0039, 0x0707);
write_cmd_data(0x003C, 0x0704);
write_cmd_data(0x003D, 0x0807);
//------------------ Set GRAM area ---------------//
write_cmd_data(0x0050, 0x0000); // Horizontal GRAM Start Address
write_cmd_data(0x0051, 0x00EF); // Horizontal GRAM End Address
write_cmd_data(0x0052, 0x0000); // Vertical GRAM Start Address
write_cmd_data(0x0053, 0x013F); // Vertical GRAM Start Address
write_cmd_data(0x0060, 0x2700); // Gate Scan Line
write_cmd_data(0x0061, 0x0001); // NDL,VLE, REV
write_cmd_data(0x006A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
write_cmd_data(0x0080, 0x0000);
write_cmd_data(0x0081, 0x0000);
write_cmd_data(0x0082, 0x0000);
write_cmd_data(0x0083, 0x0000);
write_cmd_data(0x0084, 0x0000);
write_cmd_data(0x0085, 0x0000);
//-------------- Panel Control -------------------//
write_cmd_data(0x0090, 0x0010);
write_cmd_data(0x0092, 0x0000);
write_cmd_data(0x0093, 0x0003);
write_cmd_data(0x0095, 0x0110);
write_cmd_data(0x0097, 0x0000);
write_cmd_data(0x0098, 0x0000);
write_cmd_data(0x0007, 0x0173); // 262K color and display ON
// write_cmd_data(0x0022);//
}
void address_set()
{
write_cmd_data(0x0020,0x0000);
write_cmd_data(0x0021,0x0000);
write_cmd (0x00,0x22);
}
/*===========================================================*/
void touch ()
{
unsigned char row,line_h,line_l;
unsigned int line;
float x,y,temp1,temp2;
show_rgb(0x0000,0x0000); //white //white
//ads7846_initial();
while(SW2)
{
while(!ads7846_irq)
{
do{
x=read_ads7846_x(); temp1=(x*285)/4095; row=temp1-20;
y=read_ads7846_y(); temp2=(y*379)/4095; line=359-temp2; line_h=line/0xff;line_l=line%0xff;
}while((x>4095)||(x<0)||(y>4095)||(y<0));
if((row>10)&&(row<=55)&&(line>320)&&(line<349)) show_rgb(0x07e0,0xf800);
if((row>55)&&(row<=100)&&(line>320)&&(line<349)) show_rgb(0x001f,0x07e0);
if((row>100)&&(row<=145)&&(line>320)&&(line<349)) show_rgb(0xf800,0x001f);
if((row>145)&&(row<=190)&&(line>320)&&(line<349)) show_rgb(0x0000,0x0000);
if((row>190)&&(row<=239)&&(line>320)&&(line<349)) show_rgb(0xffff,0xffff);
if((line>5)&&(line<330)) show_touch(line_h,line_l,row);
}
}
}
//=======================================================
void show_touch(unsigned char line_h,unsigned char line_l,unsigned char row)
{
write_cmd(0x00,0x20);write_data(0x00,row);
write_cmd(0x00,0x21);write_data(line_h,line_l);
write_cmd(0x00,0x22);
write_data(0xf8,0x1f);
}
//=======================================================
void ads7846_initial(void)
{
ads7846_cs=0;
ads7846_din=0;
ads7846_clk=0;
write_ads7846(0xa0);//#10100000B
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
while(ads7846_busy);
write_ads7846(0xe0);//#11100000B
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
while(ads7846_busy);
write_ads7846(0xf0);//#11110000B
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
while(ads7846_busy);
write_ads7846(0x80);//#10000000B
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
while(ads7846_busy);
ads7846_cs=1;
}
/*===========================================================*/
unsigned int read_ads7846_x(void)
{
unsigned int x;
unsigned char i;
bit dat;
x=0;
ads7846_cs=0;
write_ads7846(0xd0);//#0x90
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
dat=ads7846_dout;
x=x|dat;
while(ads7846_busy);
for(i=0;i<11;i++)
{
x=x<<1;
ads7846_clk=1;
ads7846_clk=0;
dat=ads7846_dout;
x=x|dat;
}
ads7846_cs=1;
return x;
}
/*===========================================================*/
unsigned int read_ads7846_y(void)
{
unsigned int y;
unsigned char i;
bit dat;
y=0;
ads7846_cs=0;
write_ads7846(0x90);//#0xd0
ads7846_din=0;
ads7846_clk=1;
ads7846_clk=0;
dat=ads7846_dout;
y=y|dat;
while(ads7846_busy);
for(i=0;i<11;i++)
{
y=y<<1;
ads7846_clk=1;
ads7846_clk=0;
dat=ads7846_dout;
y=y|dat;
}
ads7846_cs=1;
return y;
}
/*===========================================================*/
void write_ads7846(unsigned char x)
{
unsigned char i;
bit dat;
ads7846_cs=0;
ads7846_din=0;
ads7846_clk=0;
for(i=0;i<8;i++)
{
dat=x&0x80;
ads7846_din=dat;
ads7846_clk=1;
ads7846_clk=0;
x=x<<1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -