本帖最后由 咸鱼头 于 2021-6-26 21:11 编辑
所有按键除了key9之外都可以用
只有key9毫无反应
这是.C
#include "ttp229.h"
#include "usart.h"
void TouchKey_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
KEY_SDA_OUT();
TT_SCL=0;
TT_SDO=0;
TouchKey_Read();
}
u16 TouchKey_Read(void)
{
u8 i;
u16 re_val;
KEY_SDA_OUT();
TT_SDO=1;
delay_us(93);
TT_SDO=0;
delay_us(15);
KEY_SDA_IN();
for(i=0;i<16;i++)
{
TT_SCL=1;
delay_us(3);
TT_SCL=0;
if(TT_SDI==1)
{
re_val|=(1<<i);
}
delay_us(3);
}
delay_ms(2);
return re_val;
}
u16 PreKeyNum=0;
u16 NowKeyNum=0;
u8 Get_KeyNum(void)
{
u8 key_num;
NowKeyNum=TouchKey_Read();
if((NowKeyNum&0x0001)&&!(PreKeyNum&0x0001))
{
key_num=1;
}
if((NowKeyNum&0x0002)&&!(PreKeyNum&0x0002))
{
key_num=2;
}
if((NowKeyNum&0x0004)&&!(PreKeyNum&0x0004))
{
key_num=3;
}
if((NowKeyNum&0x0008)&&!(PreKeyNum&0x0008))
{
key_num=4;
}
if((NowKeyNum&0x0010)&&!(PreKeyNum&0x0010))
{
key_num=5;
}
if((NowKeyNum&0x0020)&&!(PreKeyNum&0x0020))
{
key_num=6;
}
if((NowKeyNum&0x0040)&&!(PreKeyNum&0x0040))
{
key_num=7;
}
if((NowKeyNum&0x0080)&&!(PreKeyNum&0x0080))
{
key_num=8;
}
if((NowKeyNum&0x0100)&&!(PreKeyNum&0x0100))
{
key_num=9;
}
if((NowKeyNum&0x0200)&&!(PreKeyNum&0x0200))
{
key_num=10;
}
if((NowKeyNum&0x0400)&&!(PreKeyNum&0x0400))
{
key_num=11;
}
if((NowKeyNum&0x0800)&&!(PreKeyNum&0x0800))
{
key_num=12;
}
if((NowKeyNum&0x1000)&&!(PreKeyNum&0x1000))
{
key_num=13;
}
if((NowKeyNum&0x2000)&&!(PreKeyNum&0x2000))
{
key_num=14;
}
if((NowKeyNum&0x4000)&&!(PreKeyNum&0x4000))
{
key_num=15;
}
if((NowKeyNum&0x8000)&&!(PreKeyNum&0x8000))
{
key_num=16;
}
PreKeyNum=NowKeyNum;
return key_num;
}
这是.H
#ifndef __TTP229_H
#define __TTP229_H
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
//#define KEY_SDA_IN() {GPIOD->CRL&=0XFFFF0FFF;GPIOD->CRL|=0X00008000;GPIOC->ODR==0<<3;}
//#define KEY_SDA_OUT() {GPIOD->CRL&=0XFFFF0FFF;GPIOD->CRL|=0X00003000;}
#define KEY_SDA_IN() {GPIOD->CRL&=0XFFFF0FFF;GPIOD->CRL|=(u32)8<<12;}
#define KEY_SDA_OUT() {GPIOD->CRL&=0XFFFF0FFF;GPIOD->CRL|=(u32)3<<12;}
#define TT_SCL PDout(2)
#define TT_SDO PDout(3)
#define TT_SDI PDin(3)
u16 TouchKey_Read(void);
void TouchKey_init(void);
u8 Get_KeyNum(void);
#endif楼主使用的是stm32f103vct6单片机
|