本帖最后由 sujingliang 于 2025-5-19 20:32 编辑

一、调试触控按键的前提

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,点击“配置”

19.png


16.png

进入在板调试:

可以看到20-25通道已经被自动勾选,这时按确定

17.png


这时出现6个绿点对应6个通道,点击绿点进行调试

18.png

下面是选择了通道20,点击"启动调试"

13.png

然后按照提示,做空置或按键操作:

14.png

调试完成后,生成参数:

15.png


所有6个通道调试完成:

12.png

可以按图表显示和启动诊断,对调试结果进行检验。

按导出配置信息,可以生产配置头文件: 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>
  • 复制代码