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

📄 lcddriver.c

📁 ARM7(s3c44b0)开发平台LCD驱动程序
💻 C
字号:
/*
;************************************************************************************************************
;*				        				北京精仪达盛科技有限公司
;*                                     	     研    发    部
;*
;*                                 	     http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : target.c	
;* 文件功能 : 该文件为S3C44B0硬件平台配置具体函数的初始化。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
//#include <stdarg.h>
////#include <stdio.h>

#include "LCDdriver.h"

/*
*************************************************************************************************************
-    配置参数
*************************************************************************************************************
*/
#define 	M5D(n) 		((n) & 0x1fffff)

#define 	SCR_XSIZE 	(320)  
#define 	SCR_YSIZE 	(240)

#define 	LCD_XSIZE 	(320)
#define 	LCD_YSIZE 	(240)

#define 	HOZVAL_COLOR	(LCD_XSIZE*3/8-1)
#define 	LINEVAL			(LCD_YSIZE-1)
#define 	MVAL			(13)
#define 	CLKVAL_COLOR 	(5) 					//60Mhz 
#define 	MVAL_USED 		(0)

#define 	BYTESPERLINE 	(LCD_XSIZE)
#define 	XY2OFF(x,y) 	(tOff)((tOff)y*(tOff)BYTESPERLINE + (x))

typedef unsigned long 	tOff;

#define     READ_MEM(Off, Data)    Data = LCD_READ_MEM(Off)
#define     WRITE_MEM(Off, Data)   LCD_WRITE_MEM(Off, Data)

#define  SETPIXEL(x, y, c)  SetPixel(x, y, c)
#define  GETPIXEL(x, y)     GetPixelIndex(x, y)

extern U16 LCD_COLOR;
/*
*************************************************************************************************************
- 函数名称 : U16 LCD_READ_MEM(U32 off)
- 函数说明 : 针对硬件的读点函数
- 输入参数 : x,y,c
- 输出参数 : 无
*************************************************************************************************************
*/

