📄 lcd_phyc_hx8310.c
字号:
/*
*******************************************************************************
* uc/gui
* This program demostrates how to build an AP
*
* (c) Copyright Actions Co,Ld.
*
*******************************************************************************
*/
//#include "lcmoption.h"
#include "lcd.h"
#include "LCD_PHY_HX8310.h"
#define DISMOD_RGB
extern char direction;
non_banked void LCM_Enable(void);
non_banked void LCM_Disable(void);
non_banked void LCM_Write_Command(int Index,int Value);
non_banked void LCM_GPIOInit(void);
non_banked void Delay_10us(void);
non_banked void Delay_1ms(void);
non_banked void LCM_Write_Pixel(int Pixel);
non_banked void LCM_Fill_Area(int Value,int Size);
non_banked unsigned int LCM_Read_Pixel(int x,int y);
non_banked void LCM_Read_Area(char *Buffer,int Counter);
non_banked void LCM_BuffDataTrans ( char *buff , int datacnt);
void LCM_RegInit(void);
void LCM_PowerOn(void);
void LCM_PowerOff(void);
void LCM_DisplayOn(void);
void LCM_DisplayOff(void);
void LCM_DelayMS(int delaycnt);
/*
*************************************************************************
LCM Physical Code Layer
*************************************************************************
*/
void LCD_P0_DrawRect(int x0, int y0, int x1, int y1,int ColorLine,int ColorFill)
{
LCD_RECT win;
int size;
if ((x0==x1)&&(y0==y1))
{
return;
}
LCD_P0_DrawLine(x0,y0,x0,y1,ColorLine);
LCD_P0_DrawLine(x1,y0,x1,y1,ColorLine);
LCD_P0_DrawLine(x0,y0,x1,y0,ColorLine);
LCD_P0_DrawLine(x0,y1,x1,y1,ColorLine);
if ((x0==x1)||(y0==y1))
{
return;
}
win.x0 = x0+1;
win.x1 = x1-1;
win.y0 = y0+1;
win.y1 = y1-1;
size = (win.y1-win.y0+1)*(win.x1-win.x0+1);
if(size!=0)
{
LCD_P0_SetWindow(&win);
LCM_Fill_Area(ColorFill,size);
}
}
void LCD_P0_InvertRegion(LCD_RECT *reg)
{
}
void LCD_P0_CopyRect(int x0, int y0, int x1, int y1,int newx, int newy)
{
LCD_RECT win,winnew;
int ColorPixel;
int size;
int i;
win.x0 = x0;
win.x1 = x0;
win.y0 = y0;
win.y1 = y0;
size = (y1-y0)*(x1-x0);
winnew.x0 = newx;
winnew.x1 = newx;
winnew.y0 = newy;
winnew.y1 = newy;
if(size!=0)
{
for(;win.x0<win.x1;win.x0++)
{
for(;win.y0<win.y1;win.y0++)
{
LCD_P0_SetWindow(&win);
ColorPixel = LCM_Read_Pixel(0,0);
LCD_P0_SetWindow(&winnew);
LCM_Write_Pixel(ColorPixel);
winnew.y0++;
}
win.y0 = y0;
winnew.y0 = newy;
winnew.x0++;
}
}
}
void LCD_P0_ClearRect(int x0, int y0, int x1, int y1)
{
LCD_RECT win;
int size;
LCD_P0_DrawLine(x0,y0,x0,y1,0x0000);
LCD_P0_DrawLine(x1,y0,x1,y1,0x0000);
LCD_P0_DrawLine(x0,y0,x1,y0,0x0000);
LCD_P0_DrawLine(x0,y1,x1,y1,0x0000);
win.x0 = x0;
win.x1 = x1;
win.y0 = y0;
win.y1 = y1;
size = (y1-y0)*(x1-x0);
if(size!=0)
{
LCD_P0_SetWindow(&win);
LCM_Fill_Area(0x0000,size);
}
}
void LCD_P0_FillArea(int Value,int Size)
{
LCM_Fill_Area(Value, Size);
}
void LCD_P0_BuffDataTrans(U8 *pData, int cnt, char mode)
{
LCM_BuffDataTrans(pData,cnt);
}
void LCD_P0_GetBuffData ( char *buff, int datacnt, char mode)
{
LCM_Read_Area(buff,datacnt);
}
unsigned int LCD_P0_GetPixelIndex(int x, int y)
{
return(LCM_Read_Pixel(x,y));
}
int LCD_P0_DrawLine (int x0, int y0, int x1, int y1,int ColorIndex)
{
int x0save;
LCD_RECT win;
win.x0 = x0;
win.x1 = x1;
win.y0 = y0;
win.y1 = y1;
if((x0>x1)||(y0>y1))
return 1;
if(x0==x1)
{
win.x0 = x0;
win.x1 = XMAX;
win.y0 = y0;
win.y1 = YMAX;
for(;y0<(y1+1);y0++)
{
win.y0 = y0;
LCD_P0_SetWindow(&win);
LCM_Write_Pixel(ColorIndex);
}
}
else if(y0==y1)
{
win.x0 = x0;
win.x1 = XMAX;
win.y0 = y0;
win.y1 = YMAX;
for(;x0<(x1+1);x0++)
{
win.x0 = x0;
LCD_P0_SetWindow(&win);
LCM_Write_Pixel(ColorIndex);
}
}
else
{
x0save = x0;
win.x0 = x0;
win.x1 = XMAX;
win.y0 = y0;
win.y1 = YMAX;
for(;x0<(x1+1);x0++)
{
y0 = ((y1-y0)*x0)/(x1-x0save);
win.x0 = x0;
win.y0 = y0;
LCD_P0_SetWindow(&win);
LCM_Write_Pixel(ColorIndex);
}
}
}
void LCD_P0_XorPixel(int x, int y)
{
LCD_RECT win;
win.x1 = win.x0 = x;
win.y1 = win.y0 = y;
LCD_P0_SetWindow(&win);
LCM_Write_Pixel(0x0000);
}
void LCD_P0_SetPixelIndex(int x, int y, int ColorIndex)
{
LCD_RECT win;
win.x1 = win.x0 = x;
win.y1 = win.y0 = y;
LCD_P0_SetWindow(&win);
LCM_Write_Pixel(ColorIndex);
}
void LCD_P0_SetDrawMode(unsigned char mode)
{
switch(mode)
{
case DrawModeH_def:
LCM_Write_Command(0x0005,0x1038);
break;
case DrawModeV_def:
LCM_Write_Command(0x0005,0x1030);
break;
default: break;
}
}
int LCD_P0_SetWindow(LCD_RECT *win)
{
int x, y;
int ramaddr;
if((win->x1<win->x0)||(win->y1<win->y0))
return 0;
if(win->x1>0x9f||win->y1>0x7f)
return 0;
x = win->x1;
x <<=8;
x &= 0xff00;
x |= ((win->x0)&0x00ff);
y = win->y1;
y <<=8;
y &= 0xff00;
y |= ((win->y0)&0x00ff);
ramaddr =win->x0;
ramaddr <<= 0x08;
ramaddr &=0xff00;
ramaddr |= ((win->y0)&0x00ff);
LCM_Write_Command(0x0016,y);
LCM_Write_Command(0x0017,x);
LCM_Write_Command(0x0021,ramaddr);
return 1;
}
void LCD_P0_SetContrast(char ContrastValue)
{
}
void LCD_P0_Standby(unsigned char bStandby)
{
switch(bStandby)
{
case StandbyStart_def: LCM_PowerOff();
LCM_Write_Command(0x0003,0x0001);
break;
case StandbyExit_def: LCM_DelayMS(10);
LCM_Write_Command(0x0003,0x0000);
LCM_DelayMS(10);
LCM_PowerOn();
break;
default: break;
}
}
void LCD_P0_On(void)
{
LCM_PowerOn();
}
void LCD_P0_Off(void)
{
LCM_PowerOff();
}
int LCD_P0_Init(void)
{
LCM_GPIOInit();
LCM_RegInit();
LCM_PowerOn();
return 0;
}
/*
*************************************************************************
LCM Hardware Code Layer
*************************************************************************
*/
void LCM_RegInit(void)
{
LCM_Write_Command(0x0001,0x0313); //Display Control Setting
LCM_Write_Command(0x0002,0x0700);
LCM_Write_Command(0x0005,0x1038); //横屏
LCM_Write_Command(0x0006,0x0000);
LCM_Write_Command(0x0008,0x0202);
LCM_Write_Command(0x000a,0x0000);
LCM_Write_Command(0x000b,0x1800);
LCM_Write_Command(0x000f,0x0000);
LCM_Write_Command(0x0010,0x0000);
LCM_Write_Command(0x0011,0x0000);
LCM_Write_Command(0x0014,0x9f00);
LCM_Write_Command(0x0015,0x9f00);
LCM_Write_Command(0x0016,0x7f00);
LCM_Write_Command(0x0017,0x9f00);
LCM_Write_Command(0x0020,0x0000);
LCM_Write_Command(0x0021,0x0000);
LCM_Write_Command(0x0023,0x0000);
LCM_Write_Command(0x0024,0x0000);
LCM_Write_Command(0x0025,0x0000);
LCM_Write_Command(0x0026,0x0000);
LCM_Write_Command(0x0030,0x0000); //Grmma Control Setting
LCM_Write_Command(0x0031,0x0606);
LCM_Write_Command(0x0032,0x0006);
LCM_Write_Command(0x0033,0x0403);
LCM_Write_Command(0x0034,0x0107);
LCM_Write_Command(0x0035,0x0101);
LCM_Write_Command(0x0036,0x0707);
LCM_Write_Command(0x0037,0x0304);
LCM_Write_Command(0x003a,0x1200);
LCM_Write_Command(0x003b,0x0805);
}
void LCM_PowerOn(void)
{
LCM_Write_Command(0x000d,0x0000); //PON = 0;
LCM_DelayMS(15);
LCM_Write_Command(0x000e,0x0000); //VCOMG = 0;
LCM_DelayMS(15);
LCM_Write_Command(0x0007,0x0000); //DTE=0,D1-0=0,GON=0S
LCM_DelayMS(15);
LCM_Write_Command(0x000c,0x0000); //Set VC2-0
LCM_DelayMS(15);
LCM_Write_Command(0x0009,0x0008); //DK=1
LCM_DelayMS(15);
LCM_Write_Command(0x000d,0x0003); //Set VRH3-0,PON=0
LCM_DelayMS(15);
LCM_Write_Command(0x000e,0x1019); //Set VCM4-0,Set VDV4-0
LCM_DelayMS(50);
LCM_Write_Command(0x000d,0x0013); //PON=1
LCM_DelayMS(15);
LCM_Write_Command(0x0003,0x0010); //BT2-0=000,Set DC02-00,Set AP2-0
LCM_DelayMS(50);
LCM_Write_Command(0x0009,0x0000); //Set DC12-10,DK=0
LCM_DelayMS(15);
LCM_Write_Command(0x0003,0x0010); //Set BT2-0
LCM_DelayMS(15);
LCM_Write_Command(0x000e,0x3019); //VCOMG=1,VDV=100000,VCM=11001
LCM_DelayMS(150);
LCM_Write_Command(0x0009,0x0002); //SAP=010
LCM_DelayMS(50);
LCM_DisplayOn();
}
void LCM_PowerOff(void)
{
LCM_DisplayOn();
LCM_DisplayOff();
LCM_DelayMS(40);
LCM_Write_Command(0x0009,0x0000); //SAP=000
LCM_DelayMS(15);
LCM_Write_Command(0x0003,0x0000); //AP2-0=000
LCM_DelayMS(50);
LCM_Write_Command(0x000d,0x0000); //PON = 0;
LCM_DelayMS(15);
LCM_Write_Command(0x000e,0x0000); //VCOMG = 0;
LCM_DelayMS(15);
}
void LCM_DisplayOn()
{
LCM_Write_Command(0x0007,0x0005); //GON=0,DTE=0,D1-0=01
LCM_DelayMS(40);
LCM_Write_Command(0x0007,0x0025); //GON=1,DTE=0,D1-0=01
LCM_DelayMS(40);
LCM_Write_Command(0x0007,0x0027); //GON=1,DTE=0,D1-0=11
LCM_DelayMS(40);
LCM_Write_Command(0x0007,0x0037); //GON=1,DTE=1,D1-0=11
LCM_DelayMS(10);
}
void LCM_DisplayOff()
{
LCM_Write_Command(0x0007,0x00036); //GON=1,DTE=1,D1-0=10
LCM_DelayMS(40);
LCM_Write_Command(0x0007,0x0026); //GON=1,DTE=0,D1-0=10
LCM_DelayMS(40);
LCM_Write_Command(0x0007,0x0004); //GON=0,DTE=0,D1-0=00
LCM_DelayMS(40);
}
void LCM_DelayMS(int delaycnt)
{
int i;
for(i=0;i<delaycnt;i++)
Delay_1ms();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -