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

📄 lcd.c

📁 2440超级bios(ads1.2 rvds2.2)通用
💻 C
字号:
/*
*******************************************************************************
* file name:	lcd.c
* description:	lcd driver
* author:		xzChen(chxzh123@163.com)
* QQ / msn:		36725175 / chxzh123@hotmail.com
*******************************************************************************
*/
#ifndef __LCD_C__
#define __LCD_C__

#include "Includes.h"

#if 	(LCD_TYPE == LTV350QVF04)
#define INDEX 1
#define INSTR 0

#define set_lcd_scl()	rGPCDAT	|=  (1 << 8)
#define clr_lcd_scl()	rGPCDAT	&= ~(1 << 8)
#define set_lcd_cs()	rGPDDAT	|=  (1 << 0)
#define clr_lcd_cs()	rGPDDAT	&= ~(1 << 0)
#define set_lcd_sda()	rGPCDAT	|=  (1 << 10)
#define clr_lcd_sda()	rGPCDAT	&= ~(1 << 10)
#define set_lcd_rst()	rGPDDAT	|=  (1 << 9)
#define clr_lcd_rst()	rGPDDAT	&= ~(1 << 9)

void SPI_Send(U08 type,U16 datas)
{
	U16 S_data;
	U08 i,orders;

	set_lcd_scl();
	set_lcd_sda();
	clr_lcd_cs();
    if(type)
    	orders = 0x74;
    else
    	orders = 0x76;
	for(i=0; i<8; i++)
	{
		clr_lcd_scl();
		if((orders&0x80) == 0x80)
			set_lcd_sda();
	    else 
			clr_lcd_sda();
	    Delay(140);
		set_lcd_scl();
    	orders <<= 1;
	} 
    S_data = datas;
    for(i=0; i<16; i++)
	{
		clr_lcd_scl();
   		if((S_data&0x8000)==0x8000)
			set_lcd_sda();
	    else 
			clr_lcd_sda();
	    Delay(140);
		set_lcd_scl();
	    S_data <<= 1;
	}
    Delay(140);
	set_lcd_cs();
	set_lcd_scl();
	set_lcd_sda();

	return;
}
void LCD_Write_Regdata(U16 reg,U16 datas)
{
	SPI_Send(INDEX,reg);
	SPI_Send(INSTR,datas);
}
void LCD_START(void)
{
	LCD_Write_Regdata(9,0); //power On reset display off state
	Delay(700);
	LCD_Write_Regdata(9,0x4000);
	LCD_Write_Regdata(0x0a,0x2000);
	LCD_Write_Regdata(9,0x4055);
	Delay(3500);
	LCD_Write_Regdata(1,0x409d);
	LCD_Write_Regdata(2,0x0204);
	LCD_Write_Regdata(3,0x0100);
	LCD_Write_Regdata(4,0x3000);
	LCD_Write_Regdata(5,0x4003);
	LCD_Write_Regdata(6,0x0020);
	LCD_Write_Regdata(7,0x0020);
	LCD_Write_Regdata(8,0x0c00);
	LCD_Write_Regdata(10,0x0103);
	LCD_Write_Regdata(11,0x0301);
	LCD_Write_Regdata(12,0x1f0f);
	LCD_Write_Regdata(13,0x1f0f);
	LCD_Write_Regdata(14,0x0707);
	LCD_Write_Regdata(15,0x0307);
	LCD_Write_Regdata(16,0x0707);
	LCD_Write_Regdata(17,0x0000);
	LCD_Write_Regdata(18,0x0004);
	LCD_Write_Regdata(19,0x0000);
	Delay(1400);

	LCD_Write_Regdata(9,0x4a55);
	LCD_Write_Regdata(5,0x5003);
}
#endif

