重新移植注意事项:
一、 LCD层的移植
1. 找到上图标注目录;
2. 在该目录下有如下文件: ili9320.c、ili9320.h、ili9320_api.c、ili9320_touch.c、ili9320_ucgui.c,期中ili9320.c、ili9320.h为LCD驱动层,ili9320_api.c 中实现ili9320_ucgui.c
需要的函数GUI_Line(u16 x0, u16 y0, u16 x1, u16 y1,u16 color);而在ili9320_ucgui.c文件中需要实现如下这些函数即可:
int LCD_L0_Init(void)
{
ili9320_Initializtion();
return 0;
}
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
ili9320_SetPoint(x,y,PixelIndex);
}
unsigned int LCD_L0_GetPixelIndex(int x, int y)
{
return ili9320_GetPoint(x,y);
}
3. 以上步骤及完成LCD层的移植;
二、 Touch 移植
Touch 层真正要实现的函数只有两个:
int Touch_MeasurementX(void)
{
return GUI_TOUCH_X_MeasureX();
}
int Touch_MeasurementY(void)
{
return GUI_TOUCH_X_MeasureY();
}
其也是GUI需要直接调用的函数,而GUI_TOUCH_X_MeasureX和GUI_TOUCH_X_MeasureY的函数原型如下,
他们用于获取Touch屏的物理坐标。
int GUI_TOUCH_X_MeasureX(void)
{
unsigned char t=0,t1,count=0;
unsigned short int databuffer[10]={5,7,9,3,2,6,4,0,3,1};//数据组
unsigned short temp=0,X=0;
while(count<10) //循环读数10次
{
databuffer[count]=TPReadX();
count++;
}
if(count==10)//一定要读到10次数据,否则丢弃
{
do //将数据X升序排列
{
t1=0;
for(t=0;t<count-1;t++)
{
if(databuffer[t]>databuffer[t+1])//升序排列
{
temp=databuffer[t+1];
databuffer[t+1]=databuffer[t];
databuffer[t]=temp;
t1=1;
}
}
}while(t1);
X=(databuffer[3]+databuffer[4]+databuffer[5])/3;
// if(X<=3730&&Y<=3730) //个人的屏根据初始参数修改.
// {
// if(X>=330)X-=330;
// else X=0;
// if(Y>=420)Y-=420;
// else Y=0;
// drawbigpoint(240-X/14,320-Y/10);
// }
}
return(X);
}
int GUI_TOUCH_X_MeasureY(void)
{
unsigned char t=0,t1,count=0;
unsigned short int databuffer[10]={5,7,9,3,2,6,4,0,3,1};//数据组
unsigned short temp=0,Y=0;
while(count<10) //循环读数10次
{
databuffer[count]=TPReadY();
count++;
}
if(count==10) //一定要读到10次数据,否则丢弃
{
do //将数据X升序排列
{
t1=0;
for(t=0;t<count-1;t++){
if(databuffer[t]>databuffer[t+1]) //升序排列
{
temp=databuffer[t+1];
databuffer[t+1]=databuffer[t];
databuffer[t]=temp;
t1=1;
}
}
}while(t1);
Y=(databuffer[3]+databuffer[4]+databuffer[5])/3;
// if(X<=3730&&Y<=3730) //个人的屏根据初始参数修改.
// {
// if(X>=330)X-=330;
// else X=0;
// if(Y>=420)Y-=420;
// else Y=0;
// drawbigpoint(240-X/14,320-Y/10);
// }
}
return(Y);
}
以上为uc/GUI的简要移植步骤,当然,对于ili9320_api.c、ili9320_touch.c 两个文件还可以简化其内部函数,其调用的函数全部在Driver层实现,
这样可以简化GUI的移植步骤,且程序层次架构清晰。
作者将ili9320_api.c 简化只包含如下几个函数:
void GUI_APIInit( void )
{
// GLCD_Init();
}
void GUI_APIDrawPoint(int x, int y, int PixelIndex)
{
LCD_DrawPoint( x, y, PixelIndex);
}
int GUI_APIGetPoint(int x,int y)
{
return LCD_ReadPoint(x,y);
}
void GUI_APIDrawLine(int x0, int y0, int x1, int y1,int color)
{
}
对于 ili9320_touch.c 文件,其包含如下函数:
static int GUI_TouchAPIX( void )
{
return Touch_MeasureX();
}
static int GUI_TouchAPIY( void )
{
return Touch_MeasureY();
}
int GUI_TOUCH_X_MeasureX(void)
{
return GUI_TouchAPIX();
}
int GUI_TOUCH_X_MeasureY(void)
{
return GUI_TouchAPIY();
}
void GUI_TOUCH_X_ActivateX(void)
{
}
void GUI_TOUCH_X_ActivateY(void)
{
}
|