⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9320tp.txt

📁 液晶显示模块配触摸屏的一个参考驱动代码
💻 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 + -