这几天用SC95F低功耗触摸按键唤醒库发现一个问题,现象是进入低功耗后,通过其他方式(非触摸按键)唤醒后调用退出低功耗模式(调用该函数void TouchKey_QuitLowPowerMode(void))时,在退出低功耗到正常模式扫描按键时,会有最后触摸扫描通道按键触发。
通过打印跟踪在unsigned long int TouchKeyScan(void)函数中,WakeUpKeyValue变量在非触摸退出低功耗时正好是最后扫描通道,导致一退出低功耗就有按键触发。
就是在这个void TouchKey_LowPower_Dispose(void)函数中,在无触摸按键下,WakeUpKeyValue变量值是最后扫描通道。现在需要修改在无触摸时WakeUpKeyValue值不能为正常触摸通道索引,修改如下:
- /**************************************************
- *函数名称:void TouchKey_LowPower_Dispose(void)
- *函数功能低功耗扫描数据处理
- *入口参数:void
- *出口参数:void
- **************************************************/
- void TouchKey_LowPower_Dispose(void)
- {
- int differData;
- int SetFingerThresholdtmp;
- unsigned char WakeUpKey_Index;
- unsigned char NextWakeUpKey_Index;
- unsigned int ScanTimeTemp;
-
- SingleKeyFastScan_Flag = 0;
- TKCFG0 &= 0XF0;
- BTM_WakeUpFlag = 0;
- TKCFG0 |= TKChannelCfg[0][SET_TOUCH_FREQ];
- for(WakeUpKey_Index=0; WakeUpKey_Index<WakeUpKeyNum; WakeUpKey_Index++)
- {
- WakeUpKeyValue = WakeUpKey_List[WakeUpKey_Index];
- NextWakeUpKey_Index = WakeUpKey_Index+1;
- if(NextWakeUpKey_Index>=WakeUpKeyNum)
- {
- NextWakeUpKey_Index = 0;
- }
- ScanTimeTemp = ScanTimeTemp0*TKChannelCfg[WakeUpKey_List[NextWakeUpKey_Index]][SCANTIME];
- while(TRIF == 0);
- TRIF = 0;
-
- RawData[WakeUpKeyValue] = TKCNT<<4;
- TKCFG1 = (TKCFG1 & 0X80) | BaseLineAdjusttmp[WakeUpKey_List[NextWakeUpKey_Index]];
- TKCR = 0x80|CurrentChannel[WakeUpKey_List[NextWakeUpKey_Index]];
- TKTM = ScanTimeTemp;
- TRIG = 1;
-
- differData = RawData[WakeUpKeyValue]-BaseLine[WakeUpKeyValue] ;
- SetFingerThresholdtmp = GetCurrFingerValue(WakeUpKeyValue);
-
- if(differData >= SetFingerThresholdtmp)
- {
- SingleKeyFastScan_Flag = 1;
- break;
- }
- else if(differData > (-(SetFingerThresholdtmp>>1)))
- {
- if(WakeUpNum==WakeUpKey_Index%BaselineUpdateCnt)
- Lowpower_BaselineUpdate(5);
- }
- else
- {
- Lowpower_BaselineUpdate(2);
- }
- }
- if(++WakeUpNum>=BaselineUpdateCnt)
- {
- WakeUpNum = 0;
- }
- //新修改添加
- if(!SingleKeyFastScan_Flag)
- {
- WakeUpKeyValue = 0xff;
- }
- }
通过以上修改之后,在其他需要唤醒调用函数void TouchKey_QuitLowPowerMode(void)时,就不会有触摸误动作按键。
|