Files
r3_delay_3/lst/ts_api.lst
T
moyuhai f0bbac3bb3 V1.0
2026-06-11 17:26:06 +08:00

1944 lines
74 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 1
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TS_API
OBJECT MODULE PLACED IN .\hex\ts_api.obj
COMPILER INVOKED BY: C:\keil5\C51\BIN\C51.EXE TS_Lib\Sources\ts_api.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG PRINT(.\lst\ts_
-api.lst) TABS(2) OBJECT(.\hex\ts_api.obj)
line level source
1 #ifndef _TK_API_C_
2 #define _TK_API_C_
3
4 /*********************************************************************************************************
-************/
5 #include "ca51f5_config.h"
6 #include "includes\ca51f5sfr.h"
7 #include "includes\ca51f5xsfr.h"
8 #include "includes\gpiodef_f5.h"
9
10 #include "Library\Includes\tmc.h"
11 #include "Library\Includes\system_clock.h"
12 #include "Library\includes\uart.h"
13 #include "includes\system.h"
14
15 #include "Library\includes\delay.h"
16 #include <intrins.h>
17 /*********************************************************************************************************
-************/
18 #include "TS_Lib\Includes\ts_configuration.h"
*** WARNING C329 IN LINE 120 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 121 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 122 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 123 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 124 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 125 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 126 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 127 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 143 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
*** WARNING C329 IN LINE 144 OF TS_Lib\Includes\ts_configuration.h: single-line comment contains line-continuation
19 #include "TS_Lib\Includes\ts_def.h"
20 #include "TS_Lib\Includes\ts_api.h"
21 #include "TS_Lib\Includes\ts_service.h"
22 /*********************************************************************************************************
-************/
23
24 #include "rf_send.h"
25
26 void Debug_init(void);
27 void Debug_ParamLoad(void);
28 #if SUPPORT_KEY
29 #if TK_SENSITIVE_AUTO_TRIM_EN
void TK_TouchThdTrim(unsigned char ch);
#endif
32 code unsigned int TS_KEY_CH_INFO_SEQ[][2]=
33 {
34 KEY_SEQ
35 };
36 #if TK_SENSITIVE_AUTO_TRIM_EN
code unsigned int TK_BASELINE_VALUE_INFO_SEQ[]=
{
TK_BASELINE_VALUE_SEQ
};
#endif
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 2
42 #endif
43 #if SUPPORT_WHEEL_SLIDER
44 code unsigned char TS_WHEEL_SLIDER_CH_SEQ[]=
45 {
46 WHEEL_SLIDER0_SEQ,
47 };
48 code unsigned char WHEEL_SLIDER0_MAX_MIN_TAB[]={WHEEL_SLIDER0_CH_MIN_RATE};
49 #else
code unsigned char WHEEL_SLIDER0_MAX_MIN_TAB[1]={0};
#endif
52 #if SUPPORT_KEY
53 code TYPE_SN MASK_TAB[]=
54 {
55 0x0001,
56 #if (KEY_CH_COUNT > 1)
57 0x0002,
58 #endif
59 #if (KEY_CH_COUNT > 2)
60 0x0004,
61 #endif
62 #if (KEY_CH_COUNT > 3)
63 0x0008,
64 #endif
65 #if (KEY_CH_COUNT > 4)
66 0x0010,
67 #endif
68 #if (KEY_CH_COUNT > 5)
69 0x0020,
70 #endif
71 #if (KEY_CH_COUNT > 6)
72 0x0040,
73 #endif
74 #if (KEY_CH_COUNT > 7)
75 0x0080,
76 #endif
77 #if (KEY_CH_COUNT > 8)
0x0100,
#endif
80 #if (KEY_CH_COUNT > 9)
0x0200,
#endif
83 #if (KEY_CH_COUNT > 10)
0x0400,
#endif
86 #if (KEY_CH_COUNT > 11)
0x0800,
#endif
89 #if (KEY_CH_COUNT > 12)
0x1000,
#endif
92
93 };
94 code unsigned char AREA_CONFIRM_TIME_TAB[]=
95 {
96 FINGER_TOUCH_CONFIRM_TIME,
97 AREA_PNOISE_PLUS_CONFIRM_TIME,
98 AREA_PNOISE_CONFIRM_TIME,
99 AREA_NNOISE_CONFIRM_TIME,
100 AREA_OVERLOW_CONFIRM_TIME,
101 };
102 #else
code unsigned char AREA_CONFIRM_TIME_TAB[1]={0};
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 3
code unsigned int MASK_TAB[1]={0};
#endif
106 void TS_MS_ISR (void)
107 {
108 1 static unsigned char xdata ms_cnt = 0;
109 1 unsigned char i;
110 1
111 1 ms_cnt++;
112 1 if(ms_cnt >= 4)
113 1 {
114 2 ms_cnt = 0;
115 2 for(i = 0; i < TS_Cnt; i++)
116 2 {
117 3 if(TS_AreaConfirmTimer[i])
118 3 {
119 4 TS_AreaConfirmTimer[i]--;
120 4 }
121 3 }
122 2 #if SUPPORT_WHEEL_SLIDER
123 2 if(TSWheelSlider_TouchConfirmTimer)
124 2 {
125 3 TSWheelSlider_TouchConfirmTimer--;
126 3 }
127 2 #endif
128 2 #if SUPPORT_KEY
129 2 #if SUPPORT_COVER_PANAL_AFTER_POWERON
if(PanalCoverJudgeTimer) PanalCoverJudgeTimer--;
#endif
132 2 #endif
133 2 #if SUPPORT_KEY
134 2 #if ANTI_SPEAKER_EN
if(RefChDataTimer) RefChDataTimer--;
#endif
137 2 #endif
138 2 }
139 1 }
140 void TS_HS_ISR (void)
141 {
142 1 #if SUPPORT_KEY
143 1 #if (FINGER_LONG_TOUCH_TIME_LIMIT > 0)
unsigned char i;
#endif
146 1 #endif
147 1 TS_HalfSecCnt++;
148 1
149 1 #if SUPPORT_KEY
150 1 #if (FINGER_LONG_TOUCH_TIME_LIMIT > 0)
for(i = 0; i < KEY_CH_COUNT; i++)
{
if(TSKey_LongTouchLimitTimer[i])
{
TSKey_LongTouchLimitTimer[i]--;
}
}
#endif
159 1 #endif
160 1 #if SUPPORT_WHEEL_SLIDER
161 1 #if (WHEEL_SLIDER_LONG_TOUCH_TIME_LIMIT > 0)
if(TSWheelSlider_LongTouchLimitTimer)
{
TSWheelSlider_LongTouchLimitTimer--;
}
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 4
#endif
167 1 #endif
168 1 if(TS_RefCHBaseLineAdjuTimer)
169 1 {
170 2 TS_RefCHBaseLineAdjuTimer--;
171 2 }
172 1 if(EnterStopScanTimer)
173 1 {
174 2 EnterStopScanTimer--;
175 2 }
176 1 }
177 void TS_ISR (void)
178 {
179 1 unsigned char i;
180 1 WORD_UNION TS_Data[6];
181 1 #if TK_FREQ_JUMP_EN
static unsigned int xdata TSDataTemp[2][OPENED_TS_COUNT+1];
unsigned int xdata delta[2];
unsigned int min_delta;
unsigned char min_index;
unsigned char j;
#endif
188 1 if(TLFLG & (TLERR|TLKOV|TLLOV))
189 1 {
190 2 TLFLG |= TLERR|TLKOV|TLLOV;
191 2 }
192 1
193 1 if(TKIF & TKIF0)
194 1 {
195 2 TKIF = TKIF0;
196 2 TS_Data[0].bVal[0] = TK0MSH;
197 2 TS_Data[0].bVal[1] = TK0MSL;
198 2 }
199 1 if(TKIF & TKIF1)
200 1 {
201 2 TKIF = TKIF1;
202 2 TS_Data[1].bVal[0] = TK1MSH;
203 2 TS_Data[1].bVal[1] = TK1MSL;
204 2 }
205 1 if(TKIF & TKIF2)
206 1 {
207 2 TKIF = TKIF2;
208 2 TS_Data[2].bVal[0] = TK2MSH;
209 2 TS_Data[2].bVal[1] = TK2MSL;
210 2 }
211 1 if(TKIF & TKIF3)
212 1 {
213 2 TKIF = TKIF3;
214 2 TS_Data[3].bVal[0] = TK3MSH;
215 2 TS_Data[3].bVal[1] = TK3MSL;
216 2 }
217 1 if(TKIF & TKIF4)
218 1 {
219 2 TKIF = TKIF4;
220 2 TS_Data[4].bVal[0] = TK4MSH;
221 2 TS_Data[4].bVal[1] = TK4MSL;
222 2 }
223 1 if(TKIF & TKIF5)
224 1 {
225 2 TKIF = TKIF5;
226 2 TS_Data[5].bVal[0] = TK5MSH;
227 2 TS_Data[5].bVal[1] = TK5MSL;
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 5
228 2 }
229 1
230 1 for(i = 0; i < 6; i++)
231 1 {
232 2 #if TK_FREQ_JUMP_EN
if(TS_State == TS_DEAL)
{
TSDataTemp[NowTKFreqIndex][TS_Index+i] = TS_Data[i].wVal;
if(NowTKFreqIndex == 1)
{
min_delta = 0xFFFF;
for(j = 0; j < 2; j++)
{
if(TSDataTemp[j][TS_Index+i] > TS_JumpFreqData[j][TS_Index+i]/TS_ACQ_TIMES)
{
delta[j] = TSDataTemp[j][TS_Index+i] - TS_JumpFreqData[j][TS_Index+i]/TS_ACQ_TIMES;
}
else
{
delta[j] = TS_JumpFreqData[j][TS_Index+i]/TS_ACQ_TIMES - TSDataTemp[j][TS_Index+i];
}
if(delta[j] < min_delta)
{
min_delta = delta[j];
min_index = j;
}
}
TS_Data[i].wVal = TSDataTemp[min_index][TS_Index+i] + TS_JumpFreqData[1][TS_Index+i]/TS_ACQ_TIMES - TS
-_JumpFreqData[min_index][TS_Index+i]/TS_ACQ_TIMES;
}
}
#endif
261 2 #if TK_FREQ_JUMP_EN
if(((TS_State == TS_DEAL)&&(NowTKFreqIndex == 1)) ||(TS_State != TS_DEAL))
#endif
264 2 {
265 3 #if (TS_ACQ_TIMES == 1)
266 3 TS_RawData[TS_Index+i] = TS_Data[i].wVal;
267 3 #else
TS_DataSum[TS_Index+i] += TS_Data[i].wVal;
#endif
270 3 }
271 2 if(TS_Index+i == TS_Cnt)
272 2 {
273 3 break;
274 3 }
275 2
276 2 }
277 1 #if TK_FREQ_JUMP_EN
if(TS_State == TS_DEAL)
{
if(NowTKFreqIndex == 1)
{
NowTKFreqIndex = 0;
TKCFG = TKDIV(TKDIV_VAL2)|TKTMS(TKTMS_VAL);
TKCON |= TKST(1);
return;
}
else
{
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 6
NowTKFreqIndex = 1;
TKCFG = TKDIV(TKDIV_VAL)|TKTMS(TKTMS_VAL);
}
}
#endif
294 1 if(TS_Index+6 > TS_Cnt)
295 1 {
296 2 #if (TS_ACQ_TIMES == 1)
297 2 TS_CycleScanDoneFlag = 1;
298 2 #else
TS_Acq_Counter++;
if(TS_Acq_Counter >= TS_ACQ_TIMES)
{
for(i = 0; i < TS_Cnt+1; i++)
{
TS_RawData[i] = TS_DataSum[i];
TS_DataSum[i] = 0;
}
TS_CycleScanDoneFlag = 1;
TS_Acq_Counter = 0;
}
#endif
311 2 TS_Index = 0;
312 2 }
313 1 else
314 1 {
315 2 TS_Index += 6;
316 2 }
317 1 TS_ScanStart();
318 1 if(TS_HalfSecCnt) TS_HalfSecCnt--;
319 1 if(MainLoopCnt1 != MainLoopCnt2)
320 1 {
321 2 MainLoopCnt2 = MainLoopCnt1;
322 2 WDFLG = 0xA5;
323 2 }
324 1 }
325 void TS_DataFiltering(void)
326 {
327 1 unsigned char i;
328 1 #if (FILTER_COUNT > 1)
329 1 unsigned char j;
330 1 unsigned int DataSum,DataMax,DataMin;
331 1 #endif
332 1 for(i = 0; i < TS_Cnt+1; i++)
333 1 {
334 2 #if (FILTER_COUNT == 1)
TS_PostData[i] = TS_RawData[i];
#else
337 2 TS_FilterPosIdx[i]++;
338 2 if(TS_FilterPosIdx[i] >= FILTER_COUNT)
339 2 {
340 3 TS_FilterPosIdx[i] = 0;
341 3 }
342 2 INT3EN = 0;
343 2 TS_FilterBuf[i][TS_FilterPosIdx[i]] = TS_RawData[i];
344 2 INT3EN = 1;
345 2
346 2 DataSum = 0;
347 2 DataMax = 0;
348 2 DataMin = 0xFFFF;
349 2 for(j = 0; j < FILTER_COUNT; j++)
350 2 {
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 7
351 3 DataSum += TS_FilterBuf[i][j];
352 3 #if (FILTER_COUNT > 2)
353 3 if(TS_FilterBuf[i][j] > DataMax)
354 3 {
355 4 DataMax = TS_FilterBuf[i][j];
356 4 }
357 3 if(TS_FilterBuf[i][j] < DataMin)
358 3 {
359 4 DataMin = TS_FilterBuf[i][j];
360 4 }
361 3 #endif
362 3 }
363 2 #if (FILTER_COUNT == 2)
TS_PostData[i] = (DataSum)/(FILTER_COUNT);
#else
366 2 TS_PostData[i] = (DataSum - DataMax - DataMin)/(FILTER_COUNT-2);
367 2 #endif
368 2 #endif
369 2 }
370 1 }
371 #if SUPPORT_KEY
372 #if ANTI_SPEAKER_EN
bit TS_RefChAbnormalJudge(void)
{
unsigned int ref_value,crt_value,delta;
if(RefChDataBufIdx == (REF_CH_DATA_BUF_SIZE-1))
{
ref_value = RefChDataBuf[0];
}
else
{
ref_value = RefChDataBuf[RefChDataBufIdx + 1];
}
crt_value = TS_PostData[OPENED_TS_COUNT];
if(ref_value > crt_value)
{
delta = ref_value - crt_value;
}
else
{
delta = crt_value - ref_value;
}
if(delta >= REF_CH_ABNORMAL_THD)
{
return 1;
}
else
{
return 0;
}
}
void TS_RefChCheck(void)
{
if(!RefChDataTimer)
{
RefChDataTimer = 3;
RefChDataBufIdx++;
if(RefChDataBufIdx >= REF_CH_DATA_BUF_SIZE)
{
RefChDataBufIdx = 0;
}
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 8
RefChDataBuf[RefChDataBufIdx] = TS_PostData[OPENED_TS_COUNT];
}
}
#endif
417 #endif
418 void TS_RunInit(void)
419 {
420 1 unsigned char i,j;
421 1 static unsigned char TS_ScanTimes=0;
422 1 #if (POWER_ON_WAIT_TK_STABLE_EN || TK_FREQ_JUMP_EN)
static unsigned char TS_Init_Step_Sub;
#endif
425 1 if(TS_Init_Step == 0)
426 1 {
427 2 #if (TS_ACQ_TIMES > 1)
for(i = 0; i < TS_Cnt; i++)
{
TS_DataSum[i] = 0;
}
TS_Acq_Counter = 0;
#endif
434 2 #if TK_FREQ_JUMP_EN
NowTKFreqIndex = 0;
TKCFG = TKDIV(TKDIV_VAL2)|TKTMS(TKTMS_VAL);
TS_Init_Step_Sub = 0;
#endif
439 2 TS_CycleScanDoneFlag = 0;
440 2 TS_HalfSecCnt = 0;
441 2 TS_Index = 0;
442 2 TS_ScanStart();
443 2 #if POWER_ON_WAIT_TK_STABLE_EN
TS_Init_Step = 1;
TS_Init_Step_Sub = 0;
TS_ScanTimes = 5;
#else
448 2 TS_Init_Step = 2;
449 2 TS_ScanTimes = 50;
450 2 #endif
451 2 }
452 1 #if POWER_ON_WAIT_TK_STABLE_EN
else if(TS_Init_Step == 1)
{
if(TS_CycleScanDoneFlag)
{
TS_CycleScanDoneFlag = 0;
if(TS_Init_Step_Sub == 0)
{
if(--TS_ScanTimes)
{
return;
}
for(i = 0; i < TS_Cnt+1; i++)
{
TS_PostData[i] = TS_RawData[i];
}
TS_Init_Step_Sub = 1;
TS_AreaConfirmTimer[0] = 40;
}
else if(TS_Init_Step_Sub == 1)
{
if(!TS_AreaConfirmTimer[0])
{
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 9
int delta;
for(i = 0; i < TS_Cnt+1; i++)
{
delta = (int)TS_PostData[i] - (int)TS_RawData[i];
if((delta > NOISE_THRESHOLD) || (delta < -NOISE_THRESHOLD))
{
TS_Init_Step_Sub = 0;
return;
}
}
TS_Init_Step = 2;
TS_ScanTimes = 10;
}
}
}
}
#endif
492 1 else if(TS_Init_Step == 2)
493 1 {
494 2 if(TS_CycleScanDoneFlag)
495 2 {
496 3 TS_CycleScanDoneFlag = 0;
497 3 if(--TS_ScanTimes)
498 3 {
499 4 return;
500 4 }
501 3 #if TK_FREQ_JUMP_EN
if(TS_Init_Step_Sub == 0)
{
for(i = 0; i < TS_Cnt+1; i++)
{
TS_JumpFreqData[0][i] = TS_RawData[i];
}
TS_Init_Step_Sub++;
NowTKFreqIndex = 1;
TKCFG = TKDIV(TKDIV_VAL)|TKTMS(TKTMS_VAL);
TS_ScanTimes = 3;
return;
}
#endif
516 3 TS_RefCHBaseLineAdjuTimer = 0;
517 3 for(i = 0; i < TS_Cnt+1; i++)
518 3 {
519 4 for(j = 0; j < FILTER_COUNT; j++)
520 4 {
521 5 TS_FilterBuf[i][j] = TS_RawData[i];
522 5 }
523 4 TS_FilterPosIdx[i] = 0;
524 4
525 4 #if TK_FREQ_JUMP_EN
TS_JumpFreqData[1][i] = TS_RawData[i];
#endif
528 4
529 4 if(i == TS_Cnt) break;
530 4 TS_BaseLineData[i] = TS_RawData[i];
531 4 TS_FirstAreaData[i] = TS_RawData[i];
532 4 #if TK_BASE_TRIM_WHILE_KEY_PRESSED
RefChDataBak[i] = TS_RawData[OPENED_TS_COUNT];
TS_BaseLineDataBak[i] = TS_BaseLineData[i];
#endif
536 4 #if (SUPPORT_KEY && SUPPORT_WHEEL_SLIDER)
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 10
537 4 if(i < KEY_CH_COUNT)
538 4 {
539 5 #if TK_SENSITIVE_AUTO_TRIM_EN
TK_TouchThdTrim(i);
#else
542 5 TSKey_FingerThd[i] = TS_KEY_CH_INFO_SEQ[i][1];
543 5 #endif
544 5 TS_AreaConfirmTimerSet(i,AREA_PNOISE);
545 5 }
546 4 else
547 4 {
548 5 TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
549 5 }
550 4 #elif SUPPORT_KEY
#if TK_SENSITIVE_AUTO_TRIM_EN
TK_TouchThdTrim(i);
#else
TSKey_FingerThd[i] = TS_KEY_CH_INFO_SEQ[i][1];
#endif
TS_AreaConfirmTimerSet(i,AREA_PNOISE);
#elif SUPPORT_WHEEL_SLIDER
TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
#endif
560 4 }
561 3 #if SUPPORT_KEY
562 3 #if ANTI_SPEAKER_EN
for(i = 0; i < REF_CH_DATA_BUF_SIZE; i++)
{
RefChDataBuf[i] = TS_PostData[OPENED_TS_COUNT];
}
RefChDataBufIdx = 0;
#endif
569 3 #endif
570 3 #if (DEBUG)
Debug_ParamLoad();
#endif
573 3 TS_State = TS_DEAL;
574 3 }
575 2 }
576 1 }
577 #if SUPPORT_KEY
578 #if TK_SHARE_LED_EN
void TKLED_Set(unsigned char ch,unsigned char mode)
{
unsigned char real_ch,idx,mask_bit;
switch(mode)
{
case LED_ON:
case LED_OFF:
real_ch = TS_KEY_CH_INFO_SEQ[ch][0];
idx = real_ch>>3;
mask_bit = (real_ch&0x07);
if(mode == LED_ON)
{
if(idx == 0) TLDAT0 |= 1<<mask_bit;
else TLDAT1 |= 1<<mask_bit;
}
else
{
if(idx == 0) TLDAT0 &= ~(1<<mask_bit);
else TLDAT1 &= ~(1<<mask_bit);
}
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 11
break;
case LED_ALL_OFF:
TLDAT0 = 0;
TLDAT1 = 0;
break;
}
}
void TKLED_Update(void)
{
static TYPE_SN xdata PrevTKSN = 0;
unsigned char i;
if(PrevTKSN == KeysFlagSN) return;
for(i = 0; i < KEY_CH_COUNT; i++)
{
if(KeysFlagSN & MASK_TAB[i])
{
TKLED_Set(i,LED_ON);
}
else
{
TKLED_Set(i,LED_OFF);
}
}
PrevTKSN = KeysFlagSN;
}
#endif
625 #if TK_SENSITIVE_AUTO_TRIM_EN
void TK_TouchThdTrim(unsigned char ch)
{
unsigned int b1,b2,th1,c;
unsigned long int cal_tmp1;
unsigned int cal_tmp2;
b1 = TK_BASELINE_VALUE_INFO_SEQ[ch];
th1 = TS_KEY_CH_INFO_SEQ[ch][1];
b2 = TS_BaseLineData[ch];
cal_tmp1 = ((unsigned long int)b1*(unsigned long int)b2);
c = (unsigned int)(cal_tmp1/(b1-th1)) - b2;
cal_tmp2 = (unsigned int)(cal_tmp1/(b1+c));
TSKey_FingerThd[ch] = b2 - cal_tmp2;
}
#endif
641 #if SUPPORT_ANTI_WATER_FUNCTION
unsigned char AntiWaterModeGetMaxDeltaCh(void)
{
unsigned char i;
unsigned long int CalcTemp1;
unsigned int CalcTemp2,CalcTemp3;
int Delta;
int max_delta;
char max_index;
max_delta = 0;
for(i = 0; i < KEY_CH_COUNT; i++)
{
if(i == 0)
{
Delta = (int)TS_BaseLineData[i] - (int)TS_PostData[i];
}
else
{
CalcTemp1 = (unsigned long int)TS_PostData[i] * (unsigned long int)TS_BaseLineData[0];
CalcTemp2 = (unsigned int)(CalcTemp1/TS_BaseLineData[i]);
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 12
CalcTemp3 = TS_PostData[i] + TS_BaseLineData[0] - CalcTemp2;
CalcTemp2 = (unsigned int)(CalcTemp1/CalcTemp3);
Delta = (int)TS_BaseLineData[0] - (int)CalcTemp2;
}
if(max_delta < Delta)
{
max_delta = Delta;
max_index = i;
}
}
return max_index;
}
#endif
674 #endif
675 #if SUPPORT_KEY
676 void TSKey_DataDeal(void)
677 {
678 1 unsigned char i;
679 1 unsigned char TouchArea,NowArea;
680 1 #if SUPPORT_COVER_PANAL_AFTER_POWERON
unsigned char PanalToggleCount = 0;
#endif
683 1 for(i = 0; i < KEY_CH_COUNT; i++)
684 1 {
685 2 #if SUPPORT_ANTI_WATER_FUNCTION
if(KeyPressedFlag)
{
if(PressedKeyIndex != i)
{
TS_FirstAreaData[i] = TS_BaseLineData[i];
TS_AreaConfirmTimerSet(i,AREA_PNOISE);
continue;
}
}
#endif
696 2 TouchArea = TS_GetDataArea(i,TS_FirstAreaData[i],NOISE_THRESHOLD,(bit)(PreKeysFlagSN & MASK_TAB[i]));
697 2 NowArea = TS_GetDataArea(i,TS_PostData[i],NOISE_THRESHOLD,(bit)(PreKeysFlagSN & MASK_TAB[i]));
698 2
699 2 if((NowArea != AREA_PNOISE)&&(NowArea != AREA_NNOISE))
700 2 {
701 3 TS_StableFlag = 0;
702 3 }
703 2 #if SUPPORT_COVER_PANAL_AFTER_POWERON
if((NowArea == AREA_PNOISE_PLUS) || (NowArea == AREA_FINGER_TOUCH))
{
PanalToggleCount++;
}
#endif
709 2 if(TouchArea == AREA_FINGER_TOUCH)
710 2 {
711 3 if(NowArea == AREA_FINGER_TOUCH)
712 3 {
713 4 if(!(PreKeysFlagSN & MASK_TAB[i]))
714 4 {
715 5 if(!TS_AreaConfirmTimer[i])
716 5 {
717 6 PreKeysFlagSN |= MASK_TAB[i];
718 6 #if (FINGER_LONG_TOUCH_TIME_LIMIT > 0)
TSKey_LongTouchLimitTimer[i] = FINGER_LONG_TOUCH_TIME_LIMIT;
#endif
721 6 TS_AreaConfirmTimer[i] = FINGER_TOUCH_RELEASE_CONFIRM_TIME;
722 6 }
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 13
723 5 }
724 4 else
725 4 {
726 5 #if SUPPORT_ANTI_WATER_FUNCTION
if(i != AntiWaterModeGetMaxDeltaCh())
{
goto ANTI_WATER_MODE_KEY_RELEASE;
}
#endif
732 5
733 5 #if TK_BASE_TRIM_WHILE_KEY_PRESSED
TS_BaseLineData[i] = ((unsigned long int)TS_BaseLineDataBak[i]*TS_PostData[OPENED_TS_COUNT])/RefChDat
-aBak[i];
#endif
736 5
737 5 TS_AreaConfirmTimer[i] = FINGER_TOUCH_RELEASE_CONFIRM_TIME;
738 5 #if (FINGER_LONG_TOUCH_TIME_LIMIT > 0)
if(!TSKey_LongTouchLimitTimer[i])
{
PreKeysFlagSN &= ~MASK_TAB[i];
TS_FirstAreaData[i] = TS_PostData[i];
TS_BaseLineData[i] = TS_PostData[i];
#if TK_SENSITIVE_AUTO_TRIM_EN
TK_TouchThdTrim(i);
#endif
TS_AreaConfirmTimerSet(i,AREA_PNOISE);
#if SUPPORT_ANTI_WATER_FUNCTION
KeyPressedFlag = 0;
break;
#endif
}
#endif
754 5 }
755 4 }
756 3 else
757 3 {
758 4 if(PreKeysFlagSN & MASK_TAB[i])
759 4 {
760 5 if(!TS_AreaConfirmTimer[i])
761 5 {
762 6 #if SUPPORT_ANTI_WATER_FUNCTION
ANTI_WATER_MODE_KEY_RELEASE:
KeyPressedFlag = 0;
#endif
766 6 PreKeysFlagSN &= ~MASK_TAB[i];
767 6
768 6 TS_FirstAreaData[i] = TS_BaseLineData[i];
769 6 TS_AreaConfirmTimerSet(i,AREA_PNOISE);
770 6 #if SUPPORT_ANTI_WATER_FUNCTION
break;
#endif
773 6 }
774 5 }
775 4 else
776 4 {
777 5 TS_FirstAreaData[i] = TS_PostData[i];
778 5 TS_AreaConfirmTimerSet(i,NowArea);
779 5 }
780 4 }
781 3 continue;
782 3 }
783 2 else
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 14
784 2 {
785 3 if(NowArea == AREA_FINGER_TOUCH)
786 3 {
787 4 TS_FirstAreaData[i] = TS_PostData[i];
788 4 TS_AreaConfirmTimerSet(i,AREA_FINGER_TOUCH);
789 4 continue;
790 4 }
791 3 }
792 2 if(PreKeysFlagSN != 0)
793 2 {
794 3 TS_FirstAreaData[i] = TS_BaseLineData[i];
795 3 TS_AreaConfirmTimerSet(i,AREA_PNOISE);
796 3 continue;
797 3 }
798 2 if(TS_AreaDeviateDetection(TS_FirstAreaData[i],TS_PostData[i],NOISE_THRESHOLD)) //жƫǷ
-Χ
799 2 {
800 3 if(!TS_AreaConfirmTimer[i])
801 3 {
802 4 TS_FirstAreaData[i] = TS_PostData[i];
803 4 TS_BaseLineData[i] = TS_PostData[i];
804 4
805 4 #if TK_SENSITIVE_AUTO_TRIM_EN
TK_TouchThdTrim(i);
#endif
808 4
809 4 #if TK_BASE_TRIM_WHILE_KEY_PRESSED
RefChDataBak[i] = TS_PostData[OPENED_TS_COUNT];
TS_BaseLineDataBak[i] = TS_BaseLineData[i];
#endif
813 4 TS_AreaConfirmTimerSet(i,AREA_PNOISE);
814 4 }
815 3 }
816 2 else
817 2 {
818 3 TS_FirstAreaData[i] = TS_PostData[i];
819 3 TS_AreaConfirmTimerSet(i,NowArea);
820 3 }
821 2 }
822 1 #if SUPPORT_ANTI_WATER_FUNCTION
if(KeysFlagSN == 0)
{
if(PreKeysFlagSN != 0)
{
PressedKeyIndex = AntiWaterModeGetMaxDeltaCh();
PreKeysFlagSN = MASK_TAB[PressedKeyIndex];
#if (FINGER_LONG_TOUCH_TIME_LIMIT > 0)
TSKey_LongTouchLimitTimer[PressedKeyIndex] = FINGER_LONG_TOUCH_TIME_LIMIT;
#endif
TS_AreaConfirmTimer[PressedKeyIndex] = FINGER_TOUCH_RELEASE_CONFIRM_TIME;
KeyPressedFlag = 1;
}
}
#endif
837 1 #if SUPPORT_COVER_PANAL_AFTER_POWERON
if(!PanalCoverJudgeFlag)
{
if(PreKeysFlagSN != 0)
{
if(KeysFlagSN == 0)
{
PanalCoverJudgeFlag = 1;
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 15
PanalCoverJudgeTimer = PANAL_COVER_JUDGE_TIME;
}
else
{
if((PanalToggleCount >= JUDGE_TK_NUM)||(TS_RefChAbnormalJudge()))
{
PreKeysFlagSN = 0;
PanalCoverJudgeFlag = 0;
TS_BaseLineForceUpdate();
}
KeysFlagSN = PreKeysFlagSN;
}
}
else
{
KeysFlagSN = PreKeysFlagSN;
}
}
else
{
if(!PanalCoverJudgeTimer)
{
PanalCoverJudgeFlag = 0;
KeysFlagSN = PreKeysFlagSN;
}
else
{
if((PanalToggleCount >= JUDGE_TK_NUM)||(TS_RefChAbnormalJudge()))
{
PreKeysFlagSN = 0;
PanalCoverJudgeFlag = 0;
TS_BaseLineForceUpdate();
}
}
}
#else
881 1 #if ANTI_SPEAKER_EN
if((PreKeysFlagSN != 0)&&(KeysFlagSN == 0))
{
if(TS_RefChAbnormalJudge())
{
PreKeysFlagSN = 0;
#if SUPPORT_ANTI_WATER_FUNCTION
KeyPressedFlag = 0;
#endif
TS_BaseLineForceUpdate();
}
}
#endif
895 1 KeysFlagSN = PreKeysFlagSN;
896 1
897 1 #endif
898 1 if(KeysFlagSN != 0)
899 1 {
900 2 ActiveTouchType = 1;
901 2 }
902 1 else
903 1 {
904 2 ActiveTouchType = 0;
905 2 }
906 1 }
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 16
907 #endif
908 #if SUPPORT_WHEEL_SLIDER
909 void TS_WheelSliderDeal(void)
910 {
911 1 unsigned char i;
912 1 unsigned int Delta,Position;
913 1 bit WheelSliderTogFlag = 0;
914 1 TS_BaseCh = KEY_CH_COUNT;
915 1 if(!W_S_RefChSet)
916 1 {
917 2 W_S_RefChSet = 1;
918 2 SetWheelSliderRefCh(WHEEL_SLIDER0_CH_COUNT);
919 2 }
920 1
921 1 #if PRINT_WHEEL_SLIDER_DATA_EN
TK_Debug_UartPutChar('s');
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('i');
TK_Debug_UartPutChar('d');
TK_Debug_UartPutChar('e');
TK_Debug_UartPutChar('r');
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar('d');
TK_Debug_UartPutChar('a');
TK_Debug_UartPutChar('t');
TK_Debug_UartPutChar('a');
TK_Debug_UartPutChar(':');
TK_Debug_UartPutChar(0xaa);
for(i = TS_BaseCh; i < TS_BaseCh + WHEEL_SLIDER0_CH_COUNT; i++)
{
if(TS_BaseLineData[i] > TS_PostData[i])
{
Delta = (int)TS_BaseLineData[i] - (int)TS_PostData[i];
}
else
{
Delta = 0;
}
TK_Debug_UartPutChar(30+i);
TK_Debug_UartPutChar(30+TS_PostData[i]>>8);
TK_Debug_UartPutChar(30+TS_PostData[i]);
TK_Debug_UartPutChar(30+TS_BaseLineData[i]>>8);
TK_Debug_UartPutChar(30+TS_BaseLineData[i]);
TK_Debug_UartPutChar(30+Delta>>8);
TK_Debug_UartPutChar(30+Delta);
}
#endif
954 1 #if (WHEEL_OR_SLIDER_DEF0 == SLIDER)
Position = SliderTouchJudge(WHEEL_SLIDER0_CH_COUNT,WHEEL_SLIDER0_TOUCH_THD);
#elif (WHEEL_OR_SLIDER_DEF0 == WHEEL)
957 1 Position = WheelTouchJudge(WHEEL_SLIDER0_CH_COUNT,WHEEL_SLIDER0_TOUCH_THD);
958 1 #endif
959 1 if(Position != -1)
960 1 {
961 2 TS_StableFlag = 0;
962 2 }
963 1 if(WheelSliderState == WHEEL_SLIDER_NO_TOUCH)
964 1 {
965 2 if(!WheelSliderTouchFlag)
966 2 {
967 3 if(Position != -1)
968 3 {
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 17
969 4 WheelSliderTouchFlag = 1;
970 4 TSWheelSlider_TouchConfirmTimer = WHEEL_SLIDER_TOUCH_CONFIRM_TIME;
971 4 }
972 3 else
973 3 {
974 4 for(i = TS_BaseCh; i < TS_BaseCh + WHEEL_SLIDER0_CH_COUNT; i++)
975 4 {
976 5 if(TS_FirstAreaData[i] > TS_PostData[i])
977 5 {
978 6 Delta = TS_FirstAreaData[i] - TS_PostData[i];
979 6 }
980 5 else
981 5 {
982 6 Delta = TS_PostData[i] - TS_FirstAreaData[i];
983 6 }
984 5 if(Delta <= WHEEL_SLIDER0_NOISE_THD)
985 5 {
986 6 if(!TS_AreaConfirmTimer[i])
987 6 {
988 7 TS_FirstAreaData[i] = TS_PostData[i];
989 7 TS_BaseLineData[i] = TS_PostData[i];
990 7 TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
991 7 }
992 6 }
993 5 else
994 5 {
995 6 TS_FirstAreaData[i] = TS_PostData[i];
996 6 TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
997 6 }
998 5 }
999 4 }
1000 3 }
1001 2 else
1002 2 {
1003 3 if(Position != -1)
1004 3 {
1005 4 if(!TSWheelSlider_TouchConfirmTimer)
1006 4 {
1007 5 WheelSliderState = WHEEL_SLIDER_TOUCH;
1008 5 #if (WHEEL_SLIDER_LONG_TOUCH_TIME_LIMIT > 0)
TSWheelSlider_LongTouchLimitTimer = WHEEL_SLIDER_LONG_TOUCH_TIME_LIMIT;
#endif
1011 5 }
1012 4 }
1013 3 else
1014 3 {
1015 4 WheelSliderTouchFlag = 0;
1016 4 for(i = TS_BaseCh; i < TS_BaseCh + WHEEL_SLIDER0_CH_COUNT; i++)
1017 4 {
1018 5 TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
1019 5 }
1020 4 }
1021 3 }
1022 2 }
1023 1 else if(WheelSliderState == WHEEL_SLIDER_TOUCH)
1024 1 {
1025 2 #if (WHEEL_SLIDER_LONG_TOUCH_TIME_LIMIT > 0)
if(!TSWheelSlider_LongTouchLimitTimer)
{
for(i = TS_BaseCh; i < TS_BaseCh + WHEEL_SLIDER0_CH_COUNT; i++)
{
TS_FirstAreaData[i] = TS_PostData[i];
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 18
TS_BaseLineData[i] = TS_PostData[i];
}
WheelSliderTouchFlag = 0;
goto WHEEL_SLIDER_RELEASE;
}
#endif
1037 2 if(WheelSliderTouchFlag)
1038 2 {
1039 3 if(Position == -1)
1040 3 {
1041 4 WheelSliderTouchFlag = 0;
1042 4 TSWheelSlider_TouchConfirmTimer = WHEEL_SLIDER_TOUCH_RELEASE_CONFIRM_TIME;
1043 4 }
1044 3 }
1045 2 else
1046 2 {
1047 3 if(Position == -1)
1048 3 {
1049 4 if(!TSWheelSlider_TouchConfirmTimer)
1050 4 {
1051 5 //WHEEL_SLIDER_RELEASE:
1052 5 WheelSliderState = WHEEL_SLIDER_NO_TOUCH;
1053 5 WheelSliderCapRateFilter = 0;
1054 5 WheelSliderPosition = -1;
1055 5 for(i = TS_BaseCh; i < TS_BaseCh + WHEEL_SLIDER0_CH_COUNT; i++)
1056 5 {
1057 6 TS_AreaConfirmTimer[i] = WHEEL_SLIDER_BASELINE_UPDATE_TIME;
1058 6 }
1059 5 }
1060 4 }
1061 3 else
1062 3 {
1063 4 WheelSliderTouchFlag = 1;
1064 4 }
1065 3 }
1066 2 }
1067 1 if(WheelSliderState == WHEEL_SLIDER_TOUCH)
1068 1 {
1069 2 if(Position != -1)
1070 2 {
1071 3 WheelSliderPosition = Position;
1072 3 }
1073 2 #if PRINT_WHEEL_SLIDER_POSITION_EN
TK_Debug_UartPutChar('s');
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('i');
TK_Debug_UartPutChar('d');
TK_Debug_UartPutChar('e');
TK_Debug_UartPutChar('r');
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar('p');
TK_Debug_UartPutChar('o');
TK_Debug_UartPutChar('s');
TK_Debug_UartPutChar('i');
TK_Debug_UartPutChar(':');
TK_Debug_UartPutChar(WheelSliderPosition/100+0x30);
TK_Debug_UartPutChar((WheelSliderPosition%100)/10+0x30);
TK_Debug_UartPutChar((WheelSliderPosition%10)+0x30);
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
#endif
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 19
1093 2 #if PRINT_WHEEL_SLIDER_RATE_EN
{
unsigned char DeltaRate;
DeltaRate = WheelSliderCapRateFilter/4;
TK_Debug_UartPutChar(WheelSliderMaxIdx + 0x30);
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar(DeltaRate/100+0x30);
TK_Debug_UartPutChar((DeltaRate%100)/10+0x30);
TK_Debug_UartPutChar((DeltaRate%10)+0x30);
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
}
#endif
1107 2 }
1108 1 else
1109 1 {
1110 2 WheelSliderPosition = -1;
1111 2 }
1112 1
1113 1 if(WheelSliderPosition != -1)
1114 1 {
1115 2 ActiveTouchType = 2;
1116 2 }
1117 1 else
1118 1 {
1119 2 ActiveTouchType = 0;
1120 2 }
1121 1 }
1122 #endif
1123
1124 void TS_init(void)
1125 {
1126 1 unsigned char i,ch_idx;
1127 1 #if (DEBUG)
Debug_init();
#endif
1130 1
1131 1 TS_Cnt = OPENED_TS_COUNT;
1132 1 ch_idx = 0;
1133 1 for(i = 0;i < OPENED_TS_COUNT; i++)
1134 1 {
1135 2 #if (SUPPORT_KEY && SUPPORT_WHEEL_SLIDER)
1136 2 if(i < KEY_CH_COUNT)
1137 2 {
1138 3 TS_CH[ch_idx++] = TS_KEY_CH_INFO_SEQ[i][0];
1139 3 }
1140 2 else
1141 2 {
1142 3 TS_CH[ch_idx++] = TS_WHEEL_SLIDER_CH_SEQ[i-KEY_CH_COUNT];
1143 3 }
1144 2 #elif SUPPORT_KEY
TS_CH[ch_idx++] = TS_KEY_CH_INFO_SEQ[i][0];
#elif SUPPORT_WHEEL_SLIDER
TS_CH[ch_idx++] = TS_WHEEL_SLIDER_CH_SEQ[i];
#endif
1149 2 }
1150 1 CKCON |= ILCKE;
1151 1 TMCON = TME(1);
1152 1 TMSNU = 0;
1153 1 INT3EN =1;
1154 1
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 20
1155 1 TS_IO_init();
1156 1
1157 1
1158 1 TKCFG = TKDIV(TKDIV_VAL)|TKTMS(TKTMS_VAL);
1159 1 #if (TK_CHARGE_REF_SELECT == SOURCE_VDD)
TKCON = TKST(0)|TKIE(1)|TMEN(0)|TWKE(0)|VRS(VRS_VAL);
TKPWC = TKPC(TK_PC_VAL)|VDS(0)|VIRS(0)|TKPWS(0)|TKCVS(0);
#elif (TK_CHARGE_REF_SELECT == SOURCE_INNER)
1163 1 TKCON = TKST(0)|TKIE(1)|TMEN(0)|TWKE(0)|VRS(0);
1164 1 TKPWC = TKPC(TK_PC_VAL)|VDS(VDS_VAL)|VIRS(VIRS_VAL)|TKPWS(1)|TKCVS(1);
1165 1 #endif
1166 1
1167 1 #if SUPPORT_KEY
1168 1 #if TK_SHARE_LED_EN
TLEN0 = 0xFF;
TLDAT0 = 0x00;
TLEN1 = 0x1F;
TLDAT1 = 0x00;
TLCON = TLEIE(0)|TLKIE(0)|TLLIE(0)|TLLVS(0)|TLPOL(0);
TLCKS = TLCKS(2);
TLCNTKH = 0x00;
TLCNTKL = 0x20;
TLCNTLH = LED_DRV_CNT/256;
TLCNTLL = LED_DRV_CNT%256;
TLDIV = 0;
TLCOMS = 0x01;
P01F = 6;
P01C &= (1<<5);
#endif
1188 1 #endif
1189 1 INT3EN = 1;
1190 1
1191 1 TS_CycleScanDoneFlag = 0;
1192 1 #if SUPPORT_KEY
1193 1 KeysFlagSN = 0;
1194 1 PreKeysFlagSN = 0;
1195 1 #endif
1196 1 ActiveTouchType = 0;
1197 1 #if SUPPORT_KEY
1198 1 #if SUPPORT_COVER_PANAL_AFTER_POWERON
PanalCoverJudgeFlag = 0;
#endif
1201 1 #endif
1202 1 #if SUPPORT_TOUCH_SLEEP_MODE
1203 1 EnterStopScanTimer = ENTER_STOP_MODE_TIME;
1204 1 TS_SleepEn = 1;
1205 1 TS_SleepMode = 0;
1206 1 #endif
1207 1 #if SUPPORT_WHEEL_SLIDER
1208 1 W_S_RefChSet = 0;
1209 1
1210 1 WheelSliderState = WHEEL_SLIDER_NO_TOUCH;
1211 1 WheelSliderTouchFlag = 0;
1212 1 WheelSliderPosition = -1;
1213 1 WheelSliderCapRateFilter = 0;
1214 1 #endif
1215 1 TS_State = TS_INIT;
1216 1 TS_Init_Step = 0;
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 21
1217 1
1218 1 #if SUPPORT_KEY
1219 1 #if ANTI_SPEAKER_EN
RefChDataTimer = 0;
#endif
1222 1 #endif
1223 1
1224 1 MainLoopCnt1 = MainLoopCnt2 = 0;
1225 1 #if SUPPORT_KEY
1226 1 #if GENERATE_TS_KEY_EN
TK_State = TK_STATE_RELEASE;
TS_Key = 0;
#endif
1230 1 #endif
1231 1 }
1232
1233 extern unsigned char flagSend;
1234 void TS_Action(void)
1235 {
1236 1 switch(TS_State)
1237 1 {
1238 2 case TS_INIT:
1239 2 TS_RunInit();
1240 2 break;
1241 2 case TS_DEAL:
1242 2 if(TS_CycleScanDoneFlag)
1243 2 {
1244 3 TS_CycleScanDoneFlag = 0;
1245 3
1246 3 MainLoopCnt1 = MainLoopCnt2 + 1;
1247 3
1248 3 #if SUPPORT_KEY
1249 3 #if ANTI_SPEAKER_EN
TS_RefChCheck();
#endif
1252 3 #endif
1253 3 TS_DataFiltering();
1254 3 TS_StableFlag = 1;
1255 3
1256 3 // if(flagSend &&(RF_Time>5))
1257 3 // {
1258 3 // flagSend = 0;
1259 3 // RF_Time=0;
1260 3 // EA = 0;
1261 3 // RF_send(15);
1262 3 // EA = 1;
1263 3 // }
1264 3
1265 3
1266 3 #if SUPPORT_KEY
1267 3 if(ActiveTouchType != 2)
1268 3 {
1269 4 TSKey_DataDeal();
1270 4 }
1271 3 #endif
1272 3 #if (DEBUG)
Debug_ParamLoad();
#endif
1275 3 #if SUPPORT_WHEEL_SLIDER
1276 3 if(ActiveTouchType != 1)
1277 3 {
1278 4 TS_WheelSliderDeal();
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 22
1279 4 }
1280 3 #endif
1281 3 #if SUPPORT_TOUCH_SLEEP_MODE
1282 3 if(!TS_StableFlag || !TS_SleepEn || (PCON & BIT2)) // ڷģʽSTOPģʽ
1283 3 {
1284 4 EnterStopScanTimer = ENTER_STOP_MODE_TIME;
1285 4 }
1286 3 if(!EnterStopScanTimer&&TS_SleepEn)
1287 3 {
1288 4 #if ENTER_SLEEP_PRINT_EN
1289 4 TK_Debug_UartPutChar('s');
1290 4 TK_Debug_UartPutChar('l');
1291 4 TK_Debug_UartPutChar('e');
1292 4 TK_Debug_UartPutChar('e');
1293 4 TK_Debug_UartPutChar('p');
1294 4 TK_Debug_UartPutChar('\r');
1295 4 TK_Debug_UartPutChar('\n');
1296 4 Delay_ms(1);
1297 4 #endif
1298 4 TS_EnterSleepMode();
1299 4 #if ENTER_SLEEP_PRINT_EN
1300 4 TK_Debug_UartPutChar('e');
1301 4 TK_Debug_UartPutChar('x');
1302 4 TK_Debug_UartPutChar('i');
1303 4 TK_Debug_UartPutChar('t');
1304 4 TK_Debug_UartPutChar('\r');
1305 4 TK_Debug_UartPutChar('\n');
1306 4 #endif
1307 4 }
1308 3 #endif
1309 3 }
1310 2 if(TS_HalfSecCnt >= 5)
1311 2 {
1312 3 TKCON = 0;
1313 3 TKIF = 0x3F;
1314 3 TS_init();
1315 3 }
1316 2 break;
1317 2 default:
1318 2 break;
1319 2 }
1320 1 #if SUPPORT_KEY
1321 1 #if TK_SHARE_LED_EN
TKLED_Update();
#endif
1324 1 #if GENERATE_TS_KEY_EN
TS_GetKey();
#endif
1327 1 #endif
1328 1 }
1329 #if SUPPORT_TOUCH_SLEEP_MODE
1330 void TS_SetChannel(unsigned char index,unsigned char ch);
1331 void TS_SleepScanStart(void)
1332 {
1333 1 unsigned char i;
1334 1 for(i = 0; i < 6; i++)
1335 1 {
1336 2 if(TS_Index + i < TS_Cnt)
1337 2 {
1338 3 TS_SetChannel(i,(TS_CH[TS_Index+i])+1);
1339 3 }
1340 2 else
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 23
1341 2 {
1342 3 TS_SetChannel(i,0);
1343 3 }
1344 2 }
1345 1 TKCON |= TKST(1);
1346 1 }
1347 void TS_EnterSleepMode(void)
1348 {
1349 1 //ʡģʽ
1350 1 #define STOP_TKDIV_VAL 0
1351 1 #define STOP_TKTMS_VAL 15 //ŵʱ
1352 1 #define STOP_VRS_VAL 7 //Ƚֵ
1353 1 unsigned char TS_SampleComplete = 0,i;
1354 1 unsigned int xdata WakeUp_PThdVal[OPENED_TS_COUNT];
1355 1 unsigned int xdata WakeUp_NThdVal[OPENED_TS_COUNT];
1356 1 WORD_UNION TS_Data;
1357 1
1358 1 TKCON = 0;
1359 1 TKIF = 0x3F;
1360 1
1361 1 TS_SleepMode = 1;
1362 1 #if SUPPORT_KEY
1363 1 #if TK_SHARE_LED_EN
TLEN0 = 0x00;
TLDAT0 = 0x00;
TLEN1 = 0x00;
TLDAT1 = 0x00;
P01F = HIGH_Z|PU_EN;
P01C &= (1<<5); //ѡ
#endif
1371 1 #endif
1372 1 TMCON &= ~TME(1);
1373 1 TMCON |= TMF;
1374 1
1375 1 TKCON = (TKCON&0xF8) | VRS(STOP_VRS_VAL);
1376 1 TKCON &= ~TKIE(1);
1377 1 TKCFG = TKDIV(STOP_TKDIV_VAL)|TKTMS(STOP_TKTMS_VAL);
1378 1
1379 1 #if (OPENED_TS_COUNT%6 == 0)
1380 1 TKMTS = (SLEEP_MODE_SCAN_INTERVAL_TIME*6)/(OPENED_TS_COUNT);
1381 1 #else
TKMTS = (SLEEP_MODE_SCAN_INTERVAL_TIME)/((OPENED_TS_COUNT/6)+1);
#endif
1384 1
1385 1 TKPWC = TKPC(1)|VDS(0)|VIRS(0)|TKPWS(0)|TKCVS(0); //ʡΪVDD
1386 1
1387 1 #ifdef LVD_RST_ENABLE
1388 1 LVDCON = 0;
1389 1 #endif
1390 1 I2CCON = 0;
1391 1 CKCON = 0;
1392 1
1393 1 MECON |= BIT6;
1394 1 PWCON = (PWCON&0xF0)|0x07;
1395 1
1396 1 TS_Index = 0;
1397 1 TS_SleepScanStart();
1398 1 WDFLG = 0xA5;
1399 1
1400 1 TMCON = TME(1);
1401 1 TMSNU = 127;
1402 1
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 24
1403 1 while(1)
1404 1 {
1405 2 if(TS_SampleComplete)
1406 2 {
1407 3 CKCON &= ~IHCKE;
1408 3 CKCON = (CKCON&0xFE) | CKSEL_IRCL;
1409 3 EA = 0;
1410 3 PCON |= (1<<1);
1411 3 _nop_();
1412 3 _nop_();
1413 3 _nop_();
1414 3 CKCON |= IHCKE;
1415 3 CKCON = (CKCON&0xFE) | CKSEL_IRCH;
1416 3 EA = 1;
1417 3 }
1418 2 if(TS_HalfSecCnt >= 5)
1419 2 {
1420 3 break;
1421 3 }
1422 2 if(TKIF != 0)
1423 2 {
1424 3 if(TS_HalfSecCnt) TS_HalfSecCnt--;
1425 3 for(i = 0; i < 6; i++)
1426 3 {
1427 4 if(TKIF & (1<<i))
1428 4 {
1429 5 TKIF = (1<<i);
1430 5 if(i == 0)
1431 5 {
1432 6 TS_Data.bVal[0] = TK0MSH;
1433 6 TS_Data.bVal[1] = TK0MSL;
1434 6 }
1435 5 else if(i == 1)
1436 5 {
1437 6 TS_Data.bVal[0] = TK1MSH;
1438 6 TS_Data.bVal[1] = TK1MSL;
1439 6 }
1440 5 else if(i == 2)
1441 5 {
1442 6 TS_Data.bVal[0] = TK2MSH;
1443 6 TS_Data.bVal[1] = TK2MSL;
1444 6 }
1445 5 else if(i == 3)
1446 5 {
1447 6 TS_Data.bVal[0] = TK3MSH;
1448 6 TS_Data.bVal[1] = TK3MSL;
1449 6 }
1450 5 else if(i == 4)
1451 5 {
1452 6 TS_Data.bVal[0] = TK4MSH;
1453 6 TS_Data.bVal[1] = TK4MSL;
1454 6 }
1455 5 else if(i == 5)
1456 5 {
1457 6 TS_Data.bVal[0] = TK5MSH;
1458 6 TS_Data.bVal[1] = TK5MSL;
1459 6 }
1460 5 if(TS_SampleComplete == 0)
1461 5 {
1462 6 WakeUp_PThdVal[TS_Index+i] = TS_Data.wVal - SLEEP_TOUTH_THD;
1463 6 WakeUp_NThdVal[TS_Index+i] = TS_Data.wVal + SLEEP_TOUTH_THD;
1464 6 }
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 25
1465 5 else
1466 5 {
1467 6 if((TS_Data.wVal <= WakeUp_PThdVal[TS_Index+i])||(TS_Data.wVal >= WakeUp_NThdVal[TS_Index+i]))
1468 6 {
1469 7 goto SLEEP_EXIT;
1470 7 }
1471 6 }
1472 5 }
1473 4 }
1474 3 if(TS_Index+6 < TS_Cnt)
1475 3 {
1476 4 TS_Index += 6;
1477 4 }
1478 3 else
1479 3 {
1480 4 TS_Index = 0;
1481 4 if(TS_SampleComplete == 0)
1482 4 {
1483 5 TS_SampleComplete = 1;
1484 5 TKCON |= TMEN(1);
1485 5 }
1486 4 }
1487 3 TS_SleepScanStart();
1488 3 WDFLG = 0xA5;
1489 3 }
1490 2 }
1491 1 SLEEP_EXIT:
1492 1 TKCON = 0;
1493 1 TKIF = 0x3F;
1494 1 PWCON = (PWCON&0xF0)|0x0D;
1495 1
1496 1 TKCFG = TKDIV(TKDIV_VAL)|TKTMS(TKTMS_VAL);
1497 1 #if (TK_CHARGE_REF_SELECT == SOURCE_VDD)
TKCON = TKST(0)|TKIE(1)|TMEN(0)|TWKE(0)|VRS(VRS_VAL);
TKPWC = TKPC(TK_PC_VAL)|VDS(0)|VIRS(0)|TKPWS(0)|TKCVS(0);
#elif (TK_CHARGE_REF_SELECT == SOURCE_INNER)
1501 1 TKCON = TKST(0)|TKIE(1)|TMEN(0)|TWKE(0)|VRS(0);
1502 1 TKPWC = TKPC(TK_PC_VAL)|VDS(VDS_VAL)|VIRS(VIRS_VAL)|TKPWS(1)|TKCVS(1);
1503 1 #endif
1504 1 #if SUPPORT_KEY
1505 1 #if TK_SHARE_LED_EN
TLEN0 = 0xFF;
TLEN1 = 0x1F;
P01F = 6;
#endif
1510 1 #endif
1511 1 CKCON |= ILCKE;
1512 1 TMCON &= ~TME(1);
1513 1 TMCON |= TMF;
1514 1 Delay_50us(1);
1515 1 TMCON = TME(1);
1516 1 TMSNU = 0;
1517 1 TS_Index = 0;
1518 1 TS_ScanStart();
1519 1 EnterStopScanTimer = ENTER_STOP_MODE_TIME;
1520 1 TS_SleepMode = 0;
1521 1 #ifdef LVD_RST_ENABLE
1522 1 LVDCON = 0xE3; //LVDλѹΪ2V
1523 1 #endif
1524 1 }
1525 #endif
1526 /*********************************************************************************************************
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 26
-************/
1527 #if SUPPORT_KEY
1528 #if GENERATE_TS_KEY_EN
#if GENERATE_DOUBLE_KEY_EN
typedef struct
{
unsigned char TogKeyNum;
unsigned char TogKeyList[2];
}
T_TogKeyInfo;
#endif
code unsigned char TS_KEY_TAB[]=
{
K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,K12,K13
};
#if GENERATE_DOUBLE_KEY_EN
void TS_GetTogKeyInfor(T_TogKeyInfo *pKeyInfo)
{
unsigned char i,index;
pKeyInfo->TogKeyNum = 0;
index = 0;
for(i = 0; i < KEY_CH_COUNT; i++)
{
if(KeysFlagSN & MASK_TAB[i])
{
pKeyInfo->TogKeyNum++;
if(pKeyInfo->TogKeyNum <= 2)
{
pKeyInfo->TogKeyList[index++] = TS_KEY_TAB[i];
}
}
}
}
#endif
#if PRINT_TS_KEY_EN
void Hex2CharPrint(unsigned int integar)
{
unsigned char CharBuf[4];
unsigned char i, temp;
for(i = 0; i < 4; i++)
{
temp = (unsigned char)(integar&0x0F);
if(temp >= 0x0A)
{
CharBuf[i] = (temp - 0x0A) + 'A';
}
else
{
CharBuf[i] = temp + '0';
}
integar >>= 4;
}
TK_Debug_UartPutChar('0');
TK_Debug_UartPutChar('x');
TK_Debug_UartPutChar(CharBuf[2]);
TK_Debug_UartPutChar(CharBuf[1]);
TK_Debug_UartPutChar(CharBuf[0]);
}
#endif
void TS_GetKey(void)
{
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 27
static unsigned int KeyBak;
static bit LongFlag;
#if GENERATE_DOUBLE_KEY_EN
T_TogKeyInfo KeyInfo;
TS_GetTogKeyInfor(&KeyInfo);
#else
static unsigned char KeyidxBak;
unsigned char i;
#endif
TS_Key = 0;
if(TK_State == TK_STATE_RELEASE)
{
#if GENERATE_DOUBLE_KEY_EN
if(KeyInfo.TogKeyNum != 0)
{
if(KeyInfo.TogKeyNum == 1)
{
KeyBak = (unsigned int)KeyInfo.TogKeyList[0];
TK_State = TK_STATE_SINGLE_KEY_PRESS;
}
else if(KeyInfo.TogKeyNum == 2)
{
KeyBak = ((unsigned int)KeyInfo.TogKeyList[0]<<5)|(unsigned int)KeyInfo.TogKeyList[1];
TK_State = TK_STATE_DOUBLE_KEY_PRESS;
}
TS_Key = KeyBak;
LongFlag = 0;
TS_LongKeyTimer = TS_LONG_START_TIME;
}
#else
if(KeysFlagSN != 0)
{
for(i = 0; i < KEY_CH_COUNT; i++)
{
if(KeysFlagSN & MASK_TAB[i])
{
KeyidxBak = i;
KeyBak = TS_KEY_TAB[i];
break;
}
}
TS_Key = KeyBak;
LongFlag = 0;
TS_LongKeyTimer = TS_LONG_START_TIME;
TK_State = TK_STATE_SINGLE_KEY_PRESS;
}
#endif
}
else if(TK_State == TK_STATE_SINGLE_KEY_PRESS)
{
#if GENERATE_DOUBLE_KEY_EN
if(KeyInfo.TogKeyNum == 1)
{
if(KeyBak == (unsigned int)KeyInfo.TogKeyList[0])
{
if(!TS_LongKeyTimer)
{
if(!LongFlag)
{
LongFlag = 1;
TS_Key = KeyBak | KEY_LONG_START;
}
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 28
else
{
TS_Key = KeyBak | KEY_LONG;
}
TS_LongKeyTimer = TS_LONG_TIME;
}
}
else
{
if(!LongFlag)
{
TS_Key = KeyBak | KEY_BREAK;
}
else
{
TS_Key = KeyBak | KEY_LONG_BREAK;
}
TK_State = TK_STATE_RELEASE;
}
}
else if(KeyInfo.TogKeyNum == 2)
{
KeyBak = ((unsigned int)KeyInfo.TogKeyList[0]<<5) | (unsigned int)KeyInfo.TogKeyList[1];
TK_State = TK_STATE_DOUBLE_KEY_PRESS;
TS_Key = KeyBak;
LongFlag = 0;
TS_LongKeyTimer = TS_LONG_START_TIME;
}
else if(KeyInfo.TogKeyNum == 0)
{
if(!LongFlag)
{
TS_Key = KeyBak | KEY_BREAK;
}
else
{
TS_Key = KeyBak | KEY_LONG_BREAK;
}
TK_State = TK_STATE_RELEASE;
}
#else
if(KeysFlagSN & MASK_TAB[KeyidxBak])
{
if(!TS_LongKeyTimer)
{
if(!LongFlag)
{
LongFlag = 1;
TS_Key = KeyBak | KEY_LONG_START;
}
else
{
TS_Key = KeyBak | KEY_LONG;
}
TS_LongKeyTimer = TS_LONG_TIME;
}
}
else
{
if(!LongFlag)
{
TS_Key = KeyBak | KEY_BREAK;
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 29
}
else
{
TS_Key = KeyBak | KEY_LONG_BREAK;
}
TK_State = TK_STATE_RELEASE;
}
#endif
}
#if GENERATE_DOUBLE_KEY_EN
else if(TK_State == TK_STATE_DOUBLE_KEY_PRESS)
{
if(KeyInfo.TogKeyNum == 2)
{
if(KeyBak == ((unsigned int)KeyInfo.TogKeyList[0]<<5)|(unsigned int)KeyInfo.TogKeyList[1])
{
if(!TS_LongKeyTimer)
{
if(!LongFlag)
{
LongFlag = 1;
TS_Key = KeyBak | KEY_LONG_START;
}
else
{
TS_Key = KeyBak | KEY_LONG;
}
TS_LongKeyTimer = TS_LONG_TIME;
}
}
}
else if(KeyInfo.TogKeyNum == 0)
{
if(!LongFlag)
{
TS_Key = KeyBak | KEY_BREAK;
}
else
{
TS_Key = KeyBak | KEY_LONG_BREAK;
}
TK_State = TK_STATE_RELEASE;
}
}
#endif
#if PRINT_TS_KEY_EN
if(TS_Key != 0)
{
if((TS_Key & 0xFF00) == 0)
{
#if GENERATE_DOUBLE_KEY_EN
if(TS_Key > 0x1F)
{
TK_Debug_UartPutChar('d');
TK_Debug_UartPutChar('o');
TK_Debug_UartPutChar('u');
TK_Debug_UartPutChar('b');
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('e');
}
else
{
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 30
TK_Debug_UartPutChar('s');
TK_Debug_UartPutChar('i');
TK_Debug_UartPutChar('n');
TK_Debug_UartPutChar('g');
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('e');
}
TK_Debug_UartPutChar(' ');
#endif
TK_Debug_UartPutChar('k');
TK_Debug_UartPutChar('e');
TK_Debug_UartPutChar('y');
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar('=');
TK_Debug_UartPutChar(' ');
Hex2CharPrint(TS_Key);
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
}
else if(TS_Key & KEY_BREAK)
{
TK_Debug_UartPutChar('k');
TK_Debug_UartPutChar('e');
TK_Debug_UartPutChar('y');
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar('u');
TK_Debug_UartPutChar('p');
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
}
else if(TS_Key & KEY_LONG_START)
{
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('o');
TK_Debug_UartPutChar('n');
TK_Debug_UartPutChar('g');
TK_Debug_UartPutChar(' ');
TK_Debug_UartPutChar('s');
TK_Debug_UartPutChar('t');
TK_Debug_UartPutChar('a');
TK_Debug_UartPutChar('r');
TK_Debug_UartPutChar('t');
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
}
else if(TS_Key & KEY_LONG)
{
TK_Debug_UartPutChar('l');
TK_Debug_UartPutChar('o');
TK_Debug_UartPutChar('n');
TK_Debug_UartPutChar('g');
TK_Debug_UartPutChar('\r');
TK_Debug_UartPutChar('\n');
}
}
#endif
}
#endif
1832 #endif
1833 /*********************************************************************************************************
-************/
1834
C51 COMPILER V9.60.0.0 TS_API 05/05/2026 17:41:52 PAGE 31
1835 /*********************************************************************************************************
-************/
1836 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2377 ----
CONSTANT SIZE = 53 ----
XDATA SIZE = 296 48
PDATA SIZE = ---- ----
DATA SIZE = 9 30
IDATA SIZE = 16 ----
BIT SIZE = 5 1
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 10 WARNING(S), 0 ERROR(S)