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

📄 ssd1289.c

📁 TFT液晶控制器ssd1289z初始化文档
💻 C
字号:
/*============================================= */
/* IC:  ST7787                                 */
/*  8080 series   TFT 176RGB*220 Dots  8BIT    */
/*

/*  2006/7/13    He Jianghuai
/*================================================*/
#include "reg51.h"
#include "stdio.h"
#include "intrins.h"
//#include "map.h"

#define WORD unsigned int
#define BYTE unsigned char

#define DB_L P0
#define DB_H P1
/***********************************************/
sbit touch =P3^0;
sbit test =P3^1;
sbit CSB =P3^1;
sbit RSB =P3^6;
sbit WRB =P3^3;
sbit RDB =P3^5;
sbit res=P3^4;
/*IC ADS7843 脚定义*/
sbit DOUT=P2^3 ;
sbit BUSY=P2^4 ;
sbit DIN=P2^5 ;
sbit DCLK=P2^7 ;
sbit CS2=P2^6;
/*********************************************/
void delay(unsigned int tt);//廷时子程序
void delay1(unsigned int tt);//廷时子程序
void delayms(unsigned int delay);
void WriteCOM(BYTE DBH,BYTE DBL);
void WriteDAT(BYTE DBH,BYTE DBL);
void Initial_IC(void);
void convert(void);
unsigned long int XTP=0,XTP1,YTP=0,YTP1;
unsigned long int XLCD=0,YLCD=0,XLCDH,YLCDH;

