V1.0
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
#ifndef _TS_API_H
|
||||
#define _TS_API_H
|
||||
|
||||
#ifdef _TK_API_C_
|
||||
/***************************************************************************************************************/
|
||||
/***************************************************************************************************************/
|
||||
TSState_T idata TS_State;
|
||||
|
||||
TYPE_SN idata PreKeysFlagSN;
|
||||
TYPE_SN xdata KeysFlagSN;
|
||||
#if TK_FREQ_JUMP_EN
|
||||
unsigned char xdata NowTKFreqIndex;
|
||||
#endif
|
||||
unsigned int TS_Key;
|
||||
unsigned int TS_LongKeyTimer;
|
||||
unsigned char TK_State;
|
||||
|
||||
bit TS_CycleScanDoneFlag;
|
||||
unsigned char idata TS_Cnt;
|
||||
unsigned int xdata TS_RawData[OPENED_TS_COUNT+1];
|
||||
unsigned int xdata TS_BaseLineData[OPENED_TS_COUNT];
|
||||
unsigned int xdata TS_FirstAreaData[OPENED_TS_COUNT];
|
||||
unsigned char xdata TS_AreaConfirmTimer[OPENED_TS_COUNT];
|
||||
unsigned int xdata TS_PostData[OPENED_TS_COUNT+1];
|
||||
#if TK_FREQ_JUMP_EN
|
||||
unsigned int xdata TS_JumpFreqData[2][OPENED_TS_COUNT+1];
|
||||
#endif
|
||||
#if (TS_ACQ_TIMES > 1)
|
||||
unsigned char xdata TS_Acq_Counter = 0;
|
||||
unsigned int xdata TS_DataSum[OPENED_TS_COUNT+1];
|
||||
#endif
|
||||
#if SUPPORT_KEY
|
||||
unsigned int xdata TSKey_FingerThd[KEY_CH_COUNT];
|
||||
unsigned char xdata TSKey_LongTouchLimitTimer[KEY_CH_COUNT];
|
||||
#if SUPPORT_ANTI_WATER_FUNCTION
|
||||
bit KeyPressedFlag;
|
||||
unsigned char xdata PressedKeyIndex;
|
||||
#endif
|
||||
#if TK_BASE_TRIM_WHILE_KEY_PRESSED
|
||||
unsigned int xdata RefChDataBak[KEY_CH_COUNT];
|
||||
unsigned int xdata TS_BaseLineDataBak[KEY_CH_COUNT];
|
||||
#endif
|
||||
#else
|
||||
unsigned int xdata TSKey_FingerThd[1];
|
||||
#endif
|
||||
/***************************************************************************************************************/
|
||||
/***************************************************************************************************************/
|
||||
unsigned int xdata TS_FilterBuf[OPENED_TS_COUNT+1][FILTER_COUNT];
|
||||
unsigned char xdata TS_FilterPosIdx[OPENED_TS_COUNT+1];
|
||||
|
||||
|
||||
unsigned char xdata TS_Init_Step;
|
||||
unsigned char idata TS_RefCHBaseLineAdjuTimer;
|
||||
unsigned char TS_Index;
|
||||
|
||||
unsigned char idata TS_CH[OPENED_TS_COUNT];
|
||||
|
||||
unsigned char xdata EnterStopScanTimer;
|
||||
unsigned char xdata MainLoopCnt1;
|
||||
unsigned char xdata MainLoopCnt2;
|
||||
|
||||
#if SUPPORT_KEY
|
||||
#if ANTI_SPEAKER_EN
|
||||
#define REF_CH_DATA_BUF_SIZE 10
|
||||
unsigned int xdata RefChDataBuf[REF_CH_DATA_BUF_SIZE];
|
||||
unsigned char xdata RefChDataBufIdx;
|
||||
unsigned char xdata RefChDataTimer;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
bit TS_StableFlag;
|
||||
|
||||
#if SUPPORT_TOUCH_SLEEP_MODE
|
||||
bit TS_SleepEn;
|
||||
bit TS_SleepMode;
|
||||
#endif
|
||||
|
||||
unsigned char xdata TS_HalfSecCnt;
|
||||
|
||||
#if SUPPORT_KEY
|
||||
#if DEBUG
|
||||
unsigned char xdata Key_Cnt_Debug;
|
||||
TSState_T xdata TS_State_Debug;
|
||||
unsigned char xdata TS_CH_Debug[OPENED_TS_COUNT];
|
||||
unsigned int xdata TS_RefChBaseLineData;
|
||||
unsigned int xdata TS_RefPostData;
|
||||
unsigned int xdata KeysFlagSN_Debug;
|
||||
#endif
|
||||
|
||||
#if SUPPORT_COVER_PANAL_AFTER_POWERON
|
||||
unsigned char PanalCoverJudgeTimer;
|
||||
bit PanalCoverJudgeFlag;
|
||||
#endif
|
||||
#endif
|
||||
#if SUPPORT_WHEEL_SLIDER
|
||||
unsigned char xdata TSWheelSlider_TouchConfirmTimer;
|
||||
unsigned char xdata TSWheelSlider_LongTouchLimitTimer;
|
||||
unsigned char xdata WheelSliderState;
|
||||
unsigned char xdata WheelSliderTouchFlag;
|
||||
int xdata WheelSliderPosition;
|
||||
unsigned char xdata WheelSliderRefCh;
|
||||
unsigned int xdata WheelSliderCapRateFilter;
|
||||
unsigned char xdata WheelSliderMaxIdx;
|
||||
bit W_S_RefChSet;
|
||||
#else
|
||||
unsigned char xdata WheelSliderRefCh;
|
||||
unsigned int xdata WheelSliderCapRateFilter;
|
||||
unsigned char xdata WheelSliderMaxIdx;
|
||||
#endif
|
||||
unsigned char TS_BaseCh;
|
||||
unsigned char ActiveTouchType;
|
||||
#else
|
||||
/***************************************************************************************************************/
|
||||
/***************************************************************************************************************/
|
||||
extern TSState_T idata TS_State;
|
||||
#ifndef TS_SERVICE_C
|
||||
extern TYPE_SN idata PreKeysFlagSN;
|
||||
extern TYPE_SN xdata KeysFlagSN;
|
||||
#endif
|
||||
extern unsigned int TS_Key;
|
||||
extern unsigned int TS_LongKeyTimer;
|
||||
extern unsigned char TK_State;
|
||||
|
||||
extern bit TS_CycleScanDoneFlag;
|
||||
extern unsigned char idata TS_Cnt;
|
||||
extern unsigned int xdata TS_RefChRawData;
|
||||
extern unsigned int xdata TS_RawData[];
|
||||
|
||||
extern unsigned int xdata TS_BaseLineData[];
|
||||
extern unsigned int xdata TS_FirstAreaData[];
|
||||
extern unsigned char xdata TS_AreaConfirmTimer[];
|
||||
extern unsigned int xdata TS_PostData[];
|
||||
|
||||
extern unsigned int xdata TSKey_FingerThd[];
|
||||
extern unsigned char xdata TSKey_LongTouchLimitTimer[];
|
||||
|
||||
/***************************************************************************************************************/
|
||||
/***************************************************************************************************************/
|
||||
extern unsigned char xdata TS_Init_Step;
|
||||
extern unsigned char idata TS_RefCHBaseLineAdjuTimer;
|
||||
extern unsigned char TS_Index;
|
||||
|
||||
extern unsigned char idata TS_CH[];
|
||||
extern unsigned char TS_AcqCnt;
|
||||
extern unsigned char xdata EnterStopScanTimer;
|
||||
|
||||
extern code unsigned int TS_CH_INFO_SEQ[][2];
|
||||
extern bit TS_StableFlag;
|
||||
extern bit TS_SleepEn;
|
||||
extern bit TS_SleepMode;
|
||||
|
||||
extern unsigned char xdata TSWheelSlider_TouchConfirmTimer;
|
||||
extern unsigned char xdata TSWheelSlider_LongTouchLimitTimer;
|
||||
|
||||
extern unsigned char xdata WheelSliderState;
|
||||
extern unsigned char xdata WheelSliderTouchFlag;
|
||||
extern int xdata WheelSliderPosition;
|
||||
extern unsigned int xdata WheelSliderCapRateFilter;
|
||||
extern unsigned char TS_BaseCh;
|
||||
extern unsigned char ActiveTouchType;
|
||||
extern unsigned char xdata WheelSliderRefCh;
|
||||
extern bit W_S_RefChSet;
|
||||
extern unsigned char xdata WheelSliderMaxIdx;
|
||||
extern code unsigned int TS_KEY_CH_INFO_SEQ[][2];
|
||||
|
||||
extern code unsigned char WHEEL_SLIDER0_MAX_MIN_TAB[];
|
||||
extern code unsigned char AREA_CONFIRM_TIME_TAB[];
|
||||
extern code unsigned int MASK_TAB[];
|
||||
|
||||
#endif
|
||||
|
||||
void TS_init(void);
|
||||
void TS_Action(void);
|
||||
void TS_GetKey(void);
|
||||
void TS_EnterSleepMode(void);
|
||||
void TS_ISR(void);
|
||||
#endif
|
||||
@@ -0,0 +1,278 @@
|
||||
#ifndef _TS_CFG_H
|
||||
#define _TS_CFG_H
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define DEBUG 0 //1:打开在线调试功能; 0:关闭在线调试功能
|
||||
//注意:只有触摸键应用才支持在线调试,滑条应用不支持在线调试。
|
||||
/********************************************************************************************************
|
||||
说明:
|
||||
触摸在线调试功能可在PC端显示当前触摸值、基准值、门限值,可在PC端设置触摸灵敏度,并导出配置文件,
|
||||
此功能需配合仿真下载器及上位机工具CACHIPTOOL.exe才能使用。详细使用方法请参考相关文档说明。
|
||||
********************************************************************************************************/
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define SUPPORT_KEY 1 //1:支持触摸按键; 0:不支持触摸按键
|
||||
#define SUPPORT_WHEEL_SLIDER 1 //1:支持触摸触摸滑条或圆环;0:不支持触摸滑条或圆环
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
/***********触摸省电模式设置********************************************************************************************************/
|
||||
#define SUPPORT_TOUCH_SLEEP_MODE 0 //1:支持 0:不支持
|
||||
|
||||
#if SUPPORT_TOUCH_SLEEP_MODE
|
||||
#define ENTER_STOP_MODE_TIME 5 //进入触摸省电模式倒数时间,单位为0.5S,如定义为5,5*0.5=2.5秒,即2.5秒无触摸即进入省电模式。
|
||||
#define SLEEP_MODE_SCAN_INTERVAL_TIME 100 //扫描触摸的间隔时间,单位约为1ms,注意:此时间越长,芯片待机功耗越低,但触摸响应速度越慢。
|
||||
#define SLEEP_TOUTH_THD 4/*15*/ //触摸省电模式下门限值设置,当触摸数据变化量大于此数值将退出省电模式。
|
||||
|
||||
#define ENTER_SLEEP_PRINT_EN 0 //省电模式打印开关,主要是为了验证触摸是否正常进入省电模式。进入触摸省电模式时打印"sleep",退出省电模式时打印"exit"
|
||||
|
||||
//注意:使能触摸省电模式后,如在某些条件不需要进入省电模式,只需要把TS_SleepEn设为0,如需要进省电模式,把TS_SleepEn设为1。
|
||||
#endif
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define TS_ACQ_TIMES 1 //该定义表示多少次采集数据相加进行运算
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
/********************触摸数据滤波设置*********************************************************/
|
||||
#define FILTER_COUNT 5
|
||||
//说明:此数值越大,数据越平滑,但是按键响应速度越慢
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
/*******************触摸充电和比较器基准选择***********************************************************************/
|
||||
#define SOURCE_VDD 0
|
||||
#define SOURCE_INNER 1
|
||||
|
||||
#define TK_CHARGE_REF_SELECT SOURCE_INNER //SOURCE_VDD: 触摸充电电源选择为VDD,比较器基准为VDD分压 SOURCE_INNER:触摸充电电源为内部运放,比较器基准为内部基准。
|
||||
//注意:一般在芯片供电存在低频干扰时选择为SOURCE_INNER, 当选择为SOURCE_INNER后, 芯片静态电流会增加1~2mA.
|
||||
|
||||
#if (TK_CHARGE_REF_SELECT == SOURCE_VDD)
|
||||
#define VRS_VAL 2 //比较器阈值,取值范围为:0~7,数值越大,比较器阈值电压越低。
|
||||
#elif (TK_CHARGE_REF_SELECT == SOURCE_INNER)
|
||||
#define VDS_VAL 1 //触摸内部运放输出电压选择,可选范围:0~3,0:2V 1:2.5V 2:3V 3:4V
|
||||
#define VIRS_VAL 1 //触摸比较器阈值电压选择,可选范围:0~3,0:1V 1:1.5V 2:2V 3:2.5V
|
||||
#endif
|
||||
#define TKDIV_VAL 0 //触摸充放电时钟分频系数,取值范围为:0~7,对应的时钟频率为:4M~500K,此数值越大,频率越低。
|
||||
#define TKTMS_VAL 10 //放电时间定义,取值范围为:1~31,数值越大,放电时间越长。
|
||||
|
||||
/*
|
||||
说明:
|
||||
1. 当设置为内部运放及内部基准时(即TK_CHARGE_REF_SELECT==SOURCE_INNER),内部运放电压要大于比较器阈值电压,即VDS_VAL定义的电压要大于VIRS_VAL定义的电压。
|
||||
2. 当设置为内部运放及内部基准时(即TK_CHARGE_REF_SELECT==SOURCE_INNER),内部运放电压要比芯片供电电压低0.5V以上,否则运放电压可能不稳定。
|
||||
3. 当设置为内部运放及内部基准时(即TK_CHARGE_REF_SELECT==SOURCE_INNER),芯片供电至少要接10uF以上电容。
|
||||
*/
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define POWER_ON_WAIT_TK_STABLE_EN 0 //上电后等待触摸稳定后再设置触摸环境值初值
|
||||
//------------------------------------------------------------------------------------------------------------------------
|
||||
#define SUPPORT_ANTI_WATER_FUNCTION 0 //防水补偿模式开关
|
||||
|
||||
#if SUPPORT_ANTI_WATER_FUNCTION
|
||||
#define TK_PC_VAL 2
|
||||
#else
|
||||
#define TK_PC_VAL 1
|
||||
#endif
|
||||
/*
|
||||
说明:
|
||||
1. 此功能只能在触摸按键时打开,触摸滑条或圆环不支持。
|
||||
2. 打开防水补偿模式时,触摸充电电源最好选择为VDD(即 TK_CHARGE_REF_SELECT == SOURCE_VDD)。
|
||||
3. 在此模式下,触摸走线对地间的寄生电容必须大于触摸通道间的寄生电容,否则触摸充电无法达到比较器阈值电压,建议PCB多铺地,触摸走线的间距尽可能宽
|
||||
4. 打开防水模式后,只能有一个按键响应(不支持复合键)。
|
||||
*/
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define TK_BASE_TRIM_WHILE_KEY_PRESSED 0 //在触摸按键按下时,该触摸通道仍以内部参考通道为参考实时更新环境值,此功能可解决某些应用中,因长时间连续快速触摸按键导致该触摸通道无法更新环境值,从而导致触摸按键无效或灵敏度发生改变的问题。
|
||||
//注意: 如果TK_CAP引脚所接电容为普通电容(温度特性校差),触摸工作后长期快速按触摸键一段时间后,触摸键有可能会长期触发,打开此功能可解决这种情况。
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
#define TK_FREQ_JUMP_EN 0 //跳频功能使能开关,打开跳频功能对于CS认证测试性能有较大提升,但会降低触摸采集速度,可能对触摸按键响应时间有一定影响
|
||||
#if TK_FREQ_JUMP_EN
|
||||
#if (TKDIV_VAL < 7)
|
||||
#define TKDIV_VAL2 (TKDIV_VAL+1)
|
||||
#else
|
||||
#define TKDIV_VAL2 (TKDIV_VAL-1)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//-----------------触摸键应用设置--------------------------------------------------------------------------------------------------
|
||||
#if SUPPORT_KEY
|
||||
#define GENERATE_TS_KEY_EN 0 //根据KeysFlagSN状态产生触摸键消息TS_Key使能,如果不需要产生TS_Key,用户可直接根据KeysFlagSN来判断按键状态。
|
||||
#if GENERATE_TS_KEY_EN
|
||||
#define GENERATE_DOUBLE_KEY_EN 0 //产生复合键
|
||||
#define PRINT_TS_KEY_EN 0 //打印触摸按键值开关
|
||||
#endif
|
||||
|
||||
/***********上电再盖上触摸面板功能操作开关定义*******************************************************************************************************/
|
||||
#define SUPPORT_COVER_PANAL_AFTER_POWERON 0 //1:支持上电再盖上触摸面板 0:不支持
|
||||
#if SUPPORT_COVER_PANAL_AFTER_POWERON
|
||||
#define PANAL_COVER_JUDGE_TIME 2 //单位为15.625ms
|
||||
#define JUDGE_TK_NUM (KEY_CH_COUNT-2)
|
||||
#endif
|
||||
//说明:上电后再盖上触摸面板,一般情况下会有多个按键触摸数值变化量超过或接近触摸门限值,为了防止此类操作产生误动作,在检测到多个按键超过或接近触发门限值时,设置按键无效并重置触摸功能。
|
||||
/*******************************************************************************************************************************/
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
/********触摸按键通道及触发门限值定义***********************************************************/
|
||||
#define KEY_CH_COUNT 6 //触摸按键数量,必须正确填写 //50
|
||||
/*
|
||||
ch5:Brightness_IN+
|
||||
ch4:Brightness_IN-
|
||||
|
||||
*/
|
||||
#define KEY_SEQ \
|
||||
{TS_CH4 , 50 }, \
|
||||
{TS_CH5 , 50 }, \
|
||||
{TS_CH7 , 80 }, \
|
||||
{TS_CH9 , 50 }, \
|
||||
{TS_CH10 , 50 }, \
|
||||
{TS_CH12 , 50 }, \
|
||||
|
||||
/*
|
||||
{TS_CH0 , 190 }, \
|
||||
{TS_CH1 , 190 }, \
|
||||
*/
|
||||
|
||||
/*********************************************************************
|
||||
说明:
|
||||
1: {TS_CHx, XX}
|
||||
| |
|
||||
| |
|
||||
| ------------->对应触摸通道的门限值,当触摸数据变化量大于此数值时,按键触发。
|
||||
--------------------->触摸通道序号。
|
||||
|
||||
2: 以上触摸门限值可在触摸在线调试模式下由上位机软件(CACHIPTOOL.exe)导出。
|
||||
*********************************************************************/
|
||||
|
||||
/***********NOISE门限值定义************************************************************************************/
|
||||
#define NOISE_THRESHOLD 30 //此门限值可设置为触摸按键门限值的1/4 ~ 1/2
|
||||
/*************************************************************************************************************/
|
||||
|
||||
#define ANTI_SPEAKER_EN 0 //抗对讲机干扰使能开关,此功能主要是利用内部触摸参考通道来判断电源是否受对讲机干扰,如果是电源受对讲机干扰而误产生按键,则产生的按键丢弃。
|
||||
|
||||
#if ANTI_SPEAKER_EN
|
||||
#define REF_CH_ABNORMAL_THD 8 //定义内部参考通道数值变化多少才认为是有对讲机干扰
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define TK_SHARE_LED_EN 0 //触摸引脚复用LED驱动引脚功能开关
|
||||
|
||||
#if TK_SHARE_LED_EN
|
||||
/**************************************************************************************
|
||||
重要提醒: 在此应用中,由于LED灯本身存在结电容,不同种类的LED灯的结电容存在较大差异,并且此结电容在LED灯亮与灭时
|
||||
可能存在差异(尤其是白色LED比较明显),此结电容对触摸存在不良影响,所以在应用此功能时要严格挑选LED灯,并且量产后如
|
||||
要更换LED灯要重新调试软件灵敏度。
|
||||
***************************************************************************************/
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define LED_DRV_CNT 2000 //此项参数可设置LED扫描占空比,数值越大,LED亮度越高,但触摸采集的速度越慢
|
||||
//---------------------------------------------------------------------------------------
|
||||
|
||||
#define TK_SENSITIVE_AUTO_TRIM_EN 1 //见以下说明
|
||||
|
||||
/*
|
||||
此功能选项用于解决生产过程中应用不同的LED灯造成灵敏度差异问题,
|
||||
在应用时必须填写以下列表数值,数值的涵义是无按键时每个触摸通道的计数数值,
|
||||
其顺序对应上面定义的KEY_SEQ列表,计数数值也对应KEY_SEQ中定义的门限值,
|
||||
在应用时如果换上不同批次或不同颜色的LED灯,由于不同颜色的LED灯的结电容可能不同,
|
||||
从而造成触摸计数数值也不同,程序会根据以下定义的参考计数值相应调整其门限值,从而使
|
||||
应用不同的LED灯灵敏度基本一致,而不需要用户更改软件。
|
||||
*/
|
||||
|
||||
#if TK_SENSITIVE_AUTO_TRIM_EN
|
||||
|
||||
#define TK_BASELINE_VALUE_SEQ \
|
||||
1740, \
|
||||
1872, \
|
||||
1812, \
|
||||
1830, \
|
||||
1947, \
|
||||
1779, \
|
||||
1672, \
|
||||
1960, \
|
||||
1808, \
|
||||
1710,
|
||||
#endif
|
||||
#else
|
||||
#define TK_SENSITIVE_AUTO_TRIM_EN 0
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
/***********触摸按键消抖及按键输出时间定义************************************************************************************/
|
||||
#define FINGER_TOUCH_CONFIRM_TIME 2 //触摸按键按下确认时间,单位为15.625ms
|
||||
#define FINGER_TOUCH_RELEASE_CONFIRM_TIME 2 //触摸按键释放确认时间,单位为15.625ms
|
||||
#define FINGER_LONG_TOUCH_TIME_LIMIT 0 //限制按键输出时间,单位为0.5s,若定义为0,则关闭此功能
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
/***********环境值更新速度设置********************************************************/
|
||||
#define AREA_PNOISE_PLUS_CONFIRM_TIME 100 //单位为15.625ms
|
||||
#define AREA_PNOISE_CONFIRM_TIME 80 //单位为15.625ms
|
||||
#define AREA_NNOISE_CONFIRM_TIME 30 //单位为15.625ms
|
||||
#define AREA_OVERLOW_CONFIRM_TIME 30 //单位为15.625ms
|
||||
|
||||
//说明:一般情况下,环境值更新速度设置用户不需要设置,保持默认值即可。
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#else
|
||||
#define KEY_CH_COUNT 0
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------触摸滑条或圆环应用设置-------------------------------------------------------------------------------------------------
|
||||
#if SUPPORT_WHEEL_SLIDER
|
||||
//-----------------------------------------------------------------------------
|
||||
#define PRINT_WHEEL_SLIDER_POSITION_EN 0 //打印触摸圆环或滑条位置开关
|
||||
#define PRINT_WHEEL_SLIDER_DATA_EN 0 //打印触摸圆环或滑条触摸数据开关
|
||||
#define PRINT_WHEEL_SLIDER_RATE_EN 0 //打印比率值
|
||||
|
||||
|
||||
#define WHEEL_SLIDER_BASELINE_UPDATE_TIME 50 //单位为15.625ms
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define WHEEL_SLIDER_TOUCH_CONFIRM_TIME 2 //圆环或滑条按下确认时间,单位为15.625ms
|
||||
#define WHEEL_SLIDER_TOUCH_RELEASE_CONFIRM_TIME 2 //圆环或滑条释放确认时间,单位为15.625ms
|
||||
#define WHEEL_SLIDER_LONG_TOUCH_TIME_LIMIT 0 //限制圆环和滑条触发时间,单位为0.5s,若定义为0,则关闭此功能
|
||||
//------------------------------------------------------------------------------------
|
||||
|
||||
#define WHEEL_OR_SLIDER_DEF0 WHEEL //是滑条还是圆环,如果是滑条,定义为SLIDER,如果是圆环,定义为WHEEL
|
||||
|
||||
#define WHEEL_SLIDER0_CH_COUNT 4 //第一个圆环或滑条通道数目,必须正确填写
|
||||
#define WHEEL_SLIDER0_SEQ TS_CH11,TS_CH3,TS_CH6, TS_CH8 //通道列表,以顺时钟或从左到右的顺序填写27, 29, 21, 30,
|
||||
#define WHEEL_SLIDER0_CH_MIN_RATE 27, 10, 21, 30, //手指触摸某通道中间位置时,邻近通道与该通道变化量的比率,该数值与上述通道定义一一对应。该数值可通过打开宏定义PRINT_WHEEL_SLIDER_RATE_EN通过UART打印。
|
||||
//27, 10, 21, 30,
|
||||
|
||||
#define WHEEL_SLIDER0_TOUCH_THD 0x14
|
||||
#define WHEEL_SLIDER0_NOISE_THD 0x08
|
||||
|
||||
#if !SUPPORT_KEY
|
||||
#define NOISE_THRESHOLD WHEEL_SLIDER0_NOISE_THD
|
||||
#endif
|
||||
//------------------------------------------------------------------------------------
|
||||
#else
|
||||
#define WHEEL_SLIDER0_CH_COUNT 0
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#define OPENED_TS_COUNT (KEY_CH_COUNT+WHEEL_SLIDER0_CH_COUNT)
|
||||
|
||||
#if (!SUPPORT_KEY)
|
||||
#undef DEBUG
|
||||
#define DEBUG 0
|
||||
#endif
|
||||
#if DEBUG
|
||||
#define I2C_SELECT_P30_P31
|
||||
// #define I2C_SELECT_P02_P03
|
||||
|
||||
#ifdef I2C_SELECT_P30_P31
|
||||
#ifdef UART0_EN
|
||||
//#error "请在ca51f5_config.h中关闭宏定义UART0_EN!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#undef SUPPORT_TOUCH_SLEEP_MODE //省电模式不支持触摸在线调试,所以要关闭省电模式
|
||||
#define SUPPORT_TOUCH_SLEEP_MODE 0
|
||||
#endif
|
||||
#define TK_Debug_UartPutChar Uart0_PutChar
|
||||
#endif
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
@@ -0,0 +1,147 @@
|
||||
//TKCON定义
|
||||
#define TKST(N) (N<<7) //N=0-1
|
||||
#define TKIE(N) (N<<6) //N=0-1
|
||||
#define TMEN(N) (N<<5) //N=0-1 //RTC触发TKST
|
||||
#define TWKE(N) (N<<4) //N=0-1 //省电自动唤醒 0:TKST=0即产生TKIF, 1: TKST=0后满足比较条件后才产生TKIF
|
||||
|
||||
#define VRS(N) (N<<0) //N=0-7 //比较器参考电压选择
|
||||
|
||||
//TKCFG定义
|
||||
#define TKDIV(N) (N<<5) //N=0-7 //时钟分频 分频系数 (TKDIV+1),0:不分频
|
||||
#define TKTMS(N) (N<<0) //N=0-31 //放电时间设置 放电时间: (TKTMS)*32*Ttk , TKTMS必须大于0,如果为0不放电
|
||||
|
||||
//TKxCHS定义 //x=0-5
|
||||
#define MPOL(N) (N<<7) //N=0-1 //0- TKxMS < ATKxM; 1- TKxMS >= ATKxM
|
||||
#define NPOL(N) (N<<6) //N=0-1 //0- TKxMS < ATKxN; 1- TKxMS >= ATKxN
|
||||
#define TKPS(N) (N<<0) //N=0-14 0:不选 1-13对应TK0-TK12; 14对应TKCAP
|
||||
|
||||
//TKIF定义 //TKST=0后一起置位
|
||||
#define TKIF5 (1<<5)
|
||||
#define TKIF4 (1<<4)
|
||||
#define TKIF3 (1<<3)
|
||||
#define TKIF2 (1<<2)
|
||||
#define TKIF1 (1<<1)
|
||||
#define TKIF0 (1<<0)
|
||||
|
||||
//TKPWC定义
|
||||
#define TKPC(N) (N<<6) //N=0-3
|
||||
#define VDS(N) (N<<4) //N=0-3
|
||||
#define VIRS(N) (N<<2) //N=0-3
|
||||
#define TKPWS(N) (N<<1) //N=0-1
|
||||
#define TKCVS(N) (N<<0) //N=0-1
|
||||
|
||||
//TLCON定义
|
||||
#define TLEIE(N) (N<<7) //N=0-1
|
||||
#define TLKIE(N) (N<<6) //N=0-1
|
||||
#define TLLIE(N) (N<<5) //N=0-3
|
||||
#define TLLVS(N) (N<<1) //N=0-3
|
||||
#define TLPOL(N) (N<<0) //N=0-1
|
||||
|
||||
|
||||
//TLFLG定义 //TKST=0后一起置位
|
||||
#define TLERR (1<<7)
|
||||
#define TLKOV (1<<6)
|
||||
#define TLLOV (1<<5)
|
||||
|
||||
//TLCKS??
|
||||
#define TLCKS(N) (N<<0) //N=0-7
|
||||
|
||||
//TLCKS??
|
||||
#define TLCOMS(N) (N<<0) //N=0-7
|
||||
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long int dwVal;
|
||||
unsigned int wVal[2];
|
||||
unsigned char bVal[4];
|
||||
}
|
||||
DWORD_UNION;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned int wVal;
|
||||
unsigned char bVal[2];
|
||||
}
|
||||
WORD_UNION;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TS_INIT,
|
||||
TS_DEAL
|
||||
} TSState_T;
|
||||
|
||||
enum
|
||||
{
|
||||
AREA_FINGER_TOUCH,
|
||||
AREA_PNOISE_PLUS,
|
||||
AREA_PNOISE,
|
||||
AREA_NNOISE,
|
||||
AREA_OVER_LOW
|
||||
};
|
||||
enum
|
||||
{
|
||||
WHEEL_SLIDER_NO_TOUCH,
|
||||
WHEEL_SLIDER_TOUCH,
|
||||
};
|
||||
|
||||
#define WHEEL 0
|
||||
#define SLIDER 1
|
||||
enum
|
||||
{
|
||||
TS_CH0,
|
||||
TS_CH1,
|
||||
TS_CH2,
|
||||
TS_CH3,
|
||||
TS_CH4,
|
||||
TS_CH5,
|
||||
TS_CH6,
|
||||
TS_CH7,
|
||||
TS_CH8,
|
||||
TS_CH9,
|
||||
TS_CH10,
|
||||
TS_CH11,
|
||||
TS_CH12,
|
||||
};
|
||||
enum
|
||||
{
|
||||
LED_ON,
|
||||
LED_OFF,
|
||||
LED_ALL_OFF,
|
||||
};
|
||||
#ifndef TS_SERVICE_C
|
||||
#if (KEY_CH_COUNT <= 8)
|
||||
#define TYPE_SN unsigned char
|
||||
#elif (KEY_CH_COUNT <= 16)
|
||||
#define TYPE_SN unsigned int
|
||||
#else
|
||||
#define TYPE_SN unsigned long int
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define KEY_BREAK 0x1000 //短按抬起
|
||||
#define KEY_LONG 0x2000 //长按
|
||||
#define KEY_LONG_BREAK 0x3000 //长按抬起
|
||||
#define KEY_LONG_START 0x4000 //长按开始
|
||||
|
||||
#define K1 0x0001
|
||||
#define K2 0x0002
|
||||
#define K3 0x0004
|
||||
#define K4 0x0008
|
||||
#define K5 0x0010
|
||||
#define K6 0x0020
|
||||
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
TK_STATE_RELEASE,
|
||||
TK_STATE_SINGLE_KEY_PRESS,
|
||||
TK_STATE_DOUBLE_KEY_PRESS,
|
||||
};
|
||||
|
||||
#define TS_LONG_START_TIME 250
|
||||
#define TS_LONG_TIME 70
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef _TS_SERVICE_H_
|
||||
#define _TS_SERVICE_H_
|
||||
|
||||
void TS_IO_init(void);
|
||||
void TS_ScanStart(void);
|
||||
void TS_ScanContinue(void);
|
||||
void TSKey_DataDeal(void);
|
||||
void TS_RunInit(void);
|
||||
void TS_CheckRefCh(void);
|
||||
void TS_AreaConfirmTimerSet(unsigned char ts_ch, unsigned char area);
|
||||
void TS_MS_ISR(void);
|
||||
void TS_HS_ISR(void);
|
||||
void TS_CfgPinFunc(unsigned char idx,unsigned char Func);
|
||||
unsigned char TS_GetDataArea(unsigned char ts_ch,unsigned int ts_data,int noise_thd,bit key_pressed_flag);
|
||||
unsigned char TS_AreaDeviateDetection(unsigned int cmp_data,unsigned int real_data,int range);
|
||||
void TS_BaseLineForceUpdate(void);
|
||||
void SetWheelSliderRefCh(unsigned char SliderNum);
|
||||
int WheelTouchJudge(unsigned char WHEEL_SLIDER0_CH_COUNT_V,unsigned int WHEEL_SLIDER0_TOUCH_THD_V);
|
||||
int SliderTouchJudge(unsigned char WHEEL_SLIDER0_CH_COUNT_V,unsigned int WHEEL_SLIDER0_TOUCH_THD_V);
|
||||
#endif
|
||||
@@ -0,0 +1,122 @@
|
||||
#ifndef _I2C_C_
|
||||
#define _I2C_C_
|
||||
|
||||
/*********************************************************************************************************************/
|
||||
#include "ca51f5_config.h"
|
||||
#include "includes\ca51f5sfr.h"
|
||||
#include "includes\ca51f5xsfr.h"
|
||||
#include "includes\gpiodef_f5.h"
|
||||
#include "Library\Includes\system_clock.h"
|
||||
#include "Library\Includes\i2c.h"
|
||||
/*********************************************************************************************************************/
|
||||
#include "TS_Lib\Includes\ts_configuration.h"
|
||||
#include "TS_Lib\Includes\ts_def.h"
|
||||
#include "TS_Lib\Includes\ts_api.h"
|
||||
#include "TS_Lib\Includes\ts_service.h"
|
||||
/*********************************************************************************************************************/
|
||||
#if DEBUG
|
||||
#define I2C_ADDR 0xCA
|
||||
unsigned char xdata TouchDebugID = '5';
|
||||
unsigned char rxOffset;
|
||||
unsigned char regAddr;
|
||||
bit iicReadMode;
|
||||
extern TSState_T xdata TS_State_Debug;
|
||||
extern unsigned char xdata Key_Cnt_Debug;
|
||||
extern unsigned char xdata TS_CH_Debug[OPENED_TS_COUNT];
|
||||
extern unsigned int xdata TS_RefChBaseLineData;
|
||||
extern unsigned int xdata TS_RefPostData;
|
||||
extern unsigned int xdata KeysFlagSN_Debug;
|
||||
code unsigned char *TS_INFO[]=
|
||||
{
|
||||
&TouchDebugID,
|
||||
&TS_State_Debug,
|
||||
&Key_Cnt_Debug,
|
||||
&TS_RefChBaseLineData,
|
||||
&TS_RefPostData,
|
||||
&KeysFlagSN_Debug,
|
||||
&TS_BaseLineData[0],
|
||||
&TS_PostData[0],
|
||||
&TSKey_FingerThd[0],
|
||||
&TS_CH_Debug[0],
|
||||
};
|
||||
unsigned char *pTS_Info;
|
||||
void I2C_ISR(void)
|
||||
{
|
||||
unsigned char Sta_Temp;
|
||||
TouchDebugID = '5';
|
||||
Sta_Temp = I2CSTA;
|
||||
|
||||
if(Sta_Temp == 0x60) //接收到从机地址+写位
|
||||
{
|
||||
rxOffset = 0xff;
|
||||
iicReadMode = 0;
|
||||
I2CCON |= AAK(1);
|
||||
}
|
||||
else if(Sta_Temp == 0x80)
|
||||
{
|
||||
if(iicReadMode) //发送一字节数据
|
||||
{
|
||||
rxOffset++;
|
||||
I2CDAT = *(pTS_Info+rxOffset);
|
||||
}
|
||||
else //接收到一字节数据
|
||||
{
|
||||
if(rxOffset == 0xff) //地址
|
||||
{
|
||||
regAddr=I2CDAT;
|
||||
pTS_Info = TS_INFO[regAddr];
|
||||
rxOffset=0;
|
||||
I2CCON |= AAK(1);
|
||||
}
|
||||
else //数据
|
||||
{
|
||||
*(pTS_Info+rxOffset) = I2CDAT;
|
||||
rxOffset++;
|
||||
I2CCON |= AAK(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(Sta_Temp==0xA8) //接收到从机地址+读位,发送ACK信号
|
||||
{
|
||||
I2CDAT = *(pTS_Info+rxOffset);
|
||||
iicReadMode = 1;
|
||||
}
|
||||
else if(Sta_Temp == 0x88)
|
||||
{
|
||||
}
|
||||
I2CFLG |= I2CF;
|
||||
}
|
||||
void Debug_init(void)
|
||||
{
|
||||
#ifdef I2C_SELECT_P30_P31
|
||||
I2CIOS = 0;
|
||||
GPIO_Init(P30F,P30_I2C_SDA_SETTING);
|
||||
GPIO_Init(P31F,P31_I2C_SCL_SETTING);
|
||||
#elif defined I2C_SELECT_P02_P03
|
||||
I2CIOS = 1;
|
||||
GPIO_Init(P03F,P03_I2C_SDA_SETTING);
|
||||
GPIO_Init(P02F,P02_I2C_SCL_SETTING);
|
||||
#endif
|
||||
|
||||
I2CCON = I2CE(1) | I2CIE(1) | STA(0) | STP(0)| CKHD(0) | AAK(1)| CBSE(0) | STFE(0);
|
||||
I2CADR = (I2C_ADDR>>1);
|
||||
|
||||
INT4EN = 1;
|
||||
PS1 = 1;
|
||||
}
|
||||
void Debug_ParamLoad(void)
|
||||
{
|
||||
unsigned char i;
|
||||
KeysFlagSN_Debug = (unsigned int)KeysFlagSN;
|
||||
TS_State_Debug = TS_State;
|
||||
Key_Cnt_Debug = KEY_CH_COUNT;
|
||||
for(i = 0; i < KEY_CH_COUNT; i++)
|
||||
{
|
||||
TS_CH_Debug[i] = TS_CH[i];
|
||||
}
|
||||
TS_RefPostData = TS_PostData[OPENED_TS_COUNT];
|
||||
TS_RefChBaseLineData = TS_RefPostData;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Reference in New Issue
Block a user