C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 1 C51 COMPILER V9.51, COMPILATION OF MODULE TS_SEVICE OBJECT MODULE PLACED IN .\hex\ts_sevice.obj COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TS_Lib\Sources\ts_sevice.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG PRINT(.\lst\t -s_sevice.lst) TABS(2) OBJECT(.\hex\ts_sevice.obj) line level source 1 #ifndef TS_SERVICE_C 2 #define TS_SERVICE_C 3 /********************************************************************************************************* -************/ 4 #include "ca51f5_config.h" 5 #include "includes\ca51f5sfr.h" 6 #include "includes\ca51f5xsfr.h" 7 #include "includes\gpiodef_f5.h" 8 /********************************************************************************************************* -************/ 9 #include "TS_Lib\Includes\ts_def.h" 10 #include "TS_Lib\Includes\ts_api.h" 11 #include "TS_Lib\Includes\ts_service.h" 12 /********************************************************************************************************* -************/ 13 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 //´¥Ãþ¹Ü½Å³õʼ»¯ 15 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 code unsigned char *pXSFR[]= 17 { 18 &P31F, 19 &P30F, 20 &P07F, 21 &P06F, 22 &P05F, 23 &P04F, 24 &P03F, 25 &P02F, 26 &P01F, 27 &P00F, 28 &P34F, 29 &P33F, 30 &P32F, 31 }; 32 void TS_IO_init(void) 33 { 34 1 unsigned char i; 35 1 unsigned char *pPinS; 36 1 GPIO_Init(P35F,P35_CAP_SETTING); 37 1 38 1 for(i = 0; i < TS_Cnt; i++) 39 1 { 40 2 pPinS = pXSFR[TS_CH[i]]; 41 2 *pPinS = 4; 42 2 } 43 1 } 44 void TS_SetChannel(unsigned char index,unsigned char ch) 45 { 46 1 switch(index) 47 1 { 48 2 case 0: 49 2 TK0CHS = MPOL(0)|NPOL(1)|TKPS(ch); 50 2 break; 51 2 case 1: C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 2 52 2 TK1CHS = MPOL(0)|NPOL(1)|TKPS(ch); 53 2 break; 54 2 case 2: 55 2 TK2CHS = MPOL(0)|NPOL(1)|TKPS(ch); 56 2 break; 57 2 case 3: 58 2 TK3CHS = MPOL(0)|NPOL(1)|TKPS(ch); 59 2 break; 60 2 case 4: 61 2 TK4CHS = MPOL(0)|NPOL(1)|TKPS(ch); 62 2 break; 63 2 case 5: 64 2 TK5CHS = MPOL(0)|NPOL(1)|TKPS(ch); 65 2 break; 66 2 } 67 1 } 68 void TS_ScanStart(void) 69 { 70 1 unsigned char i,j; 71 1 for(i = 0; i < 6; i++) 72 1 { 73 2 if(TS_Index + i >= TS_Cnt) 74 2 { 75 3 TS_SetChannel(i,14); 76 3 for(j = i+1; j < 6; j++) 77 3 { 78 4 TS_SetChannel(j,0); 79 4 } 80 3 break; 81 3 } 82 2 TS_SetChannel(i,(TS_CH[TS_Index+i])+1); 83 2 } 84 1 TKCON |= TKST(1); 85 1 } 86 unsigned char TS_GetDataArea(unsigned char ts_ch,unsigned int ts_data,int NoiseThd,bit key_pressed_flag) 87 { 88 1 int Delta; 89 1 int FingerThd; 90 1 91 1 Delta = (int)TS_BaseLineData[ts_ch] - (int)ts_data; 92 1 FingerThd = TSKey_FingerThd[ts_ch]; 93 1 94 1 if(key_pressed_flag) 95 1 { 96 2 FingerThd = (FingerThd*9)/10; 97 2 } 98 1 99 1 if(Delta >= FingerThd) return AREA_FINGER_TOUCH; 100 1 else if(Delta > NoiseThd) return AREA_PNOISE_PLUS; 101 1 else if(Delta >= 0) return AREA_PNOISE; 102 1 else if(Delta >= -NoiseThd) return AREA_NNOISE; 103 1 else return AREA_OVER_LOW; 104 1 } 105 unsigned char TS_AreaDeviateDetection(unsigned int cmp_data,unsigned int real_data,int range) 106 { 107 1 int Delta; 108 1 Delta = (int)cmp_data - (int)real_data; 109 1 if((Delta <= range) && (Delta >= -range)) 110 1 { 111 2 return 1; 112 2 } 113 1 else C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 3 114 1 { 115 2 return 0; 116 2 } 117 1 } 118 void TS_BaseLineForceUpdate(void) 119 { 120 1 unsigned char i; 121 1 122 1 for(i = 0; i < TS_Cnt; i++) 123 1 { 124 2 TS_FirstAreaData[i] = TS_PostData[i]; 125 2 TS_BaseLineData[i] = TS_PostData[i]; 126 2 TS_AreaConfirmTimerSet(i,AREA_PNOISE); 127 2 } 128 1 } 129 130 void TS_AreaConfirmTimerSet(unsigned char ts_ch, unsigned char area) 131 { 132 1 TS_AreaConfirmTimer[ts_ch] = AREA_CONFIRM_TIME_TAB[area]; 133 1 } 134 void SetWheelSliderRefCh(unsigned char Slider_Cnt) 135 { 136 1 unsigned char i,j; 137 1 unsigned int MinVal; 138 1 MinVal = 0xFFFF; 139 1 for(i = TS_BaseCh,j=0; i < TS_BaseCh + Slider_Cnt; i++,j++) 140 1 { 141 2 if(TS_BaseLineData[i] < MinVal) 142 2 { 143 3 WheelSliderRefCh = j; 144 3 MinVal = TS_BaseLineData[i]; 145 3 } 146 2 } 147 1 } 148 #define WHEEL_SLIDER_POSITION_FILTER_COUNT 4 149 int WheelTouchJudge(unsigned char WHEEL_SLIDER0_CH_COUNT_V,unsigned int WHEEL_SLIDER0_TOUCH_THD_V) 150 { 151 1 unsigned char i; 152 1 unsigned long int CalcTemp1; 153 1 unsigned int CalcTemp2,CalcTemp3; 154 1 unsigned char DeltaRate; 155 1 int Delta; 156 1 unsigned int MaxDelta1,MaxDelta2/*,MaxDelta3*/; 157 1 unsigned char Maxidx1,Maxidx2/*,Maxidx3*/; 158 1 int Position,PosOffset; 159 1 160 1 MaxDelta1 = MaxDelta2 = /*MaxDelta3 =*/ 0; 161 1 for(i = 0; i < WHEEL_SLIDER0_CH_COUNT_V; i++) 162 1 { 163 2 if(i == WheelSliderRefCh) 164 2 { 165 3 Delta = (int)TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - (int)TS_PostData[TS_BaseCh + WheelSlide -rRefCh]; 166 3 } 167 2 else 168 2 { 169 3 CalcTemp1 = (unsigned long int)TS_PostData[TS_BaseCh + i] * (unsigned long int)TS_BaseLineData[TS_Base -Ch + WheelSliderRefCh]; 170 3 CalcTemp2 = (unsigned int)(CalcTemp1/TS_BaseLineData[TS_BaseCh + i]); 171 3 CalcTemp3 = TS_PostData[TS_BaseCh + i] + TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - CalcTemp2; 172 3 CalcTemp2 = (unsigned int)(CalcTemp1/CalcTemp3); 173 3 Delta = (int)TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - (int)CalcTemp2; C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 4 174 3 } 175 2 if(Delta < 0) Delta = 0; 176 2 177 2 178 2 if(Delta > MaxDelta1) 179 2 { 180 3 // Maxidx3 = Maxidx2; MaxDelta3 = MaxDelta2; 181 3 Maxidx2 = Maxidx1; MaxDelta2 = MaxDelta1; 182 3 Maxidx1 = i; MaxDelta1 = Delta; 183 3 } 184 2 else if(Delta > MaxDelta2) 185 2 { 186 3 // Maxidx3 = Maxidx2; MaxDelta3 = MaxDelta2; 187 3 Maxidx2 = i; MaxDelta2 = Delta; 188 3 } 189 2 // else if(Delta > MaxDelta3) 190 2 // { 191 2 // Maxidx3 = i; MaxDelta3 = Delta; 192 2 // } 193 2 } 194 1 195 1 if((MaxDelta1 + MaxDelta2) < WHEEL_SLIDER0_TOUCH_THD_V) 196 1 { 197 2 return -1; 198 2 } 199 1 200 1 Delta = MaxDelta1 - (WHEEL_SLIDER0_TOUCH_THD_V>>1); 201 1 DeltaRate = (Delta*10)/MaxDelta1; 202 1 if(DeltaRate > 31) DeltaRate = 31; 203 1 204 1 CalcTemp2 = ((unsigned int)WHEEL_SLIDER0_TOUCH_THD_V*(32-DeltaRate))>>6; 205 1 206 1 MaxDelta1 += CalcTemp2; 207 1 MaxDelta2 += CalcTemp2; 208 1 209 1 DeltaRate = ((unsigned int)MaxDelta2<<7)/MaxDelta1; 210 1 if(WheelSliderCapRateFilter == 0) 211 1 { 212 2 WheelSliderCapRateFilter = DeltaRate*WHEEL_SLIDER_POSITION_FILTER_COUNT; 213 2 } 214 1 else 215 1 { 216 2 WheelSliderCapRateFilter -= WheelSliderCapRateFilter/WHEEL_SLIDER_POSITION_FILTER_COUNT; 217 2 WheelSliderCapRateFilter += DeltaRate; 218 2 } 219 1 DeltaRate = WheelSliderCapRateFilter/WHEEL_SLIDER_POSITION_FILTER_COUNT; 220 1 WheelSliderMaxIdx = Maxidx1; 221 1 222 1 { 223 2 bit dir_flag; 224 2 Position = Maxidx1*64; 225 2 if(DeltaRate < WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1]) DeltaRate = WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1]; 226 2 PosOffset = ((DeltaRate - WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1])*32)/(128-WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1 -]); 227 2 228 2 if((Maxidx1 == 0) && (Maxidx2 == (WHEEL_SLIDER0_CH_COUNT_V-1))) dir_flag = 0; 229 2 else if((Maxidx1 == (WHEEL_SLIDER0_CH_COUNT_V-1)) && (Maxidx2 == 0)) dir_flag = 1; 230 2 else if(Maxidx1 < Maxidx2) dir_flag = 1; 231 2 else dir_flag = 0; 232 2 233 2 if(dir_flag) 234 2 { C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 5 235 3 Position += PosOffset; 236 3 } 237 2 else 238 2 { 239 3 if(Position == 0) 240 3 { 241 4 Position = WHEEL_SLIDER0_CH_COUNT_V*64-1; 242 4 } 243 3 Position -= PosOffset; 244 3 } 245 2 } 246 1 return Position; 247 1 } 248 int SliderTouchJudge(unsigned char WHEEL_SLIDER0_CH_COUNT_V,unsigned int WHEEL_SLIDER0_TOUCH_THD_V) 249 { 250 1 unsigned char i; 251 1 unsigned long int CalcTemp1; 252 1 unsigned int CalcTemp2,CalcTemp3; 253 1 unsigned char DeltaRate; 254 1 int Delta; 255 1 unsigned int MaxDelta1,MaxDelta2/*,MaxDelta3*/; 256 1 unsigned char Maxidx1,Maxidx2/*,Maxidx3*/; 257 1 int Position,PosOffset; 258 1 259 1 MaxDelta1 = MaxDelta2 = /*MaxDelta3 =*/ 0; 260 1 for(i = 0; i < WHEEL_SLIDER0_CH_COUNT_V; i++) 261 1 { 262 2 if(i == WheelSliderRefCh) 263 2 { 264 3 Delta = (int)TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - (int)TS_PostData[TS_BaseCh + WheelSlide -rRefCh]; 265 3 } 266 2 else 267 2 { 268 3 CalcTemp1 = (unsigned long int)TS_PostData[TS_BaseCh + i] * (unsigned long int)TS_BaseLineData[TS_Base -Ch + WheelSliderRefCh]; 269 3 CalcTemp2 = (unsigned int)(CalcTemp1/TS_BaseLineData[TS_BaseCh + i]); 270 3 CalcTemp3 = TS_PostData[TS_BaseCh + i] + TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - CalcTemp2; 271 3 CalcTemp2 = (unsigned int)(CalcTemp1/CalcTemp3); 272 3 Delta = (int)TS_BaseLineData[TS_BaseCh + WheelSliderRefCh] - (int)CalcTemp2; 273 3 } 274 2 if(Delta < 0) Delta = 0; 275 2 276 2 277 2 if(Delta > MaxDelta1) 278 2 { 279 3 // Maxidx3 = Maxidx2; MaxDelta3 = MaxDelta2; 280 3 Maxidx2 = Maxidx1; MaxDelta2 = MaxDelta1; 281 3 Maxidx1 = i; MaxDelta1 = Delta; 282 3 } 283 2 else if(Delta > MaxDelta2) 284 2 { 285 3 // Maxidx3 = Maxidx2; MaxDelta3 = MaxDelta2; 286 3 Maxidx2 = i; MaxDelta2 = Delta; 287 3 } 288 2 // else if(Delta > MaxDelta3) 289 2 // { 290 2 // Maxidx3 = i; MaxDelta3 = Delta; 291 2 // } 292 2 } 293 1 if(((Maxidx1 == 0)||(Maxidx1 == (WHEEL_SLIDER0_CH_COUNT_V-1)))) 294 1 { C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 6 295 2 if((MaxDelta1) < (WHEEL_SLIDER0_TOUCH_THD_V>>1)) 296 2 { 297 3 return -1; 298 3 } 299 2 } 300 1 else 301 1 { 302 2 if((MaxDelta1 + MaxDelta2) < WHEEL_SLIDER0_TOUCH_THD_V) 303 2 { 304 3 return -1; 305 3 } 306 2 } 307 1 308 1 Delta = MaxDelta1 - (WHEEL_SLIDER0_TOUCH_THD_V>>1); 309 1 DeltaRate = (Delta*10)/MaxDelta1; 310 1 if(DeltaRate > 31) DeltaRate = 31; 311 1 312 1 CalcTemp2 = ((unsigned int)WHEEL_SLIDER0_TOUCH_THD_V*(32-DeltaRate))>>6; 313 1 314 1 MaxDelta1 += CalcTemp2; 315 1 MaxDelta2 += CalcTemp2; 316 1 317 1 DeltaRate = ((unsigned int)MaxDelta2<<7)/MaxDelta1; 318 1 if(WheelSliderCapRateFilter == 0) 319 1 { 320 2 WheelSliderCapRateFilter = DeltaRate*WHEEL_SLIDER_POSITION_FILTER_COUNT; 321 2 } 322 1 else 323 1 { 324 2 WheelSliderCapRateFilter -= WheelSliderCapRateFilter/WHEEL_SLIDER_POSITION_FILTER_COUNT; 325 2 WheelSliderCapRateFilter += DeltaRate; 326 2 } 327 1 DeltaRate = WheelSliderCapRateFilter/WHEEL_SLIDER_POSITION_FILTER_COUNT; 328 1 WheelSliderMaxIdx = Maxidx1; 329 1 330 1 Position = Maxidx1*64; 331 1 if(Maxidx1 == 0) 332 1 { 333 2 if(DeltaRate < WHEEL_SLIDER0_MAX_MIN_TAB[0]) 334 2 { 335 3 DeltaRate = WHEEL_SLIDER0_MAX_MIN_TAB[0]; 336 3 } 337 2 Position = ((DeltaRate - WHEEL_SLIDER0_MAX_MIN_TAB[0])*32)/(128-WHEEL_SLIDER0_MAX_MIN_TAB[0]); 338 2 } 339 1 else if(Maxidx1 == (WHEEL_SLIDER0_CH_COUNT_V-1)) 340 1 { 341 2 if(DeltaRate < WHEEL_SLIDER0_MAX_MIN_TAB[WHEEL_SLIDER0_CH_COUNT_V-1]) 342 2 { 343 3 DeltaRate = WHEEL_SLIDER0_MAX_MIN_TAB[WHEEL_SLIDER0_CH_COUNT_V-1]; 344 3 } 345 2 Position -= ((DeltaRate - WHEEL_SLIDER0_MAX_MIN_TAB[WHEEL_SLIDER0_CH_COUNT_V-1])*32)/(128-WHEEL_SLIDER0_ -MAX_MIN_TAB[WHEEL_SLIDER0_CH_COUNT_V-1]); 346 2 } 347 1 else 348 1 { 349 2 if(DeltaRate < WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1]) DeltaRate = WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1]; 350 2 PosOffset = ((DeltaRate - WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1])*32)/(128-WHEEL_SLIDER0_MAX_MIN_TAB[Maxidx1 -]); 351 2 if(Maxidx1 < Maxidx2) 352 2 { 353 3 Position += PosOffset; 354 3 } C51 COMPILER V9.51 TS_SEVICE 11/15/2019 16:16:26 PAGE 7 355 2 else 356 2 { 357 3 Position -= PosOffset; 358 3 } 359 2 } 360 1 return Position; 361 1 } 362 #endif MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 1853 ---- CONSTANT SIZE = 39 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 45 IDATA SIZE = ---- ---- BIT SIZE = ---- 2 EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)