/*****************************************************/
void delay(unsigned int tt)
{
 while(tt>0)
 {
  tt--;
 }
}
/*****************************************************/
void delay1(unsigned int tt)
{
 while(tt>0)
 {
  tt--;
  convert();
 }
}
/*****************************************************/
void delayms(unsigned int delay)
{

  unsigned int i, j;

  for (i=0; i<delay; i++)
    for (j=0; j<100; j++)
    {
      ;
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////

void WriteCOM(BYTE DBH,BYTE DBL)
{
    CSB=0;
    RSB=0;
    RDB=1;
    WRB=1;
	DB_H=DBH;
	DB_L=DBL;
	WRB=0;
	WRB=1;
	RSB=1;
	CSB=1;
}

void WriteDAT(BYTE DBH,BYTE DBL)
{
    CSB=0;
    RSB=1;
    RDB=1;
    WRB=1;
    DB_H=DBH;
	DB_L=DBL;
	WRB=0;
	WRB=1;
	RSB=0;
	CSB=1;
}
//----------------------initialize IC----------------------------//

void Initial_IC(void)
{
  WriteCOM(0x00,0x10);       //Sleep Mode
  WriteDAT(0x00,0x00);       //SLP=0,the driver leaves the sleep mode
  delayms(5);

  WriteCOM(0x00,0x00);       //Oscillator turn on
  WriteDAT(0x00,0x01);       //OSCEN=1
  delayms(5);

  WriteCOM(0x00,0x01);       //Driver Output Control
  WriteDAT(0x2b,0x3f);       //default=xx3fh

  WriteCOM(0x00,0x02);       //LCD Driving-Waveform Control
  WriteDAT(0x06,0x00);       //default=0000h

  WriteCOM(0x00,0x03);       //Power Control 1
  WriteDAT(0x66,0x64);       //default=6664h

//  WriteCOM(0x00,0x05);       //Compare register
//  WriteDAT(0x00,0x00);       //default=0000h

//  WriteCOM(0x00,0x06);       //Compare register
//  WriteDAT(0x00,0x00);       //default=0000h

  WriteCOM(0x00,0x0b);       //Frame Cycle Control **
  WriteDAT(0x53,0x05);       //default=5308h    5305h=75Hz    5308h=65Hz

  WriteCOM(0x00,0x0c);       //Power Control 2
  WriteDAT(0x00,0x04);       //default=0004h

  WriteCOM(0x00,0x0d);       //Power Control 3
  WriteDAT(0x00,0x09);       //default=0009h

  WriteCOM(0x00,0x0e);       //Power Control 4
  WriteDAT(0x32,0x00);       //default=3200h

  WriteCOM(0x00,0x0f);       //Gate Scan Position
  WriteDAT(0x00,0x00);       //default=0000h

  WriteCOM(0x00,0x11);       //Entry Mode
  WriteDAT(0x68,0x30);       //default=6830h

//  WriteCOM(0x00,0x16);       //Horizontal Porch
//  WriteDAT(0xef,0x1c);       //default=ef1ch
 
//  WriteCOM(0x00,0x17);       //Vertical Porch
//  WriteDAT(0x01,0x03);       //default=0103h

  WriteCOM(0x00,0x1e);       //Power Control 5
  WriteDAT(0x00,0x29);       //default=0029h

//  WriteCOM(0x00,0x23);       //RAM Write Data Mask
//  WriteDAT(0x00,0x00);       //default=0000h
//  WriteCOM(0x00,0x24);       //RAM Write Data Mask
//  WriteDAT(0x00,0x00);       //default=0000h

  WriteCOM(0x00,0x25);       //Frame Frequency Control
  WriteDAT(0x80,0x00);       //default=8000h   OSC=510K

  //Gamma_control
  WriteCOM(0x00,0x30);	
  WriteDAT(0x07,0x07);
  WriteCOM(0x00,0x31);	
  WriteDAT(0x02,0x04);
  WriteCOM(0x00,0x32);	
  WriteDAT(0x02,0x04);
  WriteCOM(0x00,0x33);	
  WriteDAT(0x05,0x02);
  WriteCOM(0x00,0x34);	
  WriteDAT(0x05,0x07);
  WriteCOM(0x00,0x35);	
  WriteDAT(0x02,0x04);
  WriteCOM(0x00,0x36);	
  WriteDAT(0x02,0x04);
  WriteCOM(0x00,0x37);	
  WriteDAT(0x05,0x02);
  WriteCOM(0x00,0x3a);	
  WriteDAT(0x03,0x02);
  WriteCOM(0x00,0x3b);	
  WriteDAT(0x03,0x02);

//  WriteCOM(0x00,0x41);       //Vertical Scroll Control
//  WriteDAT(0x00,0x00);       //default=0000h
//  WriteCOM(0x00,0x42);       //Vertical Scroll Control
//  WriteDAT(0x00,0x00);       //default=0000h

  //Horizontal RAM Address Position
  WriteCOM(0x00,0x44);       //
  WriteDAT(0xef,0x00);       //default=ef00h

  //Vertical RAM Address Position
  WriteCOM(0x00,0x45);       //
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x46);       //
  WriteDAT(0x01,0x3f);

/*
  //1st Screen Driving Position
  WriteCOM(0x00,0x48);
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x49);
  WriteDAT(0x00,0x00);

  //2nd Screen Driving Position
  WriteCOM(0x00,0x4a);
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x4b);
  WriteDAT(0x00,0x00);
*/

  //RAM Address Set
  WriteCOM(0x00,0x4e);       //RAM Address X
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x4f);       //RAM Address Y
  WriteDAT(0x00,0x00);

  //Display Control
  WriteCOM(0x00,0x07);       //Display Control
  WriteDAT(0x00,0x00);       //default=0000h
  delayms(5);
  WriteCOM(0x00,0x07);       //Display Control
  WriteDAT(0x00,0x01);       //default=0000h
  delayms(5);
  WriteCOM(0x00,0x07);       //Display Control
  WriteDAT(0x00,0x21);       //default=0000h
  delayms(5);
  WriteCOM(0x00,0x07);       //Display Control
  WriteDAT(0x00,0x23);       //default=0000h
  delayms(5);
  WriteCOM(0x00,0x07);       //Display Control
  WriteDAT(0x00,0x33);       //default=0000h
  delayms(5);
}
//////////////////////////////////////////////////////
void Set_address()
{
  WriteCOM(0x00,0x4e);       //
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x4f);       //
  WriteDAT(0x00,0x00);

  WriteCOM(0x00,0x44);       //
  WriteDAT(0xef,0x00);
  WriteCOM(0x00,0x45);       //
  WriteDAT(0x00,0x00);
  WriteCOM(0x00,0x46);       //
  WriteDAT(0x01,0x3f);

  WriteCOM(0x00,0x22);
}
////////////////////////////////////////////////////////////////
void Show_RGB(BYTE dat1,BYTE dat2)//65K color
{
  BYTE i;
  WORD j;

  Set_address();//Set start address


  for(i=0;i<240;i++)
  {
    for (j=0;j<320;j++)
    {
    	WriteDAT(dat1,dat2);

    }
  }

  delayms(50);
}

