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

📄 displaylib.c

📁 三星2443芯片
💻 C
📖 第 1 页 / 共 5 页
字号:
//   4 I 1
//  --+--   <-8 octants  mathematical cordinate
//   5 I 8
//   6I7
void LCD_Line(int32 x1,int32 y1,int32 x2,int32 y2,int32 color)
{
	int32 dx,dy,e;
	dx=x2-x1; 
	dy=y2-y1;
    
	if(dx>=0)
	{
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 1/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 2/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 8/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else		// 7/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1+=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
	else //dx<0
	{
		dx=-dx;		//dx=abs(dx)
		if(dy >= 0) // dy>=0
		{
			if(dx>=dy) // 4/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1+=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 3/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   // dy<0
		{
			dy=-dy;   // dy=abs(dy)

			if(dx>=dy) // 5/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					PutPixel(x1,y1,color);
					if(e>0){y1-=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else		// 6/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					PutPixel(x1,y1,color);
					if(e>0){x1-=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
}


void LCD_ClearScr(uint32 c)
{	
	int32 i,j;

	for(j=0;j<screen_height;j++)
		for(i=0;i<screen_width;i++)
				PutPixel(i,j,c);      
}


void lputs(uint32 x, uint32 y, uint32 c, char *str)
{
	int i,j,k;
	int oneLine;

	for(i=0;i<strlen(str);i++)
	{
		for(j=0; j<16; j++)
		{
			if ((str[i]>=0x20)&&(str[i]<0x80))
				oneLine=chr_font8X16[str[i]-0x20][j];
			else
				oneLine=0;

			for(k=0;k<8;k++)
			{
				if(oneLine&(1<<k))
					PutPixel(x+7-k,y+j,c);
			}
		}
		x+=8;
	}
}

void lprintf(uint32 x, uint32 y, uint32 c, const char *fmt,...)
{
	va_list ap;
	char string[256];

	va_start(ap,fmt);
	vsprintf(string,fmt,ap);
	lputs(x,y,c,string);
	va_end(ap);
}

//
//===================================================

//===================================================
// functions related to LDI initialization
//
void Init_LDI(void)
{
	printf("\nSelect(LCD type)\n");
	printf("1: LTS222-240x320(2.22\") RGB Parallel I/F     \n2: LTV350-320x240(3.50\")		\n3: LTS222-240x320(2.22\") RGB Serial I/F");
	lcd_type = GetIntNum();
	if((lcd_type<1)||(lcd_type>3))
	{
		printf("\n\nYou entered wrong number\n");
		return;
	}

	switch(lcd_type)
	{
		case LCD_MODULE_LTS222:
			lcd_horizon_value = LTS222_HOZVAL;
			lcd_line_value = LTS222_LINEVAL;
			lcd_vbpd = LTS222_VBPD;
			lcd_vfpd = LTS222_VFPD;
			lcd_vspw = LTS222_VSPW;
			lcd_hbpd = LTS222_HBPD;
			lcd_hfpd = LTS222_HFPD;
			lcd_hspw = LTS222_HSPW;
			lcd_frame_rate = LTS222_FRAME_RATE;
			InitLDI_LTS222();
			break;
				
		case LCD_MODULE_LTV350:
			lcd_horizon_value = LTV350_HOZVAL;
			lcd_line_value = LTV350_LINEVAL;
			lcd_vbpd = LTV350_VBPD;
			lcd_vfpd = LTV350_VFPD;
			lcd_vspw = LTV350_VSPW;
			lcd_hbpd = LTV350_HBPD;
			lcd_hfpd = LTV350_HFPD;
			lcd_hspw = LTV350_HSPW;
			lcd_frame_rate = LTV350_FRAME_RATE;
			InitLDI_LTV350();
			break;

		case LCD_MODULE_LTS222_SERIAL:
			lcd_horizon_value = LTS222_HOZVAL_SERIAL;
			lcd_line_value = LTS222_LINEVAL_SERIAL;
			lcd_vbpd = LTS222_VBPD_SERIAL;
			lcd_vfpd = LTS222_VFPD_SERIAL;
			lcd_vspw = LTS222_VSPW_SERIAL;
			lcd_hbpd = LTS222_HBPD_SERIAL;
			lcd_hfpd = LTS222_HFPD_SERIAL;
			lcd_hspw = LTS222_HSPW_SERIAL;
			lcd_frame_rate = LTS222_FRAME_RATE;
			InitLDI_LTS222_SERIAL();
			break;
			
		default:
			break;
	}
	printf("LDI Initialization is finished...\n\n");	
}


void Init_LDI_CPUIF(void)
{
	printf("\nSelect(LCD type)\n\n     1: LTS222-240x320(2.22\") CPU I/F\n");
	lcd_type = GetIntNum();
	if((lcd_type<1)||(lcd_type>3))
	{
		printf("\n\nYou entered wrong number\n");
		return;
	}

	switch(lcd_type)
	{
		case LCD_MODULE_LTS222_CPUIF:
			lcd_horizon_value = LTS222_HOZVAL;
			lcd_line_value = LTS222_LINEVAL;
			lcd_cs_setup = LTS222_CS_SETUP;
			lcd_wr_setup = LTS222_WR_SETUP;
			lcd_wr_act = LTS222_WR_ACT;
			lcd_wr_hold = LTS222_WR_HOLD;
			lcd_frame_rate = LTS222_FRAME_RATE;
			InitLDI_LTS222_CPUIF();
			break;
			
		default:
			break;
	}
	printf("LDI Initialization is finished...\n\n");	
}


void Temp_forDebug(uint32 i,uint32 j)
{
	uint8 ch=0;
	printf(" * Write_LDI(0x%02x, 0x%04x) *\n",i,j);
	
	while(!ch)
		//ch = Uart_GetKey();
		
	if(ch=='x')
		debug_continue=FALSE;
}

void InitLDI_LTS222(void)
{

	//	LCD module reset
	rGPBDAT |= (1<<(LCD_nRESET));
	rGPBDAT &= ~(1<<(LCD_nRESET)); // goes to LOW
	//	delay about 5ms
	delayLoop(LCD_DELAY_1MS*10);	
	rGPBDAT |= (1<<(LCD_nRESET));  // goes to HIGH


	//	debug_continue = TRUE;
	debug_continue = FALSE;

	//	SET_CONFIG_PORT( spi1)
	rGPLCON &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
	rGPLCON |= (((1<<(LCD_DEN_BIT*2))) | ((1<<(LCD_DCLK_BIT*2))) | ((1<<(LCD_DSERI_BIT*2))));
	//	pull-up pull-down disable
	rGPLUDP &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
	rGPLUDP |= (((2<<(LCD_DEN_BIT*2))) | ((2<<(LCD_DCLK_BIT*2))) | ((2<<(LCD_DSERI_BIT*2))));


	// delay about 10ms
	delayLoop(LCD_DELAY_1MS*10);	

	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;


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


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

	// delay about 40ms
	delayLoop(LCD_DELAY_1MS*40);					


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

	// delay about 40ms
	delayLoop(LCD_DELAY_1MS*40);


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

	// delay about 50 us
	delayLoop(LCD_DELAY_50US);

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

	// delay about 50 us
	delayLoop(LCD_DELAY_50US);

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

	// delay about 40ms
	delayLoop(LCD_DELAY_1MS*40);


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

	// delay about 50 us
	delayLoop(LCD_DELAY_50US);

	Write_LDI_LTS222(0x4A,0x3f);  //  
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x3C,0x00);  //  
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x3D,0x00);  //  
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x3E,0x01);  //
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x3F,0x3f);  //
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x40,0x01);  //	horizontal back porch	 //050105 Boaz.Kim
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x41,0x0a);  //	horizontal back porch	//050105 Boaz.Kim
	delayLoop(LCD_DELAY_300NS);  // delay about 300ns
	Write_LDI_LTS222(0x8F,0x05);  //

	// delay about 40ms
	delayLoop(LCD_DELAY_1MS*40);

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

#if 1	
	Write_LDI_LTS222(0x9D,0x80);  //	16 or 18bit RGB
#else
	Write_LDI_LTS222(0x9D,0x81);  //	6bit RGB
#endif

	// delay about 40ms
	delayLoop(LCD_DELAY_1MS*40);

⌨️ 快捷键说明

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