U16 LCD_READ_MEM(U32 off)
{
	return (*((U8*)Video_StartBuffer + (off)));
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_WRITE_MEM( U32 off,U8 Data)
- 函数说明 : 针对硬件的画点函数
- 输入参数 : x,y,c
- 输出参数 : 无
*************************************************************************************************************
*/	
void LCD_WRITE_MEM( U32 off,U8 Data)
{
	(* ((U8*)Video_StartBuffer + (off)) ) = Data;
}

/*
*************************************************************************************************************
- 函数名称 : static void SetPixel(U16 x,U16 y,int c)
- 函数说明 : 针对硬件的画点函数
- 输入参数 : x,y,c
- 输出参数 : 无
*************************************************************************************************************
*/
static void SetPixel(U16 x, U16 y, U32 c) 
{
  	tOff Off = XY2OFF(x,y);
    WRITE_MEM(Off, c);
}

/*
*************************************************************************************************************
- 函数名称 : U32 GetPixelIndex(U16 x, U16 y)
- 函数说明 : 针对硬件的得到点的颜色的函数
- 输入参数 : x,y
- 输出参数 : color
*************************************************************************************************************
*/
U32 GetPixelIndex(U16 x, U16 y) 
{
  	U32 col;
  	U8 Data;
  	tOff Off = XY2OFF(x,y);
  	READ_MEM(Off,Data);
    col = Data;
  	return col;
}

/*
*************************************************************************************************************
- 函数名称 : U16  LCD_Init(U8 Lcd_Bpp)  
- 函数说明 : LCD硬件初始化函数
- 输入参数 : 
- 输出参数 : 无
*************************************************************************************************************
*/
U16  LCD_Init(U8 Lcd_Bpp) 
{
	switch(Lcd_Bpp)
    {
    	case 8:
			// disable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk,
			rLCDCON1=(0)|(2<<5)|(MVAL_USED<<7)|(0x1<<8)|(0x1<<10)|(CLKVAL_COLOR<<12);
			//LINEBLANK=10 (without any calculation)
			rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);
				
			// 256-color, LCDBANK, LCDBASEU     
			rLCDSADDR1= (0x3<<27) | ( ((U32)Video_StartBuffer>>22)<<21 )| M5D((U32)Video_StartBuffer>>1);
	 		rLCDSADDR2= M5D((((U32)Video_StartBuffer + (SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21)|1<<29;
			rLCDSADDR3= (LCD_XSIZE/2) | ( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 );

			rREDLUT  =0xfdb96420;
			rGREENLUT=0xfdb96420;
			rBLUELUT =0xfb40;

			rDITHMODE=0x0;
	
			rDP1_2 =0xa5a5;      
			rDP4_7 =0xba5da65;
			rDP3_5 =0xa5a5f;
			rDP2_3 =0xd6b;
			rDP5_7 =0xeb7b5ed;
			rDP3_4 =0x7dbe;
			rDP4_5 =0x7ebdf;
			rDP6_7 =0x7fdfbfe;
			rDITHMODE=0x12210;
			// enable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk, 	
			rLCDCON1=(1)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);
			break;
			
 		default:
		    return 1;
	}	
	return 0;    
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_DrawPixel  (U16 x, U16 y) 
- 函数说明 : 画点函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_DrawPixel  (U16 x, U16 y) 
{
   	SETPIXEL(x, y, LCD_COLOR);
}
	
/*
*************************************************************************************************************
- 函数名称 : U32 LCD_GetPixel(U16 x, U16 y) 
- 函数说明 : 得到点值的函数
- 输入参数 : x,y
- 输出参数 : colof
*************************************************************************************************************
*/	
U32 LCD_GetPixel(U16 x, U16 y) 
{
	return GETPIXEL(x,y);
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_DrawHLine  (U16 x0, U16 y,  U16 x1) 
- 函数说明 : 画水平线函数
- 输入参数 : x,y,x1
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_DrawHLine  (U16 x0, U16 y0,  U16 x1) 
{
    while (x0 <= x1) 
    {
     	SETPIXEL(x0, y0, LCD_COLOR);
     	x0++;
    }
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_DrawVLine  (U16 x, U16 y0,  U16 y1) 
- 函数说明 : 画竖直线函数
- 输入参数 : x,y,x1
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_DrawVLine(U16 x0, U16 y0,  U16 y1) 
{
	while (y0 <= y1) 
 	{
		SETPIXEL(x0, y0, LCD_COLOR);
 		y0++;
 	}
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_FillRect(U16 x0, U16 y0, U16 x1, U16 y1)
- 函数说明 : 填充矩形函数
- 输入参数 : x0,y0,x1,y1
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_FillRect(U16 x0, U16 y0, U16 x1, U16 y1) 
{
	for (; y0 <= y1; y0++) 
	{
		 LCD_DrawHLine(x0,y0, x1);
	}
}

/*
*************************************************************************************************************
- 函数名称 : DrawBitLine1BPP
- 函数说明 : 绘制位图函数
- 输入参数 : x0,y0,x1,y1
- 输出参数 : 无
*************************************************************************************************************
*/	
static void  DrawBitLine1BPP(U16 x, U16 y, U8 const*p, U16 Diff, U16 xsize, const U16*pTrans) 
{
  	U16 pixels;
  	U32 Index0 = *(pTrans + 0);
  	U32 Index1 = LCD_COLOR;

  	pixels = *p;
  	
   	switch (Diff&7) 
    {
    	case 0:   
     		goto WriteBit0;
    	case 1:   
      		goto WriteBit1;
    	case 2:
      		goto WriteBit2;
    	case 3:
      		goto WriteBit3;
    	case 4:
     		goto WriteBit4;
    	case 5:   
     		goto WriteBit5;
    	case 6:   
     		goto WriteBit6;
    	case 7:   
     		goto WriteBit7;
    }

  WriteBit0:
    SETPIXEL(x+0, y, (pixels&(1<<7)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit1:
    SETPIXEL(x+1, y, (pixels&(1<<6)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit2:
    SETPIXEL(x+2, y, (pixels&(1<<5)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit3:
    SETPIXEL(x+3, y, (pixels&(1<<4)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit4:
    SETPIXEL(x+4, y, (pixels&(1<<3)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit5:
    SETPIXEL(x+5, y, (pixels&(1<<2)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit6:
    SETPIXEL(x+6, y, (pixels&(1<<1)) ? Index1 : Index0);
    if (!--xsize)
      return;
  WriteBit7:
    SETPIXEL(x+7, y, (pixels&(1<<0)) ? Index1 : Index0);
    if (!--xsize)
      return;
    x+=8;
    pixels = *(++p);
    goto WriteBit0;

}

/*
*************************************************************************************************************
- 函数名称 : LCD_L0_DrawBitmap
- 函数说明 : 绘制位图函数
- 输入参数 : 
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_L0_DrawBitmap(U16 x0, U16 y0,U16 xsize, U16 ysize,U16 BitsPerPixel,U16 BytesPerLine,
							const U8* pData, U16 Diff,
                       		const U16* pTrans)
{
  	U16 i;

  	switch (BitsPerPixel) 
  	{
  		case 1:
    
      		for (i=0; i<ysize; i++) 
      		{
        		DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans);
        		pData += BytesPerLine;
      		}
       		break;
  	}
}
/*
*****************************************************************************************************************
**                                                  结束文件                                                   **
*****************************************************************************************************************
*/

⌨️ 快捷键说明

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