////////////////////////////////////////////////////////////////////////////////////////////
code unsigned char colorbar[16]=
{0xff,0xff,0xf8,0x00,0x07,0xe0,0x00,0x1f,0x07,0xff,0xf8,0x1f,0xff,0xe0,0x00,0x00
};
void Show_Colorbar(void)
{
	WORD i;
	BYTE j,k;

	Set_address();//Set start address

	CSB=0;
	for(i=0;i<320;i++)
	{
		for(j=0;j<8;j++)
		{
			for(k=0;k<30;k++)
			{
				DB_H=colorbar[j*2];
//				WRB=0;
//				WRB=1;
				DB_L=colorbar[j*2+1];
				WRB=0;
				WRB=1;
			}
		}
	}
	CSB=1;
	delayms(50);
}


 /************************************************/
void grayscale(void)
{
unsigned char data c,s;
  Set_address();//Set start address
   for(c=0;c<160;c++)//128/2个点=64
	     {
	        for(s=0;s<15;s++){WriteDAT(0xff,0xff);}
                for(s=0;s<15;s++){WriteDAT(0xef,0x7d);}
                for(s=0;s<15;s++){WriteDAT(0xd6,0x9a);}
                for(s=0;s<15;s++){WriteDAT(0xc6,0x18);}                
                for(s=0;s<15;s++){WriteDAT(0xb5,0x96);}
                for(s=0;s<15;s++){WriteDAT(0xa5,0x14);}
                for(s=0;s<15;s++){WriteDAT(0x94,0x92);}
                for(s=0;s<15;s++){WriteDAT(0x84,0x10);}
                for(s=0;s<15;s++){WriteDAT(0x73,0x8e);}
                for(s=0;s<15;s++){WriteDAT(0x63,0x0c);}
                for(s=0;s<15;s++){WriteDAT(0x52,0x8a);}
                for(s=0;s<15;s++){WriteDAT(0x42,0x08);}
                for(s=0;s<15;s++){WriteDAT(0x31,0x86);}
                for(s=0;s<15;s++){WriteDAT(0x21,0x04);}
                for(s=0;s<15;s++){WriteDAT(0x10,0x82);}
                for(s=0;s<15;s++){WriteDAT(0x00,0x00);}
	     }
     for(c=0;c<40;c++)
      {
                for(s=0;s<120;s++){WriteDAT(0xff,0xff);}
                for(s=0;s<120;s++){WriteDAT(0x00,0x00);}
       }
       for(c=0;c<80;c++)
      {

                for(s=0;s<30;s++) {WriteDAT(0xff,0xff);}
                for(s=0;s<60;s++) {WriteDAT(0xd6,0x9a);}
                for(s=0;s<30;s++) {WriteDAT(0xff,0xff);}
                for(s=0;s<30;s++) {WriteDAT(0x00,0x00);}
                for(s=0;s<60;s++) {WriteDAT(0x21,0x04);}
                for(s=0;s<30;s++) {WriteDAT(0x00,0x00);}
      }
       for(c=0;c<40;c++)
      {
                for(s=0;s<120;s++){WriteDAT(0xff,0xff);}
                for(s=0;s<120;s++){WriteDAT(0x00,0x00);}
       }


delay1(600);//廷时大约2S
//delay1(60000);
}
/************************************************/
void grayscale_16(void)
{
unsigned int c,s;
  Set_address();//Set start address
   for(c=0;c<320;c++)//128/2个点=64
	     {
	        for(s=0;s<15;s++){WriteDAT(0xff,0xff);}
                for(s=0;s<15;s++){WriteDAT(0xef,0x7d);}
                for(s=0;s<15;s++){WriteDAT(0xd6,0x9a);}
                for(s=0;s<15;s++){WriteDAT(0xc6,0x18);}   
                for(s=0;s<15;s++){WriteDAT(0xb5,0x96);}
                for(s=0;s<15;s++){WriteDAT(0xa5,0x14);}
                for(s=0;s<15;s++){WriteDAT(0x94,0x92);}
                for(s=0;s<15;s++){WriteDAT(0x84,0x10);}
                for(s=0;s<15;s++){WriteDAT(0x73,0x8e);}
                for(s=0;s<15;s++){WriteDAT(0x63,0x0c);}
                for(s=0;s<15;s++){WriteDAT(0x52,0x8a);}
                for(s=0;s<15;s++){WriteDAT(0x42,0x08);}
                for(s=0;s<15;s++){WriteDAT(0x31,0x86);}
                for(s=0;s<15;s++){WriteDAT(0x21,0x04);}
                for(s=0;s<15;s++){WriteDAT(0x10,0x82);}
                for(s=0;s<15;s++){WriteDAT(0x00,0x00);}
	     }
delay1(600);//廷时大约2S
//delay1(60000);
}

