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

📄 s6d0118.c

📁 s6d0118 c program test r g b white grp
💻 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 DataPort  P1
#define ContPort  P3

sbit _RST = P3^0;
sbit _CS1 = P3^5;
sbit  RS  = P3^4;  
sbit _WR  = P3^3;
sbit _RD  = P3^1;  

//define control key
sbit	STOP = P3^2;
sbit	CONU = P3^6;
sbit	COND = P3^7;

sbit  PA0=P2^0;
sbit  PA1=P2^1;
sbit  PA2=P2^2;
sbit  FlashChip1Select=P2^3;   //flash memory chip 1
sbit  LBLPowerOn=P2^4;         //backlight DC/DC on 

unsigned int xdata *ptr;


//unsigned char contrast=114;
int Rate=1,contrast=1, frequency=6300;
unsigned char KeyValue;
long time ;
int cycle;
int stand=1000;

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


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

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

    _nop_();
    RS=1;_RD=1;
    P1=set_db;
    _WR=0;
    delay(0);
    _WR=1;
} 


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

    //INDEX Register set
    _nop_();
    RS=0;_RD=1;
    P1=index;
    _WR=0;
    delay(0);
    _WR=1;

    _nop_();
    RS=1;_RD=1;
    P1=set_db>>8;
    _WR=0;
    delay(0);
    _WR=1;

    _nop_();
    RS=1;_RD=1;
    P1=set_db;
    _WR=0;
    delay(0);
    _WR=1;	
}

void LCD_Reset(void)
{
    _CS1=0;
    _RST=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,0x071d);//Driver Output Control  071b
	                          //0000 0xxx 000x xxxx---0000 0001 0001 1101
                              //SM=1,GS=0,SS=1,NL[4:0]=1 0101---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,0x1030);//Entry Mode
    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,0x0000);
    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(0x41,0x0000);//
	LCD_CmdWrite(0x42,0xe50a);//Screen Driving Position
	LCD_CmdWrite(0x43,0x0000);//Screen Driving Position
	LCD_CmdWrite(0x44,0xaf00);//Horzontal RAM Address Position:176
	LCD_CmdWrite(0x45,0xe50a);//Vertical Address Position:220
	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,0x0a00); //0000 0000 0000 0000
   LCD_Index(0x22);
}

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

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 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 char page,seg;
	unsigned int pointer;

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

    LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
    LCD_Index(0x22);

	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++)
	  {  
	    LCD_DataWrite(ptr[pointer++]);
	  }	       
   } 
 //  FlashChip1Select=1;                                                                                                                                                                
 }

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

    LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
    LCD_Index(0x22);

	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
{
    
    unsigned char page,seg;

	LCD_CmdWrite(0x21,0x0a00); //
    LCD_Index(0x22);
 
	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
{
    
    unsigned char page,seg;
 
	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)
{
    unsigned char col,seg;

	LCD_CmdWrite(0x21,0x0a00); //
    LCD_Index(0x22);

	for(col=0;col<DisplayCol;col++)
		{
		for(seg=0;seg<DisplaySeg;seg++)
			{
			 switch((col/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)
{
	unsigned char col,seg;

	LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
    LCD_Index(0x22);

	for(col=0;col<DisplayCol;col++)
		{
		for(seg=0;seg<DisplaySeg;seg++)
			{
			 switch((col/16+col/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<8;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;  //blue 
			case 4: Checker(0xf800,0xf800);break;  // red
            case 5: WriteGrid1(); break;           //Gird
			case 6: WriteBar1(); break;            //bar
			//case 7: WriteBmp(0); break;            //bitbmp
			//case 8: test();break;                  //
			case 7: WriteBoundary(); Power_Off(); break;//boundary
 	    }
	   delay(200);
   }
}

⌨️ 快捷键说明

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