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 + -
显示快捷键?