TTP229 TonTouch IC是一款使用电容感应式原理设计的触摸芯片。此芯片内建稳压电路供触摸传感器使用,稳定的触摸效果可以应用在各种不同应用上,人体触摸面板可以通过非导电性绝缘材料连接,主要应用是以取代机械开关或按钮,此芯片可以独立支持8个触摸键或16个触摸键.

TTP229 具有 8 键输入模式和 16 键输入模式。两者是通过 TP2(KYSEL)是否连接高阻值电阻到VSS 所决定。默认为 TP2(KYSEL)不连接电阻到 VSS 选定为 8 键输入模式,16 键输入模式是连接高阻值电阻到 VSS。
本模块采用的是TP2连接高阻值到GND。即16 键输入模式;
TTP229 具有 8 端口直接输出模式和两种串行输出模式。16 键输入模式下只能使用串行输出方式。本模块采用的是两线输出模式
TTP229 具备单键有效和多键有效功能。这些功能由 TP3(SKMS1)和 TP4(SKMS0) 端口设定。全部16 个按键可分为一组或两组进行设置。第一组包括 TP0,TP1,TP2,TP3,TP8,TP9,TP10,TP11 按键。组-2 包括 TP4,TP5,TP6,TP7,TP12,TP13,TP14,TP15 按键。设置方式键下表 :
| TP3 | TP4 | 功能说明 |
|---|---|---|
| 0 | 0 | 全部多键有效:设定为一组(16键) |
| 0 | 1 | 设置为2组:第一组=>单键;第二组=>多键 |
| 1 | 0 | 设置为2组:第一组=>单键;第二组=>单键 |
| 1 | 1 | 全部单键有效:一组(16键) |
备注:1. 设定为一组:
其包括:TP0~TP15。
设定为二组:
第一组其包括=>TP0,TP1,TP2,TP3,TP8,TP9,TP10,TP11。
第二组其包括=>TP4,TP5,TP6,TP7,TP12,TP13,TP14,TP15。
2. 当使用 8 模式时 TP0~TP7 为输入键。
3. TP3 和 TP4 的选择状态,“0”状态是指连接高阻值电阻到 VSS,“1”状态是不连接高阻值电阻到 VSS。
4. 在单键有效功能下,键的检测承认优先权是依键的扫描顺序(从 TP0 到 TP15),当同时多键被有效触摸。不是依照键被触摸的强度。
本模块是TP3和TP4连接高阻值到GND:全部多键有效:设定为一组(16键)
| TTP229 | 51单片机 |
|---|---|
| V | 5V |
| G | GND |
| SCL | P1_0 |
| SDA | P1_1 |
模块采用的是2-线串行通讯方式

模块设置的是TP1=1,TP2=0,设置为16键模式,低电平有效
unsigned int ttp229_read(void)
{
unsigned char i;
unsigned int temp = 0;
sdo=0;
delay10us(10);
sdo=1;
delay10us(1);
for(i=0;i<16;i++)
{
temp>>=1;
scl=0;
if(!sdo)
temp|=0x8000;
scl=1;
}
return temp;
}
main()
{
unsigned int a=0;
UART_Init();
while(1)
{
a = ttp229_read();
if(a==0x0001){UART_SendByte('1');UART_SendString("\r\n");}
else if(a==0x0002){UART_SendByte('2');UART_SendString("\r\n");}
else if(a==0x0004){UART_SendByte('3');UART_SendString("\r\n");}
else if(a==0x0008){UART_SendByte('A');UART_SendString("\r\n");}
else if(a==0x0010){UART_SendByte('4');UART_SendString("\r\n");}
else if(a==0x0020){UART_SendByte('5');UART_SendString("\r\n");}
else if(a==0x0040){UART_SendByte('6');UART_SendString("\r\n");}
else if(a==0x0080){UART_SendByte('B');UART_SendString("\r\n");}
else if(a==0x0100){UART_SendByte('7');UART_SendString("\r\n");}
else if(a==0x0200){UART_SendByte('8');UART_SendString("\r\n");}
else if(a==0x0400){UART_SendByte('9');UART_SendString("\r\n");}
else if(a==0x0800){UART_SendByte('C');UART_SendString("\r\n");}
else if(a==0x1000){UART_SendByte('*');UART_SendString("\r\n");}
else if(a==0x2000){UART_SendByte('0');UART_SendString("\r\n");}
else if(a==0x4000){UART_SendByte('#');UART_SendString("\r\n");}
else if(a==0x8000){UART_SendByte('D');UART_SendString("\r\n");}
Delay(100);
}
}
实验现象:按着对应引脚的按键会在串口打印的对应的值


模块容易误触,需要手指尽量按在中心位置,背面不能有金属物质;
需要完整工程的可以在下载留言获取