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

📄 s6d0118.c

📁 2.0TFT屏S6D0118driver的驱动程序及其点屏的资料
💻 C
字号:
/****************************************************************************
 Controller IC:S6D0118,Hannstar 2.0 TFT
 Paraller type:8 bit-8080 interface
 
 Resolutions:  176*220 pixels
 P0         : DB0---DB7===>D10-D17
 P1         : P1.4 P1.3 P1.2 P1.1 P1.0
	           RES  CS1  RS  /WR    RD
 Modified date: 2006.09.24
****************************************************************************/
#include <reg52.h>
#include<intrins.h>

#define DisplayCol  220   //160
#define DisplaySeg  176   //128

#define StartCol  30 //
#define StartSeg  24 //

#define DataPort  P0
#define ContPort  P1

sbit _RST = P1^4;
sbit _CS1 = P1^3;
sbit  RS  = P1^2;  
sbit _WR  = P1^1;
sbit _RD  = P1^0;  

//define control key
sbit	STOP = P1^7;
sbit	CONU = P1^5;
sbit	COND = P1^6;

sbit  PA0=P3^0;
sbit  PA1=P3^1;
sbit  PA2=P3^2;
sbit  FlashChip1Select=P3^3;   //flash memory chip 1

sbit  LBLPowerOn=P3^4;         //backlight DC/DC on 

unsigned int xdata *ptr;
unsigned int page,seg;

void delay(unsigned int param)
{
   int i;
   for(;param>0;param--)
	for(i=0;i<960;i++);
}


void LCD_Index(unsigned char index)
{
    RS=0;
    DataPort=index;
    _WR=0;
   delay(0);
   _WR=1;
} 

void LCD_DataWrite(unsigned int set_db)
{
    RS=1;
    DataPort=set_db>>8;
    _WR=0;
    delay(0);
    _WR=1;

    DataPort=set_db;
    _WR=0;
    delay(0);
    _WR=1;
} 


void LCD_CmdWrite(unsigned char index,unsigned int set_db)
{

   LCD_Index(index);
   LCD_DataWrite(set_db);
}

void LCD_Reset(void)
{
    _CS1=0;
    _RST=1;
	_RD=1;

    delay(10);
	_RST=0;
	delay(60);
	_RST=1;
	delay(10);
}

void Power_set(void)    //Power setting
{
   LCD_CmdWrite(0x00,0x0001); //osc start ---by YY 2006-9-28
   delay(40);
   //LCD_CmdWrite(0x12,0x00b3); //
   LCD_CmdWrite(0x11,0x3000); //power control:PON=0,,PON1=0,AON=0
   LCD_CmdWrite(0x14,0x1c12); //power control 
   //LCD_CmdWrite(0x0b,0x0000); //Frame cycle control

   LCD_CmdWrite(0x10,0x2900); //power control 
   delay(50);

   LCD_CmdWrite(0x13,0x0040); //power control :PON=1,PON1=0,AON=0
   delay(10);
   LCD_CmdWrite(0x13,0x0060); //power control :PON=1,PON1=1,AON=0
   delay(10);
   LCD_CmdWrite(0x13,0x0070); //power control :PON=1,PON1=1,AON=1
   delay(100);
   LCD_CmdWrite(0x11,0x3004); //power control:PON=0,,PON1=0,AON=0
   LCD_CmdWrite(0x10,0x2d00); //power control
   delay(20);
}


void LCD_Initial1(void)       //initial code 1
{
    LCD_CmdWrite(0x01,0x011b);//Driver Output Control
	                          //0000 0xxx 000x xxxx---0000 0011 0001 1101
                              //SM=0,GS=1,SS=1,NL[4:0]=1 1101---176*220 pixels

	LCD_CmdWrite(0x02,0x0700);//LCD-Driving Waveform Control
	                          //0000 xxxx 00xx xxxx---0000 0100 0000 0000
                              //FLD[1:0]=01,B/C=0,EOR=0,NW[5:0]=000000

	LCD_CmdWrite(0x03,0x0030);//Entry Mode-0000 0000 0011 0000
    LCD_CmdWrite(0x07,0x0004); //GON=0,DTE=0,D[1:0]=01
    LCD_CmdWrite(0x08,0x0808);//display control---blink control 
	LCD_CmdWrite(0x09,0x0000);
    LCD_CmdWrite(0x0b,0xf000);
    LCD_CmdWrite(0x0c,0x0000);//display interface selection:16-bit RGB 
}

