#新定义TBK-RD8T3x之触控DEMO程序浅析

 一、自带触控程序

        TBK-RD8T3x评估版自带触控DEMO程序,上手十分丝滑,轻点几下,划一划LED灯亮起,似乎触控原本就该如此。并且新定义TBK-RD8T3x应用资料->TBK-RD8T3x Demo Code中是提供了源码,出于好奇大略看一下,初时如云里雾里,GPIO初始化在哪?TK的初始化哪?程序这么就知道了触控哪个按键。好像DEMO中提到了,但哪个是呀?程序里这些都该封装的封装,该静态库的静态库,给用户空间不多,而规则倒是有一些,如果不了解规则那真是看不懂了。如果有同样困惑,那你一定也看了DEMO源码。

二、程序分析

1、DEMO主程序

void main(void)
{	
    /*** MCU init***/
    SC_Init();
    TouchKeyInit();
    while(1)
    {
        Sys_Scan();
    }
}

 包括SC_Init():GPIO的初始化;GPIO中只有LED灯的GPIO初始化,没有TK的。

        TouchKeyInit():触控初始化;这个函数没有提供源码,是静态库。那静态库怎么知道TK初始了哪个引脚?

        Sys_Scan():轮询监测触控是否被按下,MCU做出响应。

2、S_TouchKeyCFG.h

       查了一下TK的通过配置文件S_TouchKeyCFG.h初始化的, TouchKeyInit()应该是读取了配置文件然后调用静态库中的函数对TK引脚初始化。

//*************************************************************************************************
//Copyright (c) 合肥市新定义电子有限公司
//文件名称:  S_TouchKeyCFG.h
//作者: 
//模块功能:  触控键配置文件
//版本:  V0.2
//更改记录:
//************************************************************************************************
#ifndef __S_TOUCHKEYCFG_H__
#define __S_TOUCHKEYCFG_H__
#define		    SOCAPI_SET_TOUCHKEY_TOTAL					  9
#define			SOCAPI_SET_TOUCHKEY_CHANNEL					  0x0FC00007
unsigned int  code TKCFG[17] = {0,0,0,5,10,3000,200,100,2,0,0,4,0,1,65535,65535,20}; 
unsigned char code TKChannelCfg[9][8]={
0x05,0x39,0x04,0x08,0x13,0x05,0x01,0x01,
0x05,0x39,0x04,0x08,0x15,0x05,0x00,0xe2,
0x05,0x39,0x04,0x08,0x12,0x05,0x00,0xc8,
0x05,0x39,0x04,0x08,0x11,0x05,0x00,0xd1,
0x05,0x39,0x04,0x08,0x0e,0x05,0x00,0xd6,
0x05,0x39,0x04,0x08,0x0e,0x05,0x01,0x09,
0x05,0x39,0x04,0x08,0x0c,0x05,0x00,0xe3,
0x05,0x39,0x04,0x08,0x0b,0x05,0x00,0xf7,
0x05,0x39,0x04,0x08,0x11,0x05,0x01,0x04,
};
#endif

 《新定义RD8系列TouchKey MCU应用指南》中相关定义的解释

c6ad70436b75413d984a5c939616d97c.png

#define            SOCAPI_SET_TOUCHKEY_TOTAL                      9

TK通道数目,DEMO中用到了TK0、TK1、TK2;TK22-TK27,一共9个TK通道。

#define            SOCAPI_SET_TOUCHKEY_CHANNEL                      0x0FC00007

具体是哪些通道哪?上面的0x0FC00007是16进制转化为2进制就是: 1111110000000000000000000111

也就是对应前面的9个通道。

unsigned int  code TKCFG[17] = {0,0,0,5,10,3000,200,100,2,0,0,4,0,1,65535,65535,20}; 
unsigned char code TKChannelCfg[9][8]={...

这两个数组是什么?官方大部分说保持默认不改动 ,反正不动就是了。

3、如何感知触控点亮LED

SysFunVarDefine.c:

 void ChangeTouchKeyvalue(void)
{
    /*<UserCodeStart>*//*<SinOne-Tag><347>*/
    switch(exKeyValueFlag)
    {        
        case 0x00400000:exKeyValue = 1;break;    
        case 0x00800000:exKeyValue = 2;break; 
        case 0x01000000:exKeyValue = 3;break;
        case 0x02000000:exKeyValue = 4;break;    
        case 0x04000000:exKeyValue = 5;break; 
        case 0x08000000:exKeyValue = 6;break;
        default:exKeyValue = 0xff;break;             
    }
    
    /*<UserCodeEnd>*//*<SinOne-Tag><347>*/
}

 其中exKeyValueFlag的值也是表示TK通道数目,如0x00400000,就是:10000000000000000000000,对应TK22。

void UpdateDisplay(void)
{
    /*<UserCodeStart>*//*<SinOne-Tag><351>*/
if(exKeyValue != 0xff)
 {
        if(gTkIsValid == 0)    //松手前只出一次键
        {        
            gTkIsValid = 1;
            KeyValue=exKeyValue; 
            switch(KeyValue)
            {        
                case 1:LED1= ~LED1;break;
                case 2:LED2= ~LED2;break; 
                case 3:LED3= ~LED3;break;
				case 4:LED4= ~LED4;break;
                case 5:LED5= ~LED5;break; 
                case 6:LED6= ~LED6;break;   				
                default:exKeyValue = 0xff;break;             
            }
        }                             
    }
    else
    {
        gTkIsValid = 0;        
    }
    
    /*<UserCodeEnd>*//*<SinOne-Tag><351>*/
}

 UpdateDisplay()根据exKeyValue的值来反转对应的LED。

三、总结

1、TK的初始化配置在S_TouchKeyCFG.h中。初始化函数没有开源。

2、TK的通道依赖一个2进制数对应的位,初始化和触控判断都要用到。

3、有个Touch Key Tool Menu的程序是调试触摸用的,可以配制TKChannelCfg,但需要有烧录器才能使用。

4、EasyCodeCube.exe有TK的支持,可以很容易实现TK功能。3eaa8b3d248241b0b218258a59246f66.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值