lcd44b0.c

来自「开发环境:ADS 1.2 目标平台:ARM:S3C44B0 显示屏:tft」· C语言 代码 · 共 763 行 · 第 1/2 页

C
763
字号
/*---------------------------------------------------------文件	: LcdDrv1335.c日期	: 2005-6-24---------------------------------------------------------*/#include <stddef.h>           /* needed for definition of NULL */#include "LCD_Private.H"      /* private modul definitions & config */#include "GUI_Private.H"#include "GUIDebug.h"#include "LCD_0.h"            /* Defines for first display */#include "LCDConf.h"        #include <string.h>#include "const.h"#include "44b.h"#include "44blib.h"#include "def.h"#define LCDdat ((unsigned short *)0x04000000)unsigned int  addr56; /***********************************************************                                                       **           Defaults for configuration                  **                                                       ***********************************************************/#define   COLOR LCD_COLORINDEXU16 frameBuffer[SCR_YSIZE][SCR_XSIZE];//***************** write commad to register *************************void write_C(unsigned short reg_no,unsigned short para){    rPDATF&=~0x10;    LCDdat[reg_no/2]=para;    rPDATF|=0x10;}//***************** write data to memory ******************************/void write_D(unsigned short dat){    LCDdat[addr56]=dat;    addr56++;}void write_D1(unsigned short x,unsigned short y, unsigned short dat){    LCDdat[480*y+x]=dat;}void Init13506(void){    //reset=1;    //rPDATD|= 0x10;     //flash(5000);    //reset=0;    //rPDATD&=~0x10;     //flash(50000);    //reset=1;    //rPDATD|= 0x10;     //flash(5000);    write_C(0x0000,0x00); // Miscellaneous Register    write_C(0x01FC,0x00);   // Display Mode Register    write_C(0x0004,0x02);   // General IO Pins Configuration Register    write_C(0x0008,0x00);   // General IO Pins Control Register    write_C(0x0008,0x02);   // General IO Pins Control Register    write_C(0x0008,0x00);   // General IO Pins Control Register    write_C(0x0010,0x01);   // Memory Clock Configuration Register    write_C(0x0014,0x20);   // LCD Pixel Clock Configuration Register    write_C(0x0018,0x23);   // CRT/TV Pixel Clock Configuration Register    write_C(0x001C,0x23);   // MediaPlug Clock Configuration Register    write_C(0x001E,0x01);   // CPU To Memory Wait State Select Register    //write_C(0x0020,0x00);   // Memory Configuration Register    //write_C(0x0021,0x42);   // DRAM Refresh Rate Register    write_C(0x0020,0x4200);    //write_C(0x002A,0x12);   // DRAM Timings Control Register 0    //write_C(0x002B,0x02);   // DRAM Timings Control Register 1    write_C(0x002A,0x0212);    //------------------------------------------------------------    //write_C(0x0030,0x25);   // Panel Type Register    //write_C(0x0031,0x00);   // MOD Rate Register    write_C(0x0030,0x25);    write_C(0x0032,0x3b);   // LCD Horizontal Display Width Register    //write_C(0x0034,0x05);   // LCD Horizontal Non-Display Period Register    //write_C(0x0035,0x01);   // TFT FPLINE Start Position Register    write_C(0x0034,0x0105);    write_C(0x0036,0x03);   // TFT FPLINE Pulse Width Register    //write_C(0x0038,0x0f);   // LCD Vertical Display Height Register 0    //write_C(0x0039,0x01);   // LCD Vertical Display Height Register 1    write_C(0x0038,0x010f);    //write_C(0x003A,0x0b);   // LCD Vertical Non-Display Period Register    //write_C(0x003B,0x01);   // TFT FPFRAME Start Position Register    write_C(0x003A,0x010b);    write_C(0x003C,0x07);   // TFT FPFRAME Pulse Width Register    //------------------------------------------------------------    write_C(0x0040,0x05);   // LCD Display Mode Register    //write_C(0x0041,0x00);   // LCD Miscellaneous Register    write_C(0x0042,0x00);   // LCD Display Start Address Register 0    //write_C(0x0043,0x00);   // LCD Display Start Address Register 1    write_C(0x0044,0x00);   // LCD Display Start Address Register 2    //write_C(0x0046,0xe0);   // LCD Memory Address Offset Register 0    //write_C(0x0047,0x01);   // LCD Memory Address Offset Register 1    write_C(0x0046,480);    write_C(0x0048,0x00);   // LCD Pixel Panning Register    write_C(0x004A,0x00);   // LCD Display FIFO High Threshold Control Register    //write_C(0x004B,0x00);   // LCD Display FIFO Low Threshold Control Register    //------------------------------------------------------------------------   /*     write_C(0x0050,0x4F);   // CRT/TV Horizontal Display Width Register    write_C(0x0052,0x13);   // CRT/TV Horizontal Non-Display Period Register    write_C(0x0053,0x01);   // CRT/TV HRTC Start Position Register    write_C(0x0054,0x0B);   // CRT/TV HRTC Pulse Width Register    write_C(0x0056,0xDF);   // CRT/TV Vertical Display Height Register 0    write_C(0x0057,0x01);   // CRT/TV Vertical Display Height Register 1    write_C(0x0058,0x2B);   // CRT/TV Vertical Non-Display Period Register    write_C(0x0059,0x09);   // CRT/TV VRTC Start Position Register    write_C(0x005A,0x01);   // CRT/TV VRTC Pulse Width Register    write_C(0x005B,0x10);   // TV Output Control Register    write_C(0x0060,0x02);   // CRT/TV Display Mode Register    write_C(0x0062,0x00);   // CRT/TV Display Start Address Register 0    write_C(0x0063,0x00);   // CRT/TV Display Start Address Register 1    write_C(0x0064,0x00);   // CRT/TV Display Start Address Register 2    write_C(0x0066,0xA0);   // CRT/TV Memory Address Offset Register 0    write_C(0x0067,0x00);   // CRT/TV Memory Address Offset Register 1    write_C(0x0068,0x00);   // CRT/TV Pixel Panning Register    write_C(0x006A,0x00);   // CRT/TV Display FIFO High Threshold Control Register    write_C(0x006B,0x00);   // CRT/TV Display FIFO Low Threshold Control Register        write_C(0x0070,0x00);   // LCD Ink/Cursor Control Register    write_C(0x0071,0x01);   // LCD Ink/Cursor Start Address Register    write_C(0x0072,0x00);   // LCD Cursor X Position Register 0    write_C(0x0073,0x00);   // LCD Cursor X Position Register 1    write_C(0x0074,0x00);   // LCD Cursor Y Position Register 0    write_C(0x0075,0x00);   // LCD Cursor Y Position Register 1    write_C(0x0076,0x00);   // LCD Ink/Cursor Blue Color 0 Register    write_C(0x0077,0x00);   // LCD Ink/Cursor Green Color 0 Register    write_C(0x0078,0x00);   // LCD Ink/Cursor Red Color 0 Register    write_C(0x007A,0x1F);   // LCD Ink/Cursor Blue Color 1 Register    write_C(0x007B,0x3F);   // LCD Ink/Cursor Green Color 1 Register    write_C(0x007C,0x1F);   // LCD Ink/Cursor Red Color 1 Register    write_C(0x007E,0x00);   // LCD Ink/Cursor FIFO Threshold Register        write_C(0x0080,0x00);   // CRT/TV Ink/Cursor Control Register    write_C(0x0081,0x01);   // CRT/TV Ink/Cursor Start Address Register    write_C(0x0082,0x00);   // CRT/TV Cursor X Position Register 0    write_C(0x0083,0x00);   // CRT/TV Cursor X Position Register 1    write_C(0x0084,0x00);   // CRT/TV Cursor Y Position Register 0    write_C(0x0085,0x00);   // CRT/TV Cursor Y Position Register 1    write_C(0x0086,0x00);   // CRT/TV Ink/Cursor Blue Color 0 Register    write_C(0x0087,0x00);   // CRT/TV Ink/Cursor Green Color 0 Register    write_C(0x0088,0x00);   // CRT/TV Ink/Cursor Red Color 0 Register    write_C(0x008A,0x1F);   // CRT/TV Ink/Cursor Blue Color 1 Register    write_C(0x008B,0x3F);   // CRT/TV Ink/Cursor Green Color 1 Register    write_C(0x008C,0x1F);   // CRT/TV Ink/Cursor Red Color 1 Register    write_C(0x008E,0x00);   // CRT/TV Ink/Cursor FIFO Threshold Register    write_C(0x0100,0x00);   // BitBlt Control Register 0    write_C(0x0101,0x00);   // BitBlt Control Register 1    write_C(0x0102,0x00);   // BitBlt ROP Code/Color Expansion Register    write_C(0x0103,0x00);   // BitBlt Operation Register    write_C(0x0104,0x00);   // BitBlt Source Start Address Register 0    write_C(0x0105,0x00);   // BitBlt Source Start Address Register 1    write_C(0x0106,0x00);   // BitBlt Source Start Address Register 2    write_C(0x0108,0x00);   // BitBlt Destination Start Address Register 0    write_C(0x0109,0x00);   // BitBlt Destination Start Address Register 1    write_C(0x010A,0x00);   // BitBlt Destination Start Address Register 2    write_C(0x010C,0x00);   // BitBlt Memory Address Offset Register 0    write_C(0x010D,0x00);   // BitBlt Memory Address Offset Register 1    write_C(0x0110,0x00);   // BitBlt Width Register 0    write_C(0x0111,0x00);   // BitBlt Width Register 1    write_C(0x0112,0x00);   // BitBlt Height Register 0    write_C(0x0113,0x00);   // BitBlt Height Register 1    write_C(0x0114,0x00);   // BitBlt Background Color Register 0    write_C(0x0115,0x00);   // BitBlt Background Color Register 1    write_C(0x0118,0x00);   // BitBlt Foreground Color Register 0    write_C(0x0119,0x00);   // BitBlt Foreground Color Register 1  */      //init_LUT();    //------------------------------------------------------------------------    write_C(0x01F0,0x00);   // Power Save Configuration Register    write_C(0x01F4,0x00);   // CPU-to-Memory Access Watchdog Timer Register    write_C(0x01FC,0x01);   // Display Mode Register}void cls(U16 color){    unsigned int i ;    addr56=0;    for(i=0;i<272*480;i++)    {        LCDdat[addr56]=color;        addr56++;    }}//初始化LCD显示参数以及界面void InitLCD(void) {   Init13506();   cls(0x0000);   write_C(0x0008,0x02);           //dispon   //cls(0xf800);   //cls(0x07e0);}/***********************************************************                                                       **       Internal set pixel routines                     **                                                       ***********************************************************/static void SetPixel(int x, int y, LCD_PIXELINDEX c) {	if(x<SCR_XSIZE && y<SCR_YSIZE)	{        frameBuffer[(y)][(x)]=c;        LCDdat[480*y+x]=c;    }}unsigned int GetPixelIndex(int x, int y) {    LCD_PIXELINDEX col;	col= frameBuffer[(y)][(x)];  	return col;}static void XorPixel   (int x, int y) {    LCD_PIXELINDEX Index = GetPixelIndex(x,y);    SetPixel(x,y,LCD_NUM_COLORS-1-Index);}/***********************************************************                                                       **       LCD_L0_XorPixel                                 **                                                       **********************************************************Purpose:  This routine is called by emWin. It writes 1 pixel into the          display.*/void LCD_L0_XorPixel(int x, int y) {  	XorPixel(x, y);}void LCD_L0_SetPixelIndex(int x, int y, int ColorIndex) {  	SetPixel(x, y, ColorIndex);}/***********************************************************                                                       **          LCD_L0_DrawHLine optimized                   **                                                       **          16 bit bus, Using BITBLT                     **                                                       ***********************************************************/void LCD_L0_DrawHLine  (int x0, int y,  int x1){  	if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR)  	{    	while (x0 <= x1)    	{      		XorPixel(x0, y);      		x0++;    	}  	} else  	{    	while (x0 <= x1)    	{      		SetPixel(x0, y, COLOR);      		x0++;    	}  	}}/***********************************************************                                                       **          LCD_L0_DrawVLine optimized                   **                                                       **          16 bit bus, using BITBLT                     **                                                       ***********************************************************/void LCD_L0_DrawVLine  (int x, int y0,  int y1) {  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {    while (y0 <= y1) {      XorPixel(x, y0);      y0++;    }  } else {    while (y0 <= y1) {      SetPixel(x, y0, COLOR);      y0++;    }  }}/***********************************************************                                                       **          LCD_FillRect                                 **                                                       ***********************************************************/void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {#if !LCD_SWAP_XY  for (; y0 <= y1; y0++) {    LCD_L0_DrawHLine(x0,y0, x1);  }#else  for (; x0 <= x1; x0++) {    LCD_L0_DrawVLine(x0,y0, y1);  }#endif}/************************************************************                                                        **		  Draw a line                                    **                                                        ************************************************************/static void  DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {//  	LCD_PIXELINDEX aColor[2];  	U16 Pixels = ((*p) << 8) | (*(p + 1));  	U8 RemPixels;  	p++;//  	aColor[0] = *pTrans;//  	aColor[1] = *(pTrans + 1);  	x += Diff;  	RemPixels = 16 - Diff;  	Pixels <<= Diff;  	if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {    	do {      		if (RemPixels==0) {        		Pixels = ((*(p + 1)) << 8) | (*(p + 2));        		p += 2;        		RemPixels = 16;      		}      		if (Pixels & 0x8000) {        		XorPixel(x, y);      		}      		RemPixels--;      		Pixels <<=1;      		x++;    	} while (--xsize);  	}  	else {    	do {      		if (RemPixels==0) {        		Pixels = ((*(p + 1)) << 8) | (*(p + 2));        		p += 2;        		RemPixels = 16;      		}      		if (Pixels & 0x8000) {        		SetPixel(x, y, *(pTrans+1));      		}

⌨️ 快捷键说明

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