void Gamma_Control(void)    //Gamma control
{
   //MP[5:0]([2:0]):gamma adjustment register for positive polarity output
    
    LCD_CmdWrite(0x30,0x0102);   //Gamma Control
	LCD_CmdWrite(0x31,0x0707);   //Gamma Control
	LCD_CmdWrite(0x32,0x0101);   //Gamma Control
	LCD_CmdWrite(0x33,0x0200);   //Gamma Control

	LCD_CmdWrite(0x34,0x0506);   //Gamma Control
	LCD_CmdWrite(0x35,0x0707);   //Gamma Control
	LCD_CmdWrite(0x36,0x0304);   //Gamma Control
	LCD_CmdWrite(0x37,0x0200);   //Gamma Control

	LCD_CmdWrite(0x38,0x1802);   //Gamma Control
	LCD_CmdWrite(0x39,0x0800);   //Gamma Control
}


void LCD_Initial2(void)       //initial code 2
{
    LCD_CmdWrite(0x40,0x0000);//Gate Scan Position

	LCD_CmdWrite(0x42,0xdb00);//Screen Driving Position---db00
	LCD_CmdWrite(0x43,0x0000);//Screen Driving Position
	LCD_CmdWrite(0x44,0xaf00);//Horzontal RAM Address Position:176---
	LCD_CmdWrite(0x45,0xdb00);//Vertical Address Position:220---db00
	delay(10);

    //LCD_CmdWrite(0x61,0x0018);//Oscillator control
	//LCD_CmdWrite(0x69,0x0000);//DC-DC control 
	//LCD_CmdWrite(0x70,0x0000);//source period setting
	//LCD_CmdWrite(0x71,0x0000);//gate period setting 
}


void Display_ON(void)  //display on 
{
   LCD_CmdWrite(0x07,0x0014); //GON=0,DTE=0,D[1:0]=01
   delay(2);
   LCD_CmdWrite(0x07,0x0016); //GON=1,DTE=0,D[1:0]=01
   delay(40);
   LCD_CmdWrite(0x07,0x0017); //GON=1,DTE=0,D[1:0]=11
   delay(40);
  
   //display on status
   LCD_CmdWrite(0x21,0x0000); //0000 0000 0000 0000
   LCD_Index(0x22);
}

void Power_Off(void)  //Power off 
{
   LCD_CmdWrite(0x07,0x0016); 
   delay(40);
   LCD_CmdWrite(0x07,0x0000); 

   LCD_CmdWrite(0x10,0x0000); 
   LCD_CmdWrite(0x14,0x0000); 
   LCD_CmdWrite(0x11,0x0000); 
   LCD_CmdWrite(0x13,0x0060); 
   delay(10);
   LCD_CmdWrite(0x13,0x0040); 
   delay(10);
   LCD_CmdWrite(0x13,0x0000);
}

/*

void Display_Off(void)  //display off
{
   LCD_CmdWrite(0x07,0x0016); 
   delay(40);
   LCD_CmdWrite(0x07,0x0000); 
}

void Standby_on(void)  //standby mode on
{
   LCD_CmdWrite(0x10,0x0001); 
}

void Standby_Off(void)  //standby mode off
{
   LCD_CmdWrite(0x00,0x0001); 
   delay(10);
   LCD_CmdWrite(0x10,0x0000); 
}

void Sleep_on(void)  //sleep mode on
{
   LCD_CmdWrite(0x10,0x0002); 
}

void Sleep_Off(void)  //sleep mode off
{
   LCD_CmdWrite(0x10,0x0000); 
}

*/
//----------------------------------------------------------------------
void WriteBmp(unsigned char pages)
{ 
	unsigned int pointer;

	FlashChip1Select= 0;//chip selected
    
	pointer= 0;

	switch(pages)
	{
		case 0 :PA0 = 0;PA1 = 0;PA2 = 0;break;
		case 1 :PA0 = 1;PA1 = 0;PA2 = 0;break;
		case 2 :PA0 = 0;PA1 = 1;PA2 = 0;break;
		case 3 :PA0 = 1;PA1 = 1;PA2 = 0;break;
		case 4 :PA0 = 0;PA1 = 0;PA2 = 1;break;
		case 5 :PA0 = 1;PA1 = 0;PA2 = 1;break;
		case 6 :PA0 = 0;PA1 = 1;PA2 = 1;break;
		case 7 :PA0 = 1;PA1 = 1;PA2 = 1;break;
	}
		  
   for(page=0;page<DisplayCol;page++)
   {
	  for(seg=0;seg<DisplaySeg;seg++)
	  {  
	    if((page>=StartCol)&&(page<(StartCol+160))&&(seg>=StartSeg)&&(seg<(StartSeg+128)))
		{
		 LCD_DataWrite(ptr[pointer++]);
		}
		else
		{
          LCD_DataWrite(0xf800);
		}
	  }	       
   } 
   FlashChip1Select=1;                                                                                                                                                                
 }