void SPI_Init(void)
{
//nRST
	rGPDCON	&= ~(3 << 18);
	rGPDCON	|=  (1 << 18);
	rGPDDAT	&= ~(1 << 9);
#if 	(LCD_TYPE == LTV350QVF04)
//nCS
	rGPDCON	&= ~(3 << 0);
	rGPDCON	|=  (1 << 0);
	rGPDDAT	|=  (1 << 0);

//SCL
	rGPCCON	&= ~(3 << 16);
	rGPCCON	|=  (1 << 16);
	rGPCDAT	|=  (1 << 8);

//SDI
	rGPCCON	&= ~(3 << 20);
	rGPCCON	|=  (1 << 20);
	rGPCDAT	|=  (1 << 10);
#endif
	Delay(3500);
	rGPDDAT	|=  (1 << 9);
//	rGPDDAT	&= ~(1 << 9);
	Delay(1400);
#if 	(LCD_TYPE == LTV350QVF04)
	LCD_START();
#endif
	Delay(1400);
}
void lcd_init(void)
{
U32 i,j,times;
UNION tmp;
#if 	(LCD_TYPE == LTS350Q1)
	UartPutStr(SHL_PRT,"LCD LTS350Q1\r\n");
   	rTCONSEL 	= 	(rTCONSEL|(1<<4))&(~1);
#elif 	(LCD_TYPE == LTV350QVF04)
	UartPutStr(SHL_PRT,"LCD LTV350QVF04\r\n");
	rGPGCON	&= ~(3 << 8);		// Set LCD_PWREN as output
	rGPGCON	|=  (1 << 8);
	rGPGDAT	|=  (1 << 4);		// set GPG4 to enable LTC3440 LCD DCDC
// LCD VDEN
	rGPCCON	&= ~(3 << 8);
	rGPCCON	|=  (1 << 8);
	rGPCDAT	|=  (1 << 4);
// BL open
	rGPCCON	&= ~(3 << 12);		// Set LCD_PWREN as output
	rGPCCON	|=  (1 << 12);
	rGPCDAT	|=  (1 << 6);		// set GPC6 to enable LTC3440 LCD DCDC
	SPI_Init();
 	rTCONSEL	=	0;
 #elif 	(LCD_TYPE == PHE350Q1)
	rGPGCON	&= ~(3 << 8);		// Set LCD_PWREN as output
	rGPGCON	|=  (1 << 8);
	rGPGDAT	|=  (1 << 4);		// set GPG4 to enable LTC3440 LCD DCDC
// LCD VDEN
	rGPCCON	&= ~(3 << 8);
	rGPCCON	|=  (1 << 8);
	rGPCDAT	|=  (1 << 4);
// BL open
	rGPCCON	&= ~(3 << 12);		// Set LCD_PWREN as output
	rGPCCON	|=  (1 << 12);
	rGPCDAT	|=  (1 << 6);		// set GPC6 to enable LTC3440 LCD DCDC

	SPI_Init();
 	rTCONSEL	=	0;
#elif 	(LCD_TYPE == MT502TML8B)
	rGPGCON	&= ~(3 << 8);		// Set LCD_PWREN as output
	rGPGCON	|=  (1 << 8);
	rGPGDAT	|=  (1 << 4);		// set GPG4 to enable LTC3440 LCD DCDC
// LCD VDEN
	rGPCCON	&= ~(3 << 8);
	rGPCCON	|=  (1 << 8);
	rGPCDAT	|=  (1 << 4);
// BL open
	rGPCCON	&= ~(3 << 12);		// Set LCD_PWREN as output
	rGPCCON	|=  (1 << 12);
	rGPCDAT	|=  (1 << 6);		// set GPC6 to enable LTC3440 LCD DCDC

	SPI_Init();
	rTCONSEL	=	0;
 #elif 	(LCD_TYPE == PHE480272)
UartPutStr(SHL_PRT,"LCD PHE480272\r\n");
	rGPGCON	&= ~(3 << 8);		// Set LCD_PWREN as output
	rGPGCON	|=  (1 << 8);
	rGPGDAT	|=  (1 << 4);		// set GPG4 to enable LTC3440 LCD DCDC
// LCD VDEN
	rGPCCON	&= ~(3 << 8);
	rGPCCON	|=  (1 << 8);
	rGPCDAT	|=  (1 << 4);
//	rGPCDAT	&= ~(1 << 4);
// BL open
	rGPCCON	&= ~(3 << 12);		// Set LCD_PWREN as output
	rGPCCON	|=  (1 << 12);
	rGPCDAT	|=  (1 << 6);		// set GPC6 to enable LTC3440 LCD DCDC

	SPI_Init();
 	rTCONSEL	=	0;
#else
UartPutStr(SHL_PRT,"LCD error\r\n");
#endif
UartPutStr(SHL_PRT,"LCD test\r\n");
 	rLCDCON1   =	(CLKVAL			<<  8) |
					(MMODE			<<  7) |
					(PNRMODE		<<  5) |
					(BPPMODE		<<  1) |
					(0				<<  0) ;
 	rLCDCON2   =  	(VBPD			<< 24) |
					((LCD_YSIZE-1)	<< 14) |
					(VFPD			<<  6) |
					(VSPW			<<  0) ;
 	rLCDCON3   =  	(HBPD			<< 19) |
					((LCD_XSIZE-1)	<<  8) |
					(HFPD			<<  0) ;
 	rLCDCON4   =	(MVAL			<<  8) |
					(HSPW			<<  0) ;
 	rLCDCON5   =	(BPP24BL		<< 12) |
					(FRM565			<< 11) |
					(INVVCLK		<< 10) |
					(INVVLINE		<<  9) |
					(INVVFRAME		<<  8) |
					(INVVD			<<  7) |
					(INVVDEN		<<  6) |
					(INVPWREN		<<  5) |
					(INVENDLINE		<<  4) |
					(PWREN			<<  3) |
					(ENLEND			<<  2) |
					(BSWP			<<  1) |
					(HWSWP			<<  0) ;
	rLCDSADDR1	= 	(((U32)DispBuf >> 22) << 21) |
					M5D((U32)DispBuf >> 1);
	rLCDSADDR2	= 	M5D(((U32)DispBuf + (LCD_XSIZE * LCD_YSIZE * 4)) >> 1);
	rLCDSADDR3	= 	(((LCD_XSIZE*2 - LCD_XSIZE)/1) << 11) | (LCD_XSIZE/1);
	rLCDINTMSK |= 	(3);
	rTPAL		=	0x0;
	rLCDCON1   |=	1;
	clrdevice();
	set_backlight();
	rGPBDAT	&= ~(1 << 3);
//	gPrintf(10,10,dispclr,0,"123456");
//	while(1);
times = 0x0E000000;
//while(1)
//{
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_Welcome[i*2*320 + 4*j];
		tmp.B08[3] = gImage_Welcome[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_Welcome[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_Welcome[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
/*
Delay(times);
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_p1[i*2*320 + 4*j];
		tmp.B08[3] = gImage_p1[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_p1[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_p1[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_p1[i*2*320 + 4*j];
		tmp.B08[3] = gImage_p1[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_p1[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_p1[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
Delay(times);
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_p2[i*2*320 + 4*j];
		tmp.B08[3] = gImage_p2[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_p2[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_p2[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
Delay(times);
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_p3[i*2*320 + 4*j];
		tmp.B08[3] = gImage_p3[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_p3[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_p3[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
Delay(times);
for (i=0; i<240; i++)
{
	for (j=0; j<160; j++)
	{
		tmp.B08[2] = gImage_p4[i*2*320 + 4*j];
		tmp.B08[3] = gImage_p4[i*2*320 + 4*j+1];
		tmp.B08[0] = gImage_p4[i*2*320 + 4*j+2];
		tmp.B08[1] = gImage_p4[i*2*320 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
Delay(times);
//}
*/
/*
for (i=0; i<272; i++)
{
	for (j=0; j<240; j++)
	{
		tmp.B08[2] = gImage_Welcome[i*2*480 + 4*j];
		tmp.B08[3] = gImage_Welcome[i*2*480 + 4*j+1];
		tmp.B08[0] = gImage_Welcome[i*2*480 + 4*j+2];
		tmp.B08[1] = gImage_Welcome[i*2*480 + 4*j+3];
		DispBuf[i][j] = tmp.B32;
	}
}
	while(1);
*/
}
void put_pixel(U32 x,U32 y,U32 color,U08 type)
{
	UNION tmp;

    if ((x < SCR_XSIZE) && (y < SCR_YSIZE))
    {
		switch (type)
		{
			case 8:			//U08 data
#if (HWSWP == 1)
			DispBuf[(y)][(x)/2] =(DispBuf[(y)][x/2] &
					        	~(0xffff0000 >> ((1-(x)%2))*16) |
					        	((color & 0x0000ffff) << ((x)%2)*16));
#else
			DispBuf[(y)][(x)/2] =(DispBuf[(y)][x/2] &
					        	~(0xffff0000 >> ((x)%2)*16) |
						        (color & 0x0000ffff) << ((1-((x)%2))*16));
#endif
			break;
			case 16:		//U16 data
				tmp.B32 = DispBuf[y][x/2];
#if (HWSWP == 1)
				if (x%2)
					tmp.B16[0] = color & 0xffff;
				else
					tmp.B16[1] = color & 0xffff;
#else
				if (x%2)
					tmp.B16[1] = color & 0xffff;
				else
					tmp.B16[0] = color & 0xffff;
#endif
				DispBuf[y][x/2] = tmp.B32;
			break;
			case 32:		//U32 data
				DispBuf[y][x] = color;
			break;
			default:
			break;
		}
	}
}

#endif

⌨️ 快捷键说明

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