/********************************************************************* * * MainTask */ void TOUCH_MainTask(void) { int aPhysX[2], aPhysY[2], aLogX[2], aLogY[2], i; GUI_Init(); GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font13B_ASCII); _Explain(); /* Set the logical values */ aLogX[0] = 15; aLogY[0] = 15; aLogX[1] = LCD_GetXSize() - 15; aLogY[1] = LCD_GetYSize() - 15; /* Get the physical values of the AD converter for 2 positions */ for (i = 0; i < 2; i++) { _GetPhysValues(aLogX[i], aLogY[i], &aPhysX[i], &aPhysY[i], _acPos[i]); } /* Use the physical values to calibrate the touch screen */ GUI_TOUCH_Calibrate(0, aLogX[0], aLogX[1], aPhysX[0], aPhysX[1]); /* Calibrate X-axis */ GUI_TOUCH_Calibrate(1, aLogY[0], aLogY[1], aPhysY[0], aPhysY[1]); /* Calibrate Y-axis */ /* Display the result */ GUI_CURSOR_Show(); GUI_Clear(); _DispStringCentered("Congratulation, your\n" "touch screen has been\n" "calibrated. Please use\n" "the cursor to test\n" "the calibration..."); /* Let the user play */ GUI_Delay(50); }
/********************************************************************* * * LCD_X_Config * * Function description: * Called during the initialization process in order to set up the * display driver configuration. * */ void LCD_X_Config(void) { GUI_DEVICE * pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // // Set display driver and color conversion // pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0); // // Display driver configuration, required for Lin-driver // LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS); LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS); GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240, TOUCH_AD_TOP, TOUCH_AD_BOTTOM); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); // // Orientation //配置显示屏的方向 //Config.Orientation = GUI_SWAP_XY|GUI_MIRROR_Y;// GUI_SWAP_XY | GUI_MIRROR_Y; GUIDRV_FlexColor_Config(pDevice, &Config); // // Set controller and operation mode // PortAPI.pfWrite16_A0 = LcdWriteReg; PortAPI.pfWrite16_A1 = LcdWriteData; PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple; PortAPI.pfReadM16_A1 = LcdReadDataMultiple; //配置总线,缓存,和硬件程序 5.22手册991页有详细解说所支持的控制器 GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16); }
static void _InitController(unsigned LayerIndex) { // // Set display size and video-RAM address // LCD_SetSizeEx (XSIZE_PHYS, YSIZE_PHYS, LayerIndex); LCD_SetVSizeEx(VXSIZE_PHYS, VYSIZE_PHYS, LayerIndex); LCD_SetVRAMAddrEx(LayerIndex, (void*)LCD_VRAM_BASE_ADDR); // // Init LCD // #if GUI_SUPPORT_TOUCH // Used when touch screen support is enabled { U32 TouchOrientation; TouchOrientation = (GUI_MIRROR_X * LCD_GetMirrorXEx(0)) | (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) | (GUI_SWAP_XY * LCD_GetSwapXYEx (0)) ; GUI_TOUCH_SetOrientation(TouchOrientation); if (LCD_GetSwapXYEx(0)) { GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); // x axis swapped GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS, TOUCH_AD_TOP , TOUCH_AD_BOTTOM); // y axis swapped } else { GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); // x axis GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS, TOUCH_AD_TOP , TOUCH_AD_BOTTOM); // y axis } } #endif }
/********************************************************************* * * LCD_X_Config * * Purpose: * Called during the initialization process in order to set up the * display driver configuration. * */ void LCD_X_Config(void) { GUI_DEVICE * pDevice; GUI_PORT_API PortAPI = {0}; CONFIG_FLEXCOLOR Config = {0}; #if (NUM_BUFFERS > 1) GUI_MULTIBUF_Config(NUM_BUFFERS); #endif // // Set display driver and color conversion for 1st layer // pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); // // Common display driver configuration // if (LCD_GetSwapXY()) { LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS); LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS); } else { LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS); } // // Configuration of GUIDRV_FLEX_COLOR // // // Select hardware interface // GUIDRV_FlexColor_SetReadFunc66712_B16(pDevice, GUIDRV_FLEXCOLOR_READ_FUNC_II); // // Set controller and operation mode // PortAPI.pfWrite16_A0 = LCD_X_Write0_16; PortAPI.pfWrite16_A1 = LCD_X_Write1_16; PortAPI.pfWriteM16_A1 = LCD_X_WriteM1_16; PortAPI.pfReadM16_A1 = LCD_X_ReadM1_16; GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66712, GUIDRV_FLEXCOLOR_M16C0B16); // // Orientation and offset of SEG/COM lines // Config.Orientation = DISPLAY_ORIENTATION; Config.RegEntryMode = 0; GUIDRV_FlexColor_Config(pDevice, &Config); #if (USE_TOUCH == 1) // // Set orientation of touch screen // GUI_TOUCH_SetOrientation(DISPLAY_ORIENTATION); // // Calibrate touch screen // GUI_TOUCH_Calibrate(GUI_COORD_X, 0, WIDTH - 1, TOUCH_LEFT, TOUCH_RIGHT); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, HEIGHT - 1, TOUCH_TOP, TOUCH_BOTTOM); #endif }
/********************************************************************* * * _InitController * * Function description: * Initializes the LCD controller and touch screen * */ static void _InitController(unsigned LayerIndex) { // // Set display size and video-RAM address // LCD_SetSizeEx (XSIZE_PHYS, YSIZE_PHYS, LayerIndex); LCD_SetVSizeEx(VXSIZE_PHYS, VYSIZE_PHYS, LayerIndex); LCD_SetVRAMAddrEx(LayerIndex, (void*)LCD_VRAM_BASE_ADDR); // // Init LCD // GLCD_Init(); #if GUI_SUPPORT_TOUCH // Used when touch screen support is enabled { U32 TouchOrientation; U32 pclk; // // Initialize touch screen // LPC_SC->PCONP |= (1 << 12); // Enable clock for ADC LPC_ADC->CR = 0 | (1 << 1) // Sel AD0[1] | (ADC_CLKDIV << 8) | (1 << 21) // Enable ADC ; // // Calibrate touch // TouchOrientation = (GUI_MIRROR_X * LCD_GetMirrorXEx(0)) | (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) | (GUI_SWAP_XY * LCD_GetSwapXYEx (0)) ; GUI_TOUCH_SetOrientation(TouchOrientation); if (LCD_GetSwapXYEx(0)) { GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); // x axis swapped GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS, TOUCH_AD_TOP , TOUCH_AD_BOTTOM); // y axis swapped } else { GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); // x axis GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS, TOUCH_AD_TOP , TOUCH_AD_BOTTOM); // y axis } // // Start touch timer // LPC_SC->PCONP |= (0x1<<2); pclk = SystemCoreClock/4; LPC_TIM1->PR = pclk/1000000; /* Set prescaler to get 1 M counts/sec */ LPC_TIM1->MR0 = 1000 * TOUCH_TIMER_INTERVAL; LPC_TIM1->MCR = (0x3<<0); /* Interrupt and Reset on MR0 */ NVIC_EnableIRQ(TIMER1_IRQn); LPC_TIM1->TCR = 1; /* Enable timer 1 */ } #endif }
/********************************************************************* * * LCD_X_Config * * Function description: * Called during the initialization process in order to set up the * display driver configuration. * */ void LCD_X_Config(void) { GUI_DEVICE * pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // // Set display driver and color conversion // pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0); // // Display driver configuration, required for Lin-driver // LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS); LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS); // // Orientation // Config.FirstCOM = 0; //modify by xiaoku Config.FirstSEG = 0; //modify by xiaoku //Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X; //modify by xiaoku 竖屏 // Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; //modify by xiaoku 横屏 Config.NumDummyReads = 2; //modify by xiaoku 读取的第二个数据才是真实数据 GUIDRV_FlexColor_Config(pDevice, &Config); // // Set controller and operation mode // PortAPI.pfWrite16_A0 = LcdWriteReg; PortAPI.pfWrite16_A1 = LcdWriteData; PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple; PortAPI.pfReadM16_A1 = LcdReadDataMultiple; //GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16); GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16); //modify by xiaoku /* modify by fire 设置触摸原点 */ GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorXEx(0)) | (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) | (GUI_SWAP_XY * LCD_GetSwapXYEx (0))); /* modify by fire 设置触摸校准 */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240-1,TOUCH_AD_LEFT ,TOUCH_AD_RIGHT ); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320-1,TOUCH_AD_TOP , TOUCH_AD_BOTTOM); }
void LCD_X_Config(void) { // // Set display driver and color conversion for 1st layer // GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); // // Display driver configuration // LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); LCD_SetVSizeEx (0, VXSIZE_PHYS, VYSIZE_PHYS); // GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 800-1, GUI_TOUCH_AD_LEFT ,GUI_TOUCH_AD_RIGHT ); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 480-1,GUI_TOUCH_AD_TOP ,GUI_TOUCH_AD_BOTTOM ); // GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 800-1, GUI_TOUCH_AD_LEFT ,GUI_TOUCH_AD_RIGHT ); // GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 480-1,GUI_TOUCH_AD_TOP ,GUI_TOUCH_AD_BOTTOM ); }
//配置程序,用于创建显示驱动器件,设置颜色转换程序和显示尺寸 void LCD_X_Config(void) { GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_M565, 0, 0); //创建显示驱动器件 LCD_SetSizeEx (0, lcddev.width, lcddev.height); LCD_SetVSizeEx (0, lcddev.width, lcddev.height); if(lcddev.dir == 0) //竖屏 { // 6368 3816 //GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); GUI_TOUCH_Calibrate(GUI_COORD_X,0,800,0,799); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,0,479); }else //横屏 { GUI_TOUCH_Calibrate(GUI_COORD_X,0,800,0,799); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,0,479); } }
//配置程序,用于创建显示驱动器件,设置颜色转换程序和显示尺寸 void LCD_X_Config (void) { GUI_MULTIBUF_ConfigEx(eLAYER_BSP, 1); GUI_MULTIBUF_ConfigEx(eLAYER_ESP, 1); /*BSP-------------------------------------------------------*/ GUI_DEVICE_CreateAndLink(&BSP_GUIDRV_Template_API, GUICC_M565, 0, eLAYER_BSP); //创建显示驱动器件 LCD_SetSizeEx(eLAYER_BSP, 240, 320); LCD_SetVSizeEx(eLAYER_BSP, 240, 320); GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240, 0, 239); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320, 0, 319); /*ESP-------------------------------------------------------*/ GUI_DEVICE_CreateAndLink(&ESP_GUIDRV_Template_API, GUICC_M565, 0, eLAYER_ESP); //创建显示驱动器件 LCD_SetSizeEx(eLAYER_ESP, XSIZE_PHYS, YSIZE_PHYS); LCD_SetVSizeEx(eLAYER_ESP, XSIZE_PHYS, YSIZE_PHYS); GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 480, 0, 479); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 800, 0, 799); }
void LCD_X_Config(void) { // /* Set display driver and color conversion for 1st layer */ GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); // if (g_ChipID == IC_8875) // { // if (g_ucGPIX == 1) /* GPIX = 1 4.3 480x272 */ // { // /* Display driver configuration */ // LCD_SetSizeEx (0, 480, 272); // LCD_SetVSizeEx (0, 480, 272); // // /* Touch calibration */ // GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 479, 985, 50); // GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 271, 920, 100); // } // else /* GPIX = 0 7 800*480 */ // { // /* Display driver configuration */ // LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); // LCD_SetVSizeEx (0, VXSIZE_PHYS, VYSIZE_PHYS); // // LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR); // // /* Touch calibration */ // // GUI_TOUCH_SetOrientation(0); // GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS - 1, GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT); // GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS - 1, GUI_TOUCH_AD_TOP, GUI_TOUCH_AD_BOTTOM); // } // } // else // { LCD_SetSizeEx (0, 240, 128); LCD_SetVSizeEx (0, 240, 128); /* Touch calibration */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 399, 300, 3600); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 239, 273, 3671); // } }
void GUI_AppAutoCalibration(const char* path) { int hFile; GUI_TouchData tData; hFile = open(path, O_RDONLY , 0); if(hFile < 0) { // GUI_MessageBox("No touch data\r\n", path, GUI_MESSAGEBOX_CF_MODAL); hFile = open(path, O_RDWR | O_CREAT, 0); tData.magic = 'T'; GUI_ExecCalibrationDialog(&tData); write(hFile, &tData, sizeof(GUI_TouchData)); } else { read(hFile, &tData, sizeof(GUI_TouchData)); GUI_TOUCH_Calibrate(0, tData.aLogX[0], tData.aLogX[1], tData.aPhysX[0], tData.aPhysX[1]); /* Calibrate X-axis */ GUI_TOUCH_Calibrate(1, tData.aLogY[0], tData.aLogY[1], tData.aPhysY[0], tData.aPhysY[1]); /* Calibrate Y-axis */ } close(hFile); }
/********************************************************************* * * MainTask */ void MainTask_TOUCHCAL(void) { int aPhysX[2], aPhysY[2], aLogX[2], aLogY[2], i; GUI_Init(); GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font13B_ASCII); _Explain(); /* Set the logical values */ aLogX[0] = 15; aLogY[0] = 15; aLogX[1] = LCD_GetXSize() - 15; aLogY[1] = LCD_GetYSize() - 15; /* Get the physical values of the AD converter for 2 positions */ for (i = 0; i < 2; i++) { _GetPhysValues(aLogX[i], aLogY[i], &aPhysX[i], &aPhysY[i], _acPos[i]); } /* Use the physical values to calibrate the touch screen */ GUI_TOUCH_Calibrate(0, aLogX[0], aLogX[1], aPhysX[0], aPhysX[1]); /* Calibrate X-axis */ //如果我们要存到外部存储器中 那么就存储这里的8个参数 GUI_TOUCH_Calibrate(1, aLogY[0], aLogY[1], aPhysY[0], aPhysY[1]); /* Calibrate Y-axis */ /* Display the result */ GUI_CURSOR_Show(); GUI_Clear(); _DispStringCentered("Congratulation, your\n" "touch screen has been\n" "calibrated. Please use\n" "the cursor to test\n" "the calibration..."); /* Let the user play */ while(1) { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed == 1) { GUI_FillCircle(State.x, State.y, 3); } GUI_Delay(10); } }
/* **************************************************************************** * * LCD_X_Config * * Purpose: * Called during the initialization process in order to set up the * display driver configuration. * **************************************************************************** */ void LCD_X_Config(void) { /* 读取EEPROM中的参数 */ ee_ReadBytes((uint8_t *)&g_tTPSL, 1024, sizeof(g_tTPSL)); /* Set display driver and color conversion for 1st layer */ GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); if (g_ChipID == IC_8875) { if (g_ucGPIX == 1) /* GPIX = 1 4.3 480x272 */ { /* Display driver configuration */ LCD_SetSizeEx (0, 480, 272); LCD_SetVSizeEx (0, 480, 272); /* Touch calibration */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 479, g_tTPSL.usAdcX1, g_tTPSL.usAdcX2); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 271, g_tTPSL.usAdcY1, g_tTPSL.usAdcY2); /* 查看是否需要切换X,Y*/ if(g_tTPSL.XYChange == 1) { GUI_TOUCH_SetOrientation(GUI_SWAP_XY); } } else /* GPIX = 0 7 800*480 */ { /* Display driver configuration */ LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); LCD_SetVSizeEx (0, VXSIZE_PHYS, VYSIZE_PHYS); GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS - 1, g_tTPSL.usAdcX1, g_tTPSL.usAdcX2); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS - 1, g_tTPSL.usAdcY1, g_tTPSL.usAdcY2); /* 查看是否需要切换X,Y*/ if(g_tTPSL.XYChange == 1) { GUI_TOUCH_SetOrientation(GUI_SWAP_XY); } } } else { LCD_SetSizeEx (0, 400, 240); LCD_SetVSizeEx (0, 400, 240); /* Touch calibration */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 399, 300, 3600); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 239, 273, 3671); } }
void _ExecCalibration(void) { int ax_Phys[2],ay_Phys[2]; /* calculate log. Positions */ int ax[2] = { 15, LCD_XSIZE -1-15}; // const int ay[2] = { 15, LCD_YSIZE-1-15}; int ay[2] = { LCD_YSIZE-1-15, 15}; CalibrationComplete = 0; GUI_TOUCH_SetDefaultCalibration(); /* _Calibrate upper left */ GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[0], ay[0], 10); GUI_SetColor(GUI_RED); GUI_FillCircle(ax[0], ay[0], 5); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Press here", ax[0]+20, ay[0]); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) { ax_Phys[0] = GUI_TOUCH_GetxPhys(); ay_Phys[0] = GUI_TOUCH_GetyPhys(); break; } GUI_Delay (100); } while (1); /* Tell user to release */ GUI_Clear(); GUI_DispStringAt("OK", ax[0]+20, ay[0]); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed == 0) { break; } GUI_Delay (100); } while (1); /* _Calibrate lower right */ GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[1], ay[1], 10); GUI_SetColor(GUI_RED); GUI_FillCircle(ax[1], ay[1], 5); GUI_SetColor(GUI_WHITE); GUI_SetTextAlign(GUI_TA_RIGHT); GUI_DispStringAt("Press here", ax[1]-20, ay[1]); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) { ax_Phys[1] = GUI_TOUCH_GetxPhys(); ay_Phys[1] = GUI_TOUCH_GetyPhys(); break; } GUI_Delay (100); } while (1); GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]); GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]); { /* calculate and display values for configuration file */ int x0, x1; int y0, y1; GUI_Clear(); _Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1], &x0, &x1); _Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1], &y0, &y1); GUI_DispStringAt("x0: ", 0, 0); GUI_DispDec(x0, 4); GUI_DispNextLine(); GUI_DispString ("x1: "); GUI_DispDec(x1, 4); GUI_DispNextLine(); GUI_DispString ("y0: "); GUI_DispDec(y0, 4); GUI_DispNextLine(); GUI_DispString ("y1: "); GUI_DispDec(y1, 4); GUI_DispNextLine(); GUI_DispString ("Please touch display to continue..."); GUI_Delay(1000); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) break; GUI_Delay (10); } while (1); } CalibrationComplete = 1; }
void _ExecCalibration(void) { int x,y; uint16_t data[6]; uint16_t get_data[6]; int ax_Phys[2],ay_Phys[2]; /* calculate log. Positions */ int ax[2] = { 15, LCD_XSIZE -1-15}; // const int ay[2] = { 15, LCD_YSIZE-1-15}; int ay[2] = { LCD_YSIZE-1-15, 15}; GUI_TOUCH_SetDefaultCalibration(); /* _Calibrate upper left */ GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[0], ay[0], 10); GUI_SetColor(GUI_RED); GUI_FillCircle(ax[0], ay[0], 5); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Press here", ax[0]+20, ay[0]); do { #if 0 GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) { #endif #if 1 x = TPReadX(); y = TPReadY(); if ((x>=3700)&&(y>=3400)&&(x<3800)&&(y<3600)) { #endif ax_Phys[0] = GUI_TOUCH_GetxPhys(); ay_Phys[0] = GUI_TOUCH_GetyPhys(); break; } GUI_Delay (3000); } while (1); /* Tell user to release */ GUI_Clear(); GUI_DispStringAt("OK", ax[0]+20, ay[0]); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed == 0) { break; } GUI_Delay (100); } while (1); /* _Calibrate lower right */ GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[1], ay[1], 10); GUI_SetColor(GUI_RED); GUI_FillCircle(ax[1], ay[1], 5); GUI_SetColor(GUI_WHITE); GUI_SetTextAlign(GUI_TA_RIGHT); GUI_DispStringAt("Press here", ax[1]-20, ay[1]); do { #if 1 x = TPReadX(); y = TPReadY(); if ((y>450)&&(y<620)&&(x>350)&&(x<450)) { #endif #if 0 GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) { #endif ax_Phys[1] = GUI_TOUCH_GetxPhys(); ay_Phys[1] = GUI_TOUCH_GetyPhys(); break; } GUI_Delay (3000); } while (1); GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]); GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]); { /* calculate and display values for configuration file */ int x0, x1; int y0, y1; GUI_Clear(); _Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1], &x0, &x1); _Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1], &y0, &y1); GUI_DispStringAt("x0: ", 0, 0); GUI_DispDec(x0, 4); GUI_DispNextLine(); GUI_DispString ("x1: "); GUI_DispDec(x1, 4); GUI_DispNextLine(); GUI_DispString ("y0: "); GUI_DispDec(y0, 4); GUI_DispNextLine(); GUI_DispString ("y1: "); GUI_DispDec(y1, 4); GUI_DispNextLine(); GUI_DispString ("Please touch display to continue..."); GUI_Delay(1000); data[0]= CAL_READY; data[1]= ax_Phys[0]; data[2]= ay_Phys[0]; data[3]= ax_Phys[1]; data[4]= ay_Phys[1]; #if 1 save_calibrate_to_flash(data); get_calibrate_data(get_data); GUI_DispStringAt("x0: ", 100, 0); GUI_DispDec(get_data[1], 4); GUI_DispNextLine(); GUI_DispString ("x1: "); GUI_DispDec(get_data[2], 4); GUI_DispNextLine(); GUI_DispString ("y0: "); GUI_DispDec(get_data[3], 4); GUI_DispNextLine(); GUI_DispString ("y1: "); GUI_DispDec(get_data[4], 4); GUI_DispNextLine(); GUI_DispString ("state: "); GUI_DispDec(get_data[0], 4); GUI_DispNextLine(); #endif do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); if (State.Pressed) break; GUI_Delay (10); } while (1); } } int run_cal(void) { if(get_calibrate_state()== CAL_READY) { get_calibration(); }else{ #if 1 _ExecCalibration(); #endif #if 0 Calibration(); #endif } } int get_calibration(void) { uint16_t cal_data[5]; int ax_Phys[2],ay_Phys[2]; int ax[2] = { 15, LCD_XSIZE -1-15}; int ay[2] = { LCD_YSIZE-1-15, 15}; get_calibrate_data(cal_data); ax_Phys[0] = cal_data[1]; ay_Phys[0] = cal_data[2]; ax_Phys[1] = cal_data[3]; ay_Phys[1] = cal_data[4]; GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]); GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]); } #if 0 void myAD2XY( int *adx , int *ady ){ float f_dat; int dat1; f_dat = (float)(*ady - admy)/(float)(*adx - admx); if(f_dat>0){ if( *adx>admx && admk[2] >=f_dat) dat1 = 1; else if( *adx>admx && admk[2] < f_dat ) dat1 =2;//2 else if( *adx<admx && admk[0] >=f_dat ) dat1 =0; else if( *adx<admx && admk[0] < f_dat ) dat1 =3;//0 else{ dat1 =0; }//*adx =0;*ady =0; } }else{ if( *adx>admx && admk[1] >=f_dat) dat1 = 0; else if( *adx>admx && admk[1] < f_dat ) dat1 =1;//1 else if( *adx<admx && admk[3] >=f_dat ) dat1 =3; else if( *adx<admx && admk[3] < f_dat ) dat1 =2;//3 else{ dat1 =0; }//*adx =0;*ady =0; } } *adx = (int)(Factors[dat1][0].a*(*adx)+Factors[dat1][0].b*(*ady)+Factors[dat1][0].c); *ady = (int)(Factors[dat1][1].a*(*adx)+Factors[dat1][1].b*(*ady)+Factors[dat1][1].c); }
/********************************************************************* * * LCD_X_Config * * Function description: * Called during the initialization process in order to set up the * display driver configuration. * */ void LCD_X_Config(void) { GUI_DEVICE * pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // // Set display driver and color conversion // pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);//´´½¨ÏÔʾÇý¶¯¿Ø¼þ // // Display driver configuration, required for Lin-driver // LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS); LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS); // // Orientation // // Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;//±£Áô¼´ÊǺáÆÁ£¬×¢Êͼ´ÎªÊúÆÁ GUIDRV_FlexColor_Config(pDevice, &Config); // // Set controller and operation mode // PortAPI.pfWrite16_A0 = LcdWriteReg; PortAPI.pfWrite16_A1 = LcdWriteData; PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple; PortAPI.pfReadM16_A1 = LcdReadDataMultiple; GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16); //GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API,GUICC_565,0,0); //LCD_SetSizeEx(0,lcddev.width,lcddev.height); //LCD_SetVSizeEx(0,lcddev.width,lcddev.height); if(lcddev.id == 0X5510) //0X5510Ϊ4.3´ç 800x480µÄÆÁ { if(lcddev.dir == 0) //ÊúÆÁ // 2001:3520 6352 { // 9147:3832 6288 GUI_TOUCH_Calibrate(GUI_COORD_X,0,480,0,479); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,800,0,799); }else //ºáÆÁ { //GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); GUI_TOUCH_Calibrate(GUI_COORD_X,0,480,0,479); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,800,0,799); } }else if(lcddev.id == 0X1963)//1963Ϊ7´çÆÁ 800*480 { if(lcddev.dir == 0) //ÊúÆÁ { // 6368 3816 //GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); GUI_TOUCH_Calibrate(GUI_COORD_X,0,800,0,799); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,0,479); }else //ºáÆÁ { GUI_TOUCH_Calibrate(GUI_COORD_X,0,800,0,799); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,0,479); } }else if(lcddev.id == 0X5310 || lcddev.id == 0X6804) //0X5510 0X6804Ϊ3.5´ç 320x480 { if(lcddev.dir == 0) //ÊúÆÁ { GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196); }else //ºáÆÁ { GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196); } } else //ÆäËûÆÁĻȫ²¿Ä¬ÈÏΪ2.8´ç 320X240 { if(lcddev.dir == 0) //ÊúÆÁ { GUI_TOUCH_Calibrate(GUI_COORD_X,0,lcddev.width,155,3903); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,188,3935); }else //ºáÆÁ { GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); GUI_TOUCH_Calibrate(GUI_COORD_X,0,240,155,3903); //У׼£¬½«ÎïÀíÖµ¸³Öµ¸øºê¶¨Òå GUI_TOUCH_Calibrate(GUI_COORD_Y,0,320,188,3935); } } }