/********************************************************************/
void displayshow1(void)
{
 unsigned char data i,c,s;
  Set_address();//Set start address
  for(i=0;i<160;i++)
  {
  for(c=0;c<1;c++)
  {
  for(s=0;s<120;s++) {WriteDAT(0xff,0xff);
                      WriteDAT(0x00,0x00);}
   }
  for(c=0;c<1;c++)
  {
  for(s=0;s<120;s++) {WriteDAT(0x00,0x00);
                      WriteDAT(0xff,0xff);}
   }
   }
delay1(600);//廷时大约2S
//delay1(60000);
}
/********************************************************************/
void displayshow(void)
{
  unsigned char data i,c,s;
  Set_address();//Set start address

  for(i=0;i<160;i++)
  {
  for(c=0;c<1;c++)
  {
  for(s=0;s<120;s++) {WriteDAT(0x00,0x00);
                      WriteDAT(0xff,0xff);}
   }
  for(c=0;c<1;c++)
  {
  for(s=0;s<120;s++) {WriteDAT(0xff,0xff);
                      WriteDAT(0x00,0x00);}
   }
   }
delay1(600);//廷时大约2S
//delay1(60000);

}

/******************************************************/
void displaypic(unsigned char d1,unsigned char d2)
{
 unsigned int c,s;
  Set_address();//Set start address
 for(c=0;c<320;c++)
	{    for(s=0;s<240;s++)
	     {
            WriteDAT(d1,d2);
             }
        }
while(1)
{
convert();
}
}
//*****************************************************************/
/*
void picture(void)//PICTURE

{
  BYTE i,j;

  Set_address();//Set start address

 for(i=0;i<10;i++)
  {
    for (j=0;j<320;j++)
    {
     WriteDAT(0xff,0xff);
     
    }
	}

 for(i=0;i<100;i++)
  {
    for (j=0;j<320;j++)
    {
     WriteDAT(gImage_240100[640*i+2*j],gImage_240100[640*i+2*j+1]);
     
    }
	}
  for(i=0;i<100;i++)
  {
    for (j=0;j<320;j++)
    {
     WriteDAT(gImage_240100[640*i+2*j],gImage_240100[640*i+2*j+1]);
     
    }
	}
  for(i=0;i<100;i++)
  {
    for (j=0;j<320;j++)
    {
     WriteDAT(gImage_240100[640*i+2*j],gImage_240100[640*i+2*j+1]);
     
    }
	}

 for(i=0;i<10;i++)
  {
    for (j=0;j<320;j++)
    {
     WriteDAT(0xff,0xff);
     
    }
	}

}
*/
//*****************************************************************/
void testpic(void)
{
grayscale();//OTP TEST
grayscale_16();
      Show_RGB(0xf8,0x00);   //Display Red for 65K
      Show_RGB(0x07,0xe0);   //Display Green for 65K
      Show_RGB(0x00,0x1f);   //Display Blue for 65K
      Show_RGB(0x00,0x00);   //Display black FULL
     
      Show_Colorbar();
displayshow1();//SHOW
displayshow();
//picture();
Show_RGB(0xff,0xff);   //Display white FULL   
}
/*****************************************************///SPI开始

