413 lines
17 KiB
Plaintext
413 lines
17 KiB
Plaintext
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)
|