Files
r3_delay_3/lst/ts_sevice.lst
T
2025-07-07 10:41:49 +08:00

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)