void start()
{
    DCLK=0 ;
    CS2=1 ;
    DIN=1 ;
    DCLK=1 ;
    CS2=0 ;
}

//*****************************************************//SPI写数据
WriteCharTo7843(unsigned char num)
{
    unsigned char count=0 ;
    DCLK=0 ;
    for(count=0;count<8;count++)
    {
        num<<=1 ;
        DIN=CY ;
        DCLK=0 ;
        _nop_();
        _nop_();
        _nop_();
        //上升沿有效
        DCLK=1 ;
        _nop_();
        _nop_();
        _nop_();
    }
}

//*****************************************************//SPI 读数据
long ReadFromCharFrom7843()
{
    unsigned char count=0 ;
    unsigned int Num=0 ;
    for(count=0;count<12;count++)
    {
        Num<<=1 ;
        DCLK=1 ;
        _nop_();
        _nop_();
        _nop_();
        //下降沿有效
        DCLK=0 ;
        _nop_();
        _nop_();
        _nop_();
        if(DOUT)Num++;
    }
    return(Num);
}


/*****************************************************************/
void convert(void)
{ if(touch==0)
  displaypic(0xff,0xff);    //white FULL
  if(test==0)
  testpic();

 }
 //*****************************************************************/
main()
{
IT0=0;
IT1=0;
EX0=1;
EA=1;
res=1;
delay(400);
res=0;
delay(400);
res=1;
delay(400);
Initial_IC();
for(;;)
{
testpic();
}
}
/*****************************************************外部中断0 用来接受键盘发来的数据*/
void ZhongDuan()interrupt 0
{
    delay(700);//中断后延时以消除抖动,使得采样数据更准确
    start();    //启动SPI

    WriteCharTo7843(0x90);//送控制字 10010000 即用差分方式读X坐标
    DCLK=1 ;
    DCLK=0 ;
    YTP=-ReadFromCharFrom7843();    //读X轴坐标

    WriteCharTo7843(0xD0);//送控制字 11010000 即用差分方式读Y坐标
    DCLK=1 ;
    DCLK=0 ;
    XTP=-ReadFromCharFrom7843();    //读Y轴坐标
    CS2=1 ;

     XTP1=  (XTP-250)*240;
     XLCD=  XTP1/3500-100;     //触摸点X坐标
     YTP1=  (YTP-50)*300;
     YLCD=  YTP1/3500-50; //触摸点Y坐标  06.11.22
     XLCDH=XLCD>>8;
     YLCDH=YLCD>>8;
     WriteCOM(0x00,0x4e);
     WriteDAT(XLCDH,XLCD);

    // WriteDAT(XLCDH,XLCD);

     WriteCOM(0x00,0x4f);
     WriteDAT(YLCDH,YLCD);

    // WriteDAT(YLCDH,YLCD);

     WriteCOM(0x00,0x22);
     WriteDAT(0xf8,0x00);
    


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -