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

📄 lcdlib.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
📖 第 1 页 / 共 3 页
字号:
			LCD_DSERI_Hi;
		else
			LCD_DSERI_Lo;

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

		if(j != 0)
		{
			LCD_DCLK_Lo;
			delayLoop(DELAY);			// CLOCK = Low
		}
	}

	LCD_DSERI_Lo;							// Data Low
	delayLoop(DELAY);

	LCD_DEN_Hi; 		//	EN = High
	delayLoop(DELAY);

	LCD_DEN_Lo; 		//	EN = Low
	delayLoop(DELAY);

	
	LCD_DCLK_Lo;
	delayLoop(DELAY);			// CLOCK = Low
	
	for (j = 7; j >= 0; j--)
	{

		if ((data >> j) & 0x0001)	// DATA HIGH or LOW
			LCD_DSERI_Hi;
		else
			LCD_DSERI_Lo;

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

		if(j != 0)
		{
			LCD_DCLK_Lo;
			delayLoop(DELAY);			// CLOCK = Low
		}
	}

	LCD_DEN_Hi; 				// EN = High
	delayLoop(DELAY);

}

//040616
//for LTS222H1 2.2inch QVGA LCD
void Init_240X320_AMLCD(void)
{
	// Start LCD clock 		max : 6MHz
	//Reg16_OPCLK_DIV = 0x0202;	 			// 6.4
	SET_LCD_DATA;

	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;
	LCD_RESET_Hi;
	

	//LCD CLK is about 4.5Mhz
	rLCDCON1=(rLCDCON1&~(0x3f<<13))|(0xa<<13);
	rLCDCON1|=(1<<19);

//	LCD_RESET_Lo;
//	delayLoop(5000);
	
	
//	Reg16_OPCLK_DIV = 0x0203;	 			// 4.8
//	Reg16_VDISPCNT	 |= 0x0010;   //OSD_ON

	// LCD Power enable again
	//LCD_POWER_Hi;	 ????????????????????????
//	delayLoop(5000);
	
	// LCD Reset high
	LCD_RESET_Hi;	  
//	delayLoop(50000);

	///////////////////////////////////////////////////////////////////
	// Power Setting Function 1
	//////////////////////////////////////////////////////////////////
	Write_AMLCD(0x22,0x01);	 // PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
	Write_AMLCD(0x03,0x01);	 // RESET REGISTER


	///////////////////////////////////////////////////////////////////
	// Initializing Function 1
	///////////////////////////////////////////////////////////////////
	Write_AMLCD(0x00,0x0a);	 // CONTROL REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x01,0x10);	 // CONTROL REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x02,0x00);	 // RGB INTERFACE REGISTER
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x05,0x00);	 // DATA ACCESS CONTROL REGISTER
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x0D,0x00);	 // 

	// delay about 40ms
	delayLoop(700000);					


	///////////////////////////////////////////////////////////////////
	// Initializing Function 2
	///////////////////////////////////////////////////////////////////
	Write_AMLCD(0x0E,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x0F,0x00);	 // 
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x10,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x11,0x00);  //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x12,0x00);  //
	delayLoop(5);  // delay about 300ns 
	Write_AMLCD(0x13,0x00);  // DISPLAY SIZE CONTROL REGISTER
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x14,0x00);  // PARTIAL-OFF AREA COLOR REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x15,0x00);  // PARTIAL-OFF AREA COLOR REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x16,0x00);  // PARTIAL 1 DISPLAY AREA STARTING REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x17,0x00);  // PARTIAL 1 DISPLAY AREA STARTING REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x34,0x01);  // POWER SUPPLY SYSTEM CONTROL REGISTER 14
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x35,0x00);  // POWER SUPPLY SYSTEM CONTROL REGISTER 7

	// delay about 30ms
	delayLoop(500000);


	////////////////////////////////////////////////////////////////////
	// Initializing Function 3
	////////////////////////////////////////////////////////////////////
	Write_AMLCD(0x8D,0x01);	 //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x8B,0x28);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x4B,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x4C,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x4D,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x4E,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x4F,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x50,0x00);	 //  ID CODE REGISTER 2 						Check it out

	// delay about 50 us
	delayLoop(900);

	Write_AMLCD(0x86,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x87,0x26);	 //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x88,0x02);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x89,0x05);	 //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x33,0x01);	 //  POWER SUPPLY SYSTEM CONTROL REGISTER 13
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x37,0x06);	 //  POWER SUPPLY SYSTEM CONTROL REGISTER 12		Check it out

	// delay about 50 us
	delayLoop(900);

	Write_AMLCD(0x76,0x00);	 //  SCROLL AREA START REGISTER 2

	// delay about 30ms
	delayLoop(500000);


	/////////////////////////////////////////////////////////////////////
	// Initializing Function 4
	/////////////////////////////////////////////////////////////////////
	Write_AMLCD(0x42,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x43,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x44,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x45,0x00);  //  CALIBRATION REGISTER
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x46,0xef);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x47,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x48,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x49,0x01);  //  ID CODE REGISTER 1							check it out

	// delay about 50 us
	delayLoop(900);

	Write_AMLCD(0x4A,0x3f);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x3C,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x3D,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x3E,0x01);  //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x3F,0x3f);  //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x40,0x03);  //	horizontal back porch	
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x41,0x04);  //	vertical back porch
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x8F,0x05);  //

	// delay about 30ms
	delayLoop(500000);

	/////////////////////////////////////////////////////////////////////
	// Initializing Function 5
	/////////////////////////////////////////////////////////////////////
	Write_AMLCD(0x90,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x91,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x92,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x93,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x94,0x33);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x95,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x96,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x97,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x98,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x99,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x9A,0x33);  //  
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x9B,0x33);  //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x9C,0x33);  //
	delayLoop(5);  // delay about 300ns
	Write_AMLCD(0x9D,0x81);  //	

	// delay about 30ms
	delayLoop(500000);


	/////////////////////////////////////////////////////////////////////
	// Power Setting 2
	/////////////////////////////////////////////////////////////////////
	Write_AMLCD(0x1D,0x08);  //

	// delay about 30ms
	delayLoop(500000);
	  
	Write_AMLCD(0x23,0x00);  //  PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
	// delay about 50 us
	delayLoop(900);
	Write_AMLCD(0x24,0x94);  //  POWER SUPPLY SYSTEM CONTROL REGISTER 1
	// delay about 50 us
	delayLoop(900);
	Write_AMLCD(0x25,0x6f);  //  POWER SUPPLY SYSTEM CONTROL REGISTER 2

	// delay about 40ms
	delayLoop(700000);					


	/////////////////////////////////////////////////////////////////////
	// Power Setting 3
	/////////////////////////////////////////////////////////////////////
	Write_AMLCD(0x28,0x1e);  // 
	Write_AMLCD(0x1A,0x00);  // 
	Write_AMLCD(0x21,0x10);  //  PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2 
	Write_AMLCD(0x18,0x25);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1

	// delay about 40ms
	delayLoop(700000);					

	Write_AMLCD(0x19,0x48);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 2
	Write_AMLCD(0x18,0xe5);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1

	// delay about 10ms
	delayLoop(200000);					

	Write_AMLCD(0x18,0xF7);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1 

	// delay about 40ms
	delayLoop(700000);					

	Write_AMLCD(0x1B,0x07);  // org
//	Write_AMLCD(0x1B,0x01);  // 90 rotate
//	Write_AMLCD(0x1B,0x02);  // 90 rotate
//	Write_AMLCD(0x1B,0x03);  // 90 rotate


	// delay about 80ms
	delayLoop(1400000); 				

	Write_AMLCD(0x1F,0x6b);  // org
//	Write_AMLCD(0x1F,0x5E);  // 90 rotate

	Write_AMLCD(0x20,0x51);  //  org, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
//	Write_AMLCD(0x20,0x5F);  //  90 rotate, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1

	Write_AMLCD(0x1E,0xc1);  // 

	// delay about 10ms
	delayLoop(200000);					

	Write_AMLCD(0x21,0x00);  //  PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2 
	Write_AMLCD(0x3B,0x01);  // 

	// delay about 20ms
	delayLoop(400000);					

	Write_AMLCD(0x00,0x20);  //  CONTROL REGISTER 1
	Write_AMLCD(0x02,0x01);  //  RGB INTERFACE REGISTER

	// delay about 10ms
	delayLoop(200000);					
	
//	Reg16_OPCLK_DIV = 0x0201;	 			// 6.4

}


//->
//added by Sue.060322

#define LCD_DELAY_1MS	8000*5

void Write_LDI_LTV350(int address, int data)
{
 	unsigned char	dev_id_code=0x1D;
    int     j;
	unsigned char DELAY=50;
	
	LCD_DEN_Hi; 		//	EN = High					CS high
	LCD_DCLK_Hi;							//	SCL High
	LCD_DSERI_Hi;							//	Data Low

	delayLoop(DELAY);

	LCD_DEN_Lo; 		//	EN = Low				CS Low
	delayLoop(DELAY);
	
	for (j = 5; j >= 0; j--)
	{	
		LCD_DCLK_Lo;							//	SCL Low

		if ((dev_id_code >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_DSERI_Hi;		
		}
		else
		{
			LCD_DSERI_Lo;
		}

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

	}
	
	// RS = "0" : index data
	LCD_DCLK_Lo;			// CLOCK = Low
	LCD_DSERI_Lo;
	delayLoop(DELAY);
	LCD_DCLK_Hi;			// CLOCK = High
	delayLoop(DELAY);

	// Write
	LCD_DCLK_Lo;			// CLOCK = Low
	LCD_DSERI_Lo;
	delayLoop(DELAY);
	LCD_DCLK_Hi;			// CLOCK = High
	delayLoop(DELAY);

	for (j = 15; j >= 0; j--)
	{
		LCD_DCLK_Lo;							//	SCL Low

		if ((address >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_DSERI_Hi;		
		}
		else
		{
			LCD_DSERI_Lo;
		}

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

	}
	LCD_DSERI_Hi;
	delayLoop(DELAY);
	
	LCD_DEN_Hi; 				// EN = High
	delayLoop(DELAY*10);

	LCD_DEN_Lo; 		//	EN = Low				CS Low
	delayLoop(DELAY);
	
	for (j = 5; j >= 0; j--)
	{	
		LCD_DCLK_Lo;							//	SCL Low

		if ((dev_id_code >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_DSERI_Hi;		
		}
		else
		{
			LCD_DSERI_Lo;
		}

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

	}
	
	// RS = "1" instruction data
	LCD_DCLK_Lo;			// CLOCK = Low
	LCD_DSERI_Hi;
	delayLoop(DELAY);
	LCD_DCLK_Hi;			// CLOCK = High
	delayLoop(DELAY);

	// Write
	LCD_DCLK_Lo;			// CLOCK = Low
	LCD_DSERI_Lo;
	delayLoop(DELAY);
	LCD_DCLK_Hi;			// CLOCK = High
	delayLoop(DELAY);

	for (j = 15; j >= 0; j--)
	{
		LCD_DCLK_Lo;							//	SCL Low

		if ((data >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_DSERI_Hi;		
		}
		else
		{
			LCD_DSERI_Lo;
		}

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

	}
	
	LCD_DEN_Hi; 				// EN = High
	delayLoop(DELAY);

}

void Init_320X240_AMLCD(void)
{
	// Start LCD clock 		max : 6MHz
	//Reg16_OPCLK_DIV = 0x0202;	 			// 6.4
	SET_LCD_DATA;

	delayLoop(LCD_DELAY_1MS*10);	

	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;

	///////////////////////////////////////////////////////////////////
	// Init_Lcd_Function
	//////////////////////////////////////////////////////////////////
	Write_LDI_LTV350(0x01,0x001d);	
    Write_LDI_LTV350(0x02,0x0000);    
    Write_LDI_LTV350(0x03,0x0000);    
    Write_LDI_LTV350(0x04,0x0000);
    Write_LDI_LTV350(0x05,0x50a3);
    Write_LDI_LTV350(0x06,0x0000);
    Write_LDI_LTV350(0x07,0x0000);
    Write_LDI_LTV350(0x08,0x0000);
   	Write_LDI_LTV350(0x09,0x0000);
   	Write_LDI_LTV350(0x0a,0x0000);
   	Write_LDI_LTV350(0x10,0x0000);
   	Write_LDI_LTV350(0x11,0x0000);
   	Write_LDI_LTV350(0x12,0x0000);
   	Write_LDI_LTV350(0x13,0x0000);
   	Write_LDI_LTV350(0x14,0x0000);
   	Write_LDI_LTV350(0x15,0x0000);
   	Write_LDI_LTV350(0x16,0x0000);
   	Write_LDI_LTV350(0x17,0x0000);
   	Write_LDI_LTV350(0x18,0x0000);
   	Write_LDI_LTV350(0x19,0x0000);

	///////////////////////////////////////////////////////////////////
	// Power On Reset Display off State
	//////////////////////////////////////////////////////////////////
	//Write_LDI_LTV350(0x09,0x0000);

	// delay about 10ms
	delayLoop(LCD_DELAY_1MS*10);
	
	///////////////////////////////////////////////////////////////////
	// Power Setting Function 1
	//////////////////////////////////////////////////////////////////
	Write_LDI_LTV350(0x09,0x4055);
	Write_LDI_LTV350(0x0a,0x0000);
	
	// delay about 10ms
	delayLoop(LCD_DELAY_1MS*10);
	
	/////////////////////////////////////////////////////////////////////
	// Power Setting 2
	/////////////////////////////////////////////////////////////////////
	Write_LDI_LTV350(0x0a,0x2000);
	
	// delay about 50ms
	delayLoop(LCD_DELAY_1MS*50);
	
	///////////////////////////////////////////////////////////////////
	// Instruction Setting
	///////////////////////////////////////////////////////////////////
	Write_LDI_LTV350(0x01,0x409d);
	Write_LDI_LTV350(0x02,0x0204);
	Write_LDI_LTV350(0x03,0x2100);
	Write_LDI_LTV350(0x04,0x1000);
	Write_LDI_LTV350(0x05,0x5003);
	Write_LDI_LTV350(0x06,0x0009);	//vbp
	Write_LDI_LTV350(0x07,0x000f);	//hbp
	Write_LDI_LTV350(0x08,0x0800);
	Write_LDI_LTV350(0x10,0x0000);
	Write_LDI_LTV350(0x11,0x0000);
	Write_LDI_LTV350(0x12,0x000f);
	Write_LDI_LTV350(0x13,0x1f00);
	Write_LDI_LTV350(0x14,0x0000);
	Write_LDI_LTV350(0x15,0x0000);
	Write_LDI_LTV350(0x16,0x0000);
	Write_LDI_LTV350(0x17,0x0000);
	Write_LDI_LTV350(0x18,0x0000);
	Write_LDI_LTV350(0x19,0x0000);
	
	
	// delay about 2 frames
	delayLoop(LCD_DELAY_1MS*50);
	

	///////////////////////////////////////////////////////////////////
	// Display On Sequence
	///////////////////////////////////////////////////////////////////
	Write_LDI_LTV350(0x09,0x4a55);
	Write_LDI_LTV350(0x0a,0x2000);	

}
//<-

// only for serial LCD backlight on SMDKboard
void LcdBacklightOnOff(unsigned char onoff) // pwm range :100 ~ 400Hz, level : 0 ~ 255
{
	rGPICON = (rGPICON&~(0xf))|(9); // TOUT0 : output, TOUT1 : function
	rGPIPU = (1); // disable internal pull-up
	if(onoff == 0)
		rGPIDAT &= ~(1);
	else
		rGPIDAT |= (1);

	rTCFG0 |= (0xff); // prescaler 255
	rTCFG1 = rTCFG1 & ~(0xf<<4) | (1<<4); // MUX1 divider is 1/4
	// @PCLK=50MHz, PCLK/255/4 = 49.016KHz (timer 1 clock : 20us)
	rTCNTB1 = 256; // clock freq. of TOUT1 is 192.21Hz
	rTCMPB1 = onoff; // 255 is the best brightness
	rTCON |= (2<<8); // update
	rTCON = rTCON & ~(0xf<<8) |(9<<8); // start timer, auto-reload
}

⌨️ 快捷键说明

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