/********************************************************************* * * 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); }
/** * @brief Initialization of calibration * @param None. * @retval None */ void k_CalibrationInit(void) { int aPhysX[2], aPhysY[2], aLogX[2], aLogY[2], i; data1.d32 = k_BkupRestoreParameter(RTC_BKP_DR0); data2.d32 = k_BkupRestoreParameter(RTC_BKP_DR1); A2 = data2.b.A2; B2 = data2.b.B2; A1 = data1.b.A1; B1 = data1.b.B1; if(data2.b.IsCalibrated == 0) { 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 */ A1 = (1000 * ( aLogX[1] - aLogX[0]))/ ( aPhysX[1] - aPhysX[0]); B1 = (1000 * aLogX[0]) - A1 * aPhysX[0]; A2 = (1000 * ( aLogY[1] - aLogY[0]))/ ( aPhysY[1] - aPhysY[0]); B2 = (1000 * aLogY[0]) - A2 * aPhysY[0]; data1.b.A1 = A1; data1.b.B1 = B1; k_BkupSaveParameter(RTC_BKP_DR0, data1.d32); data2.b.A2 = A2; data2.b.B2 = B2; data2.b.IsCalibrated = 1; k_BkupSaveParameter(RTC_BKP_DR1, data2.d32); /* Display the result */ GUI_Clear(); _DispStringCentered("Touch screen has been\n" "calibrated. Please use\n" "the cursor to test\n" "the calibration..."); } CALIBRATION_Done = 1; GUI_Delay(1000); }
/********************************************************************* * * 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); } }
/********************************************************************* * * MainTask */ void CALIBRATION_Check(void) { int aPhysX[2], aPhysY[2], aLogX[2], aLogY[2], i; // data1.d32 = BACKUP_RestoreParameter(RTC_BKP_DR0); // data2.d32 = BACKUP_RestoreParameter(RTC_BKP_DR1); data1.d32 = 0; data2.d32 = 0; A2 = data2.b.A2 ; B2 = data2.b.B2 ; A1 = data1.b.A1 ; B1 = data1.b.B1 ; if(data2.b.IsCalibrated == 0) /*触摸没有计算*/ { GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font20B_ASCII); _Explain(); /*显示explain文字*/ /* Set the logical values 在什么地方画圆,设置触摸点(15,15)(X-15,Y-15)两点 */ 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 */ A1 = (1000 * ( aLogX[1] - aLogX[0]))/ ( aPhysX[1] - aPhysX[0]); B1 = (1000 * aLogX[0]) - A1 * aPhysX[0]; A2 = (1000 * ( aLogY[1] - aLogY[0]))/ ( aPhysY[1] - aPhysY[0]); B2 = (1000 * aLogY[0]) - A2 * aPhysY[0]; data1.b.A1 = A1; data1.b.B1 = B1; // BACKUP_SaveParameter(RTC_BKP_DR0, data1.d32); data2.b.A2 = A2; data2.b.B2 = B2; data2.b.IsCalibrated = 1; // BACKUP_SaveParameter(RTC_BKP_DR1, data2.d32); /* Display the result */ GUI_CURSOR_Show(); /*显示光标*/ GUI_Clear(); _DispStringCentered("Touch screen has been\n" "calibrated. Please use\n" "the cursor to test\n" "the calibration..."); } CALIBRATION_Done = 1; GUI_Delay(1000); }