void Checker(unsigned int param1,unsigned int param2) //Full on,off,checkerboard,bar
{

    for(page=0;page<DisplayCol;page++)
	{
		for(seg=0;seg<DisplaySeg;seg++)
		{
		   if(seg%2) 
		   {
		     LCD_DataWrite(param1);
		   }
            else 
			{
			  LCD_DataWrite(param2);
    		}
		}
	}
}

void WriteBoundary(void)  //write boundary
{
	for(page=0;page<DisplayCol;page++)
	{
		for(seg=0;seg<DisplaySeg;seg++)
		 {
		
			 if (seg==0||seg==(DisplaySeg-1)) 
			   {
			     LCD_DataWrite(0xffff);
				 }
               else if (page==0) 
			   {
			     LCD_DataWrite(0xffff);
				 }
                else if (page==(DisplayCol-1)) 
				{
				  LCD_DataWrite(0xffff);  //
				  }
                 else 
				 {
				   LCD_DataWrite(0x0000);
				   }
		 }
    }
}

void test(void)  //test
{
	for(page=0;page<DisplayCol;page++)
	{
		for(seg=0;seg<DisplaySeg;seg++)
		 {
                 if (page<3) 
				   {
				     LCD_DataWrite(0xffff);
					 delay(10);
				   }
                 else 
				     LCD_DataWrite(0x0000);
		 }
    }
}

void WriteGrid1(void)
{
	for(page=0;page<DisplayCol;page++)
		{
		for(seg=0;seg<DisplaySeg;seg++)
			{
			 switch((page/16+seg/16)%3)
             {
               case 0: LCD_DataWrite(0x001f);break;  //red
               case 1: LCD_DataWrite(0x07e0);break;  //green
               case 2: LCD_DataWrite(0xf800);break;  //blue
              }
			}
		}
}

void WriteBar1(void)
{

	for(page=0;page<DisplayCol;page++)
		{
		for(seg=0;seg<DisplaySeg;seg++)
			{
			 switch((page/16+page/16)%3)
             {
               case 0: LCD_DataWrite(0x001f);break;  //red
               case 1: LCD_DataWrite(0x07e0);break;  //green
               case 2: LCD_DataWrite(0xf800);break;  //blue
              }
			}
		}
}

//-----------------------------------------------------------------------------

 void main(void)
{   

   unsigned int step=0;
   
   delay(10); 

   LCD_Reset(); 
   Power_set();
   LCD_Initial1();
   LCD_Initial2();
   Gamma_Control();
   //LCD_Initial2();
   Display_ON();

	for(step=0;step<10;step++)	
	{
		switch(step)
		{
			case 0: Checker(0xffff,0xffff);break;  //all on 
			case 1: Checker(0x0000,0x0000);break;  //all off 
			case 2: Checker(0x07e0,0x07e0);break;  //green
            case 3: Checker(0x001f,0x001f);break;  //red 
			case 4: Checker(0xf800,0xf800);break;  //blue
            case 5: WriteGrid1(); break;           //Gird
			case 6: WriteBar1(); break;            //bar
			case 7: WriteBmp(0); break;            //bitbmp
			case 8: WriteBmp(1); break;                  //
			case 9: WriteBoundary();// Power_Off();
			step=0; break;//boundary
 	    }
	   delay(200);
   }
}

⌨️ 快捷键说明

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