一、调试触控按键的前提
1、硬件方面:SOC LINK PRO 或 RD LINK PRO,确保已烧录ARM版固件
2、软件方面:EasyCodeCube(内含SOC赛元高灵敏度触控调试软件)
需要注意:使用SOC LINK PRO 或 RD LINK PRO调试触控按键灵敏度后,开发板会被系统写调试程序,以后就只能用LINK烧录程序,而不再支持ISP烧录,如果有ISP恢复程序,还可以恢复ISP下载,不过目前官网上没有放出LB2001的ISP恢复程序。
二、调试过程
勾选TK触控;应用类型:弹簧触控_按键;按键通道:TK20-25;
连接好SOC LINK PRO,点击“配置”
进入在板调试:
可以看到20-25通道已经被自动勾选,这时按确定
这时出现6个绿点对应6个通道,点击绿点进行调试
下面是选择了通道20,点击"启动调试"
然后按照提示,做空置或按键操作:
调试完成后,生成参数:
所有6个通道调试完成:
可以按图表显示和启动诊断,对调试结果进行检验。
按导出配置信息,可以生产配置头文件: S_TouchKeyCFG.h
<pre>//*************************************************************************************************
//Copyright (c) 深圳市赛元微电子有限公司
//文件名称: S_TouchKeyCFG.h
//作者:
//模块功能: 触控键配置文件
//版本: V0.2
//更改记录:
//************************************************************************************************
#ifndef __S_TOUCHKEYCFG_H__
#define __S_TOUCHKEYCFG_H__
#define SOCAPI_SET_TOUCHKEY_TOTAL 6
#define SOCAPI_SET_TOUCHKEY_CHANNEL 0x03F00000
#define SOCAPI_SET_TOUCHKEY_CHANNEL2 0x00000000
const unsigned int TKCFG[17] = {0,0,0,5,10,3000,200,100,2,1,0,4,0,1,65535,65535,46};
const unsigned char TKChannelCfg[6][10]={
0x03,0x02,0x32,0x04,0x08,0x03,0x1f,0x05,0x03,0x02,
0x03,0x02,0x32,0x04,0x08,0x03,0x23,0x05,0x03,0x7f,
0x03,0x02,0x32,0x04,0x08,0x03,0x23,0x05,0x03,0x4b,
0x03,0x02,0x32,0x04,0x08,0x03,0x1d,0x05,0x03,0x18,
0x03,0x02,0x32,0x04,0x08,0x03,0x23,0x05,0x02,0xfc,
0x03,0x02,0x32,0x04,0x08,0x03,0x1f,0x05,0x03,0x14,
};
#endif
</pre><pre>
</pre>
复制代码配置文件中配置了6个通道的参数。
0x03F00000为通道选择,对应20-25通道
至此上述配置完成了触控按键的灵敏度调试。
三、软件部分
要想使触控按键工作,软件部分还需要做以下工作:
1、main函数
<pre>main()
{
TK_Init();//TK初始化
while(1)
{
Sys_Scan();//按键扫描函数
}
}</pre>
复制代码2、Sys_Scan
<pre>void Sys_Scan(void)
{
if(TK_TouchKeyStatus&0x80)
{
TK_TouchKeyStatus &= 0x7f;
TK_exKeyValueFlag = TK_TouchKeyScan();
DataProcessing(TK_exKeyValueFlag);
ChangeTouchKeyvalue();
UpdateDisplay();
TK_Restart();
}
}</pre>
复制代码3、通道转换为序号
<pre>void ChangeTouchKeyvalue(void)
{
switch(TK_exKeyValueFlag)
{
case 0x00100000:exKeyValue = 1;break;
case 0x00200000:exKeyValue = 2;break;
case 0x00400000:exKeyValue = 3;break;
case 0x00800000:exKeyValue = 4;break;
case 0x01000000:exKeyValue = 5;break;
case 0x02000000:exKeyValue = 6;break;
default:exKeyValue = 0xff;break;
}
}</pre>
复制代码4、根据序号点不同的灯
<pre>void UpdateDisplay(void)
{
if(exKeyValue != 0xff)
{
if(gTkIsValid == 0)
{
gTkIsValid = 1;
KeyValue=exKeyValue;
if(KeyValue != 0)
{
switch(KeyValue)
{
case 1:
GPIO_TogglePins(GPIOB,GPIO_Pin_7);
break;
case 2:
GPIO_TogglePins(GPIOB,GPIO_Pin_4);
break;
case 3:
GPIO_TogglePins(GPIOB,GPIO_Pin_5);
break;
case 4:
GPIO_TogglePins(GPIOB,GPIO_Pin_8);
break;
case 5:
GPIO_TogglePins(GPIOB,GPIO_Pin_6);
break;
case 6:
GPIO_TogglePins(GPIOB,GPIO_Pin_9);
break;
}
}
}
}
else
{
gTkIsValid = 0;
}
}</pre>
复制代码