今天我们来了解一下合泰的触摸库,这是合泰芯片的一个特色功能,可以支持多个模拟按键,远超32/51。根据电路图可以发现,这个芯片有多达20个按键支持模拟信号,也就是触摸按键。核心板用到的PC2和PC3就是触摸按键13,14。

        这里我们配置寄存器不需要根据芯片手册一点点配置,使用合泰自带的触摸库就可以简单实现功能。一共需要配置两个文件。这里先来配置按键相应的功能,也就是TKS这个文件(在后面的图片中),系统时钟使用的是8M,所以配置为0。

                               

        然后是按键的相关设置,第一个DebounceTimes是设置按键消抖次数(1~15);第二个AutoCalibrationPeriod,自动校准时间间隔;第三是HighSensitive,高灵敏度检测,如果设置为1灵敏度会变高,戴手套也能检测;第四个是MaximumKeyHoldTime,按键最长保持时间,这里是设置长按多久算卡死并强制松键;第五个是FastResponse快速相应,设置为1响应速度会加快,0的抗噪性能更好;第六是AutoFrequencyHopping自动跳频,可以提高抗干扰能力;第七是OneKeyActive,可以设置允许多键同时按下;第八是PowerSave,可以选择空闲时是否降采样省电,第九是NoiseProtect,噪声过大时按键直接保护;第十是MovingCalibration,手在按键上移动时校准,开启后抗漂移能力会增强;最后一个则是MainFreqSelect,设置触控扫描主时钟。根据项目的需要来配置下面的功能,这里的配置如下图所示。

除此之外还要配置单个按键的触发阈值,也就是手指按下时,触控通道的计数值必须比基准值高出多少才被认为是一次有效按键。越大越难触发,越小灵敏度越高。这里全部设置为30,中等的灵敏度。

        然后来看主程序,PROGRAM.C这个是主函数,有朋友可能会疑惑这里为什么不使用void main(),这俩名字不一样而已,但如果删掉写main函数会报错,错误是重复调用。接下来配置两个LED:PB6和PB7,两个配置输出为0即可。

配置完后,主函数写一个简单的逻辑,按下一个触摸按键点亮一个LED,按下俩就点亮两个。

//主函数
#define LED1 _pbc6
#define LED2 _pbc7 
void USER_PROGRAM_INITIAL()
{	
	LED1=0;//LED初始化
	LED2=0;

	_emi = 1;
}
//==============================================
//**********************************************
//==============================================
void USER_PROGRAM()
{
	_clrwdt();//喂狗
	GET_KEY_BITMAP();//把函数库扫描的结果复制到DATA_BUF中
	//BUF0的bit7--0对应按键KEY8--1
	//BUF1的......对应KEY16--9
	if((DATA_BUF[1]&0x20)==0x20)//TK1,按下LED亮,松手灭
	{
		LED1=0;
	}
	else
	{
		LED1=1;	
	}
		if((DATA_BUF[1]&0x10)==0x10)//TK2,同上
	{
		LED2=0;
	}
	else
	{
		LED2=1;	
	}
}




//按键配置
#define IO_TOUCH_ATTR						00000011000000000000B;

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