触摸IC-CST816驱动的实现

一、主要还是读取IC寄存器的值,来判断当前的触摸状态,挑几个重要的函数讲一讲

由以前的文章,我们知道了IIC驱动的实现,而触摸IC的通信协议也是IIC协议。

这样我们在原驱动的基础上实现,触摸IC的读写 以及别的应用接口

1 软件IIC实现

1.1 头文件部分

新增一个结构体 用于获取触摸IC得到的坐标值


/* 触摸屏坐标结构体 */
typedef struct
{
	unsigned int X_Pos;
	unsigned int Y_Pos;
} CST816_Info; //坐标控制器

然后我们需要对触摸IC的另外两个重要引脚进行定义,一个是复位引脚,一个是中断引脚

/* CST816 dev pin defination */
//PB8 PB9 两个按钮 


#define TOUCH_RST_PIN GPIO_PIN_8 //复位
#define TOUCH_INT_PIN GPIO_PIN_9 //中断
#define TOUCH_RST_PORT GPIOB
#define TOUCH_INT_PORT GPIOB

/* functions define */ 

#define TOUCH_RST_0 HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN, GPIO_PIN_RESET)
#define TOUCH_RST_1 HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN, GPIO_PIN_SET)

复位引脚就是初始化的时候对期间进行复位,跟单片机的复位引脚差不多,是由单片机控制电平跳变实现。中断引脚很少使用,在这里我们看见如何使用

枚举了一些动作 和一些结构体的值

/* 设备地址 */
#define Device_Addr 	0x15


/* 触摸屏寄存器 */
#define GestureID 			0x01 //触摸屏中与手势识别
#define FingerNum 			0x02 //记录触摸手指数量
#define XposH 					0x03 //X 坐标高位相关的寄存器地址
#define XposL 					0x04 //X 坐标低位部分的寄存器地址
#define YposH 					0x05 //Y 坐标高位相关的寄存器地址
#define YposL 					0x06 //Y 坐标低位部分的寄存器地址
#define ChipID 					0xA7 //访问触摸屏芯片的唯一标识符寄存器的地址
#define SleepMode				0xE5 //控制触摸屏进入或退出睡眠模式的寄存器地址
#define MotionMask 			0xEC //对某些运动相关操作的屏蔽或启用设置
#define IrqPluseWidth 	0xED //中断低脉冲宽度相关的寄存器地址
#define NorScanPer 			0xEE //触摸屏正常扫描周期相关的寄存器地址
#define MotionSlAngle 	0xEF //涉及到运动滑动角度相关
#define LpAutoWakeTime 	0xF4 //长按自动唤醒时间
#define LpScanTH 				0xF5 //触摸屏的长按扫描阈值
#define LpScanWin 			0xF6 //触摸屏的长按扫描窗口相关
#define LpScanFreq 			0xF7 //触摸屏的长按扫描频率
#define LpScanIdac 			0xF8 //长按扫描电流
#define AutoSleepTime 	0xF9 //触摸屏自动进入睡眠模式的时间相关
#define IrqCtl 					0xFA //触摸屏的中断控制相关
#define AutoReset 			0xFB //触摸屏自动复位相关
#define LongPressTime 	0xFC //触摸屏的长按时间
#define IOCtl 					0xFD //触摸屏的输入输出控制
#define DisAutoSleep 		0xFE //禁止触摸屏自动进入睡眠模式

/* 手势ID识别选项*/
typedef enum
{
	NOGESTURE = 	0x00,//无操作
	DOWNGLIDE = 	0x01,//下滑
	UPGLIDE = 		0x02,//上滑
	LEFTGLIDE = 	0x03,//左滑
	RIGHTGLIDE = 	0x04,//右滑 
	CLICK = 			0x05, //点击
	DOUBLECLICK = 0x0B, //双击
	LONGPRESS = 	0x0C, //长按
} GestureID_TypeDef;

/* 连续动作配置选项 */
typedef enum
{
	M_DISABLE = 	0x00,// 不需要任何连续动作
	EnConLR = 		0x01,// 左右滑动
	EnConUD = 		0x02,//上下滑动
	EnDClick = 		0x03, //双击
	M_ALLENABLE = 0x07, //启用所有连续动作配置
} MotionMask_TypeDef;

/* 中断低脉冲发射方式选项 */
typedef enum
{
	OnceWLP = 		0x00,//单词脉冲发射
	EnMotion = 		0x10,//运动变化
	EnChange = 		0x20,//检测某些特定变化
	EnTouch = 		0x40,//触摸事件
	EnTest = 			0x80,//检测中断是否正常
} IrqCtl_TypeDef;

以下是整个头文件,当然我认为买这个芯片的手册内会有驱动代码,网上开源的应该也有。这部分我觉得不一定要全写,会移植就行,究其本质就是IIC

1.1.2 整个头文件
#ifndef __CST816_H
#define __CST816_H

#include "stdint.h"
#include "main.h"

#if IICSOFT
#include "iic_hal.h"
#else
#include "iic_hal_hard.h"
#endif

#include "delay.h"




/* CST816 dev pin defination */
//PB8 PB9 两个按钮 


#define TOUCH_RST_PIN GPIO_PIN_8 //复位
#define TOUCH_INT_PIN GPIO_PIN_9 //中断
#define TOUCH_RST_PORT GPIOB
#define TOUCH_INT_PORT GPIOB

/* functions define */ 

#define TOUCH_RST_0 HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN, GPIO_PIN_RESET)
#define TOUCH_RST_1 HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN, GPIO_PIN_SET)


/* 设备地址 */
#define Device_Addr 	0x15


/* 触摸屏寄存器 */
#define GestureID 			0x01 //触摸屏中与手势识别
#define FingerNum 			0x02 //记录触摸手指数量
#define XposH 					0x03 //X 坐标高位相关的寄存器地址
#define XposL 					0x04 //X 坐标低位部分的寄存器地址
#define YposH 					0x05 //Y 坐标高位相关的寄存器地址
#define YposL 					0x06 //Y 坐标低位部分的寄存器地址
#define ChipID 					0xA7 //访问触摸屏芯片的唯一标识符寄存器的地址
#define SleepMode				0xE5 //控制触摸屏进入或退出睡眠模式的寄存器地址
#define MotionMask 			0xEC //对某些运动相关操作的屏蔽或启用设置
#define IrqPluseWidth 	0xED //中断低脉冲宽度相关的寄存器地址
#define NorScanPer 			0xEE //触摸屏正常扫描周期相关的寄存器地址
#define MotionSlAngle 	0xEF //涉及到运动滑动角度相关
#define LpAutoWakeTime 	0xF4 //长按自动唤醒时间
#define LpScanTH 				0xF5 //触摸屏的长按扫描阈值
#define LpScanWin 			0xF6 //触摸屏的长按扫描窗口相关
#define LpScanFreq 			0xF7 //触摸屏的长按扫描频率
#define LpScanIdac 			0xF8 //长按扫描电流
#define AutoSleepTime 	0xF9 //触摸屏自动进入睡眠模式的时间相关
#define IrqCtl 					0xFA //触摸屏的中断控制相关
#define AutoReset 			0xFB //触摸屏自动复位相关
#define LongPressTime 	0xFC //触摸屏的长按时间
#define IOCtl 					0xFD //触摸屏的输入输出控制
#define DisAutoSleep 		0xFE //禁止触摸屏自动进入睡眠模式


/* 触摸屏坐标结构体 */
typedef struct
{
	unsigned int X_Pos;
	unsigned int Y_Pos;
} CST816_Info; //坐标控制器

/* 手势ID识别选项*/
typedef enum
{
	NOGESTURE = 	0x00,//无操作
	DOWNGLIDE = 	0x01,//下滑
	UPGLIDE = 		0x02,//上滑
	LEFTGLIDE = 	0x03,//左滑
	RIGHTGLIDE = 	0x04,//右滑 
	CLICK = 			0x05, //点击
	DOUBLECLICK = 0x0B, //双击
	LONGPRESS = 	0x0C, //长按
} GestureID_TypeDef;

/* 连续动作配置选项 */
typedef enum
{
	M_DISABLE = 	0x00,// 不需要任何连续动作
	EnConLR = 		0x01,// 左右滑动
	EnConUD = 		0x02,//上下滑动
	EnDClick = 		0x03, //双击
	M_ALLENABLE = 0x07, //启用所有连续动作配置
} MotionMask_TypeDef;

/* 中断低脉冲发射方式选项 */
typedef enum
{
	OnceWLP = 		0x00,//单词脉冲发射
	EnMotion = 		0x10,//运动变化
	EnChange = 		0x20,//检测某些特定变化
	EnTouch = 		0x40,//触摸事件
	EnTest = 			0x80,//检测中断是否正常
} IrqCtl_TypeDef;

/* 触摸屏初始化相关函数 */
void CST816_GPIO_Init(void);
void CST816_RESET(void);
void CST816_Init(void);

/* 触摸屏操作函数 */
void CST816_Get_XY_AXIS(void);
uint8_t CST816_Get_ChipID(void);
uint8_t CST816_Get_FingerNum(void);
/* 触摸屏读写函数 */
void CST816_IIC_WriteREG(uint8_t addr, uint8_t dat);
uint8_t CST816_IIC_ReadREG(unsigned char addr);

/* 触摸屏有关参数配置函数 */
void CST816_Config_MotionMask(uint8_t mode);
void CST816_Config_AutoSleepTime(uint8_t time);
void CST816_Config_MotionSlAngle(uint8_t x_right_y_up_angle);
void CST816_Config_NorScanPer(uint8_t Period);
void CST816_Config_IrqPluseWidth(uint8_t Width);
void CST816_Config_LpScanTH(uint8_t TH);
void CST816_Wakeup(void);
void CST816_Sleep(void);




#endif

然后到具体将一些函数的内容

1.2 C文件

1.2.1 软件模式的IIC,我们要给iic控制器一个实例,并初始化它。
iic_bus_t CST816_dev =
{
	.IIC_SDA_PORT = GPIOB,
	.IIC_SCL_PORT = GPIOB,
	.IIC_SDA_PIN = GPIO_PIN_7,
	.IIC_SCL_PIN = GPIO_PIN_6,
};
1.2.2 初始化坐标结构体实例,与一些偏移量和翻转定义

翻转就是你的触控坐标可能与原来你想的是反的,这时就要用总的坐标值去减得到的才是你期望的

#define TOUCH_OFFSET_Y 15
#define REVERSE 1

CST816_Info	CST816_Instance;
1.2.3 触摸IC连接的引脚电气初始化
void CST816_GPIO_Init(void)
{	
	GPIO_InitTypeDef GPIO_InitStructure = {0};
	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	/* 初始化复位引脚 */
	GPIO_InitStructure.Pin = TOUCH_RST_PIN;
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStructure.Pull = GPIO_PULLUP;
	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	HAL_GPIO_Init(TOUCH_RST_PORT, &GPIO_InitStructure);
	
	HAL_GPIO_WritePin(TOUCH_RST_PORT,TOUCH_RST_PIN,GPIO_PIN_SET);
	
	/* 初始化中断引脚,不用中断的话屏蔽掉 */
	#if IICSOFT == 1
	/* 初始化I2C引脚 */ 
	IICInit(&CST816_dev);
	#else
	IICInit(&hi2c1);
	#endif
	/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
	//IICStop(&CST816_dev);
}
void CST816_Init(void)
{
	CST816_GPIO_Init();
	CST816_Config_AutoSleepTime(5);
}
1.2.4 读写寄存器,就是用IIC接口操作寄存器地址
#if IICSOFT
/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_ReadREG
*	功能说明: 读取触摸屏单个寄存器的数据
*	形    参:reg:寄存器地址
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
uint8_t CST816_IIC_ReadREG(uint8_t addr)
{
	return IIC_Read_One_Byte(&CST816_dev,Device_Addr,addr);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_WriteREG
*	功能说明: 向触摸屏的寄存器写入数据
*	形    参:addr:寄存器地址
*						dat:	写入的数据
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
void CST816_IIC_WriteREG(uint8_t addr, uint8_t dat)
{
	IIC_Write_One_Byte(&CST816_dev,Device_Addr,addr,dat);
}

#else

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_ReadREG
*	功能说明: 读取触摸屏单个寄存器的数据
*	形    参:reg:寄存器地址
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
uint8_t CST816_IIC_ReadREG(uint8_t addr)
{
	return IIC_Read_One_Byte(&hi2c1,Device_Addr,addr);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_WriteREG
*	功能说明: 向触摸屏的寄存器写入数据
*	形    参:addr:寄存器地址
*						dat:	写入的数据
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
void CST816_IIC_WriteREG(uint8_t addr, uint8_t dat)
{
	IIC_Write_One_Byte(&hi2c1,Device_Addr,addr,dat);
}

#endif
1.2.5 复位

操作对应引脚电平变化触发触摸IC的复位

/*
*********************************************************************************************************
*	函 数 名: TOUCH_RESET
*	功能说明: 触摸屏复位
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_RESET(void)
{
	TOUCH_RST_0;
	HAL_Delay(10);
	TOUCH_RST_1;
	HAL_Delay(100);
}
1.2.6 获取X,Y坐标值

这里读取的X寄存器一共是12位(推断)需要用到XH的低4位与XL的8位组合。然后Y同理。这里如果需要反坐坐标就是减的操作。分辨率是 240*280的。其他的函数基本就是读写寄存器,没必要细看了

#if IICSOFT 
/*
*********************************************************************************************************
*	函 数 名: TOUCH_READ_X
*	功能说明: 读取触摸屏在触摸时的坐标值
*	形    参:无
*	返 回 值: 无 (数据存储在CST816_Instance结构体中)
*********************************************************************************************************
*/
void CST816_Get_XY_AXIS(void)
{
	uint8_t DAT[4];
	IIC_Read_Multi_Byte(&CST816_dev,Device_Addr,XposH,4,DAT);
	CST816_Instance.X_Pos=((DAT[0]&0x0F)<<8)|DAT[1];//(temp[0]&0X0F)<<4|
	CST816_Instance.Y_Pos=((DAT[2]&0x0F)<<8)|DAT[3] + TOUCH_OFFSET_Y;//(temp[2]&0X0F)<<4|
	#if REVERSE
		CST816_Instance.X_Pos = 239 - CST816_Instance.X_Pos;
		CST816_Instance.Y_Pos = 279 - CST816_Instance.Y_Pos;
	#endif
}
#else
/*
*********************************************************************************************************
*	函 数 名: TOUCH_READ_X
*	功能说明: 读取触摸屏在触摸时的坐标值
*	形    参:无
*	返 回 值: 无 (数据存储在CST816_Instance结构体中)
*********************************************************************************************************
*/
void CST816_Get_XY_AXIS(void)
{
	uint8_t DAT[4];
	IIC_Read_Multi_Byte(&hi2c1,Device_Addr,XposH,4,DAT);
	CST816_Instance.X_Pos=((DAT[0]&0x0F)<<8)|DAT[1];//(temp[0]&0X0F)<<4|
	CST816_Instance.Y_Pos=((DAT[2]&0x0F)<<8)|DAT[3] + TOUCH_OFFSET_Y;//(temp[2]&0X0F)<<4|
	#if REVERSE
		CST816_Instance.X_Pos = 239 - CST816_Instance.X_Pos;
		CST816_Instance.Y_Pos = 279 - CST816_Instance.Y_Pos;
	#endif
}
#endif
1.2.7 整个C文件
#include "CST816.h" 



#define TOUCH_OFFSET_Y 15
#define REVERSE 1

CST816_Info	CST816_Instance;

#if IICSOFT == 1
iic_bus_t CST816_dev =
{
	.IIC_SDA_PORT = GPIOB,
	.IIC_SCL_PORT = GPIOB,
	.IIC_SDA_PIN = GPIO_PIN_7,
	.IIC_SCL_PIN = GPIO_PIN_6,
};
#else 
extern I2C_HandleTypeDef hi2c1;
#endif
/*
*********************************************************************************************************
*	函 数 名: CST816_GPIO_Init
*	功能说明: CST816 GPIO口初始化
*	形    参:none
*	返 回 值: none
*********************************************************************************************************
*/
void CST816_GPIO_Init(void)
{	
	GPIO_InitTypeDef GPIO_InitStructure = {0};
	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	/* 初始化复位引脚 */
	GPIO_InitStructure.Pin = TOUCH_RST_PIN;
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStructure.Pull = GPIO_PULLUP;
	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	HAL_GPIO_Init(TOUCH_RST_PORT, &GPIO_InitStructure);
	
	HAL_GPIO_WritePin(TOUCH_RST_PORT,TOUCH_RST_PIN,GPIO_PIN_SET);
	
	/* 初始化中断引脚,不用中断的话屏蔽掉 */
	#if IICSOFT == 1
	/* 初始化I2C引脚 */ 
	IICInit(&CST816_dev);
	#else
	IICInit(&hi2c1);
	#endif
	/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
	//IICStop(&CST816_dev);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_Init
*	功能说明: CST816初始化
*	形    参:none
*	返 回 值: none
*********************************************************************************************************
*/
void CST816_Init(void)
{
	CST816_GPIO_Init();
	CST816_Config_AutoSleepTime(5);
}

#if IICSOFT
/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_ReadREG
*	功能说明: 读取触摸屏单个寄存器的数据
*	形    参:reg:寄存器地址
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
uint8_t CST816_IIC_ReadREG(uint8_t addr)
{
	return IIC_Read_One_Byte(&CST816_dev,Device_Addr,addr);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_WriteREG
*	功能说明: 向触摸屏的寄存器写入数据
*	形    参:addr:寄存器地址
*						dat:	写入的数据
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
void CST816_IIC_WriteREG(uint8_t addr, uint8_t dat)
{
	IIC_Write_One_Byte(&CST816_dev,Device_Addr,addr,dat);
}

#else

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_ReadREG
*	功能说明: 读取触摸屏单个寄存器的数据
*	形    参:reg:寄存器地址
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
uint8_t CST816_IIC_ReadREG(uint8_t addr)
{
	return IIC_Read_One_Byte(&hi2c1,Device_Addr,addr);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_IIC_WriteREG
*	功能说明: 向触摸屏的寄存器写入数据
*	形    参:addr:寄存器地址
*						dat:	写入的数据
*	返 回 值: 返回寄存器存储的数据
*********************************************************************************************************
*/
void CST816_IIC_WriteREG(uint8_t addr, uint8_t dat)
{
	IIC_Write_One_Byte(&hi2c1,Device_Addr,addr,dat);
}

#endif
/*
*********************************************************************************************************
*	函 数 名: TOUCH_RESET
*	功能说明: 触摸屏复位
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_RESET(void)
{
	TOUCH_RST_0;
	HAL_Delay(10);
	TOUCH_RST_1;
	HAL_Delay(100);
}
#if IICSOFT 
/*
*********************************************************************************************************
*	函 数 名: TOUCH_READ_X
*	功能说明: 读取触摸屏在触摸时的坐标值
*	形    参:无
*	返 回 值: 无 (数据存储在CST816_Instance结构体中)
*********************************************************************************************************
*/
void CST816_Get_XY_AXIS(void)
{
	uint8_t DAT[4];
	IIC_Read_Multi_Byte(&CST816_dev,Device_Addr,XposH,4,DAT);
	CST816_Instance.X_Pos=((DAT[0]&0x0F)<<8)|DAT[1];//(temp[0]&0X0F)<<4|
	CST816_Instance.Y_Pos=((DAT[2]&0x0F)<<8)|DAT[3] + TOUCH_OFFSET_Y;//(temp[2]&0X0F)<<4|
	#if REVERSE
		CST816_Instance.X_Pos = 239 - CST816_Instance.X_Pos;
		CST816_Instance.Y_Pos = 279 - CST816_Instance.Y_Pos;
	#endif
}
#else
/*
*********************************************************************************************************
*	函 数 名: TOUCH_READ_X
*	功能说明: 读取触摸屏在触摸时的坐标值
*	形    参:无
*	返 回 值: 无 (数据存储在CST816_Instance结构体中)
*********************************************************************************************************
*/
void CST816_Get_XY_AXIS(void)
{
	uint8_t DAT[4];
	IIC_Read_Multi_Byte(&hi2c1,Device_Addr,XposH,4,DAT);
	CST816_Instance.X_Pos=((DAT[0]&0x0F)<<8)|DAT[1];//(temp[0]&0X0F)<<4|
	CST816_Instance.Y_Pos=((DAT[2]&0x0F)<<8)|DAT[3] + TOUCH_OFFSET_Y;//(temp[2]&0X0F)<<4|
	#if REVERSE
		CST816_Instance.X_Pos = 239 - CST816_Instance.X_Pos;
		CST816_Instance.Y_Pos = 279 - CST816_Instance.Y_Pos;
	#endif
}
#endif

/*
*********************************************************************************************************
*	函 数 名: CST816_Get_FingerNum
*	功能说明: 读取触摸屏的手指触摸个数,0xFF为睡眠
*	形    参:无
*	返 回 值: 返回芯片ID
*********************************************************************************************************
*/
uint8_t CST816_Get_FingerNum(void)
{
	return CST816_IIC_ReadREG(FingerNum);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Get_ChipID
*	功能说明: 读取触摸屏的芯片ID
*	形    参:无
*	返 回 值: 返回芯片ID
*********************************************************************************************************
*/
uint8_t CST816_Get_ChipID(void)
{
	return CST816_IIC_ReadREG(ChipID);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Config_MotionMask
*	功能说明: 使能连续动作(连续左右滑动,连续上下滑动,双击)
*	形    参:mode:模式(5种)
*	返 回 值: 无
*	注    意:使能连续动作会增加响应时间
*********************************************************************************************************
*/
void CST816_Config_MotionMask(uint8_t mode)
{
	CST816_IIC_WriteREG(MotionMask,mode);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Config_AutoSleepTime
*	功能说明: 规定time内无触摸,自动进入低功耗模式
*	形    参:time:时间(s)
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Config_AutoSleepTime(uint8_t time)
{
	CST816_IIC_WriteREG(AutoSleepTime,time);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_Sleep
*	功能说明: 进入睡眠,无触摸唤醒功能
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Sleep(void)
{
	CST816_IIC_WriteREG(SleepMode,0x03);
}

/*
*********************************************************************************************************
*	函 数 名: CST816_Wakeup
*	功能说明: 唤醒
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Wakeup(void)
{
	CST816_RESET();
}

/*
*********************************************************************************************************
*	函 数 名: CST816_Config_MotionSlAngle
*	功能说明: 手势检测滑动分区角度控制。Angle=tan(c)*10 c为以x轴正方向为基准的角度。
*	形    参:x_right_y_up_angle:角度值
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Config_MotionSlAngle(uint8_t x_right_y_up_angle)
{
	CST816_IIC_WriteREG(MotionSlAngle,x_right_y_up_angle);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Config_NorScanPer
*	功能说明: 正常快速检测周期配置函数。
*						此值会影响到LpAutoWakeTime和AutoSleepTime。 
*						单位10ms,可选值:1~30。默认值为1。
*	形    参:Period:周期值
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Config_NorScanPer(uint8_t Period)
{
	if(Period >= 30)
		Period = 30;
	CST816_IIC_WriteREG(NorScanPer,Period);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Config_IrqPluseWidth
*	功能说明: 中断低脉冲输出宽度配置函数
*	形    参:Period:周期值
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Config_IrqPluseWidth(uint8_t Width)
{
	if(Width >= 200)
		Width = 200;
	CST816_IIC_WriteREG(IrqPluseWidth,Width);
}


/*
*********************************************************************************************************
*	函 数 名: CST816_Config_NorScanPer
*	功能说明: 低功耗扫描唤醒门限配置函数。越小越灵敏。默认值48
*	形    参:TH:门限值
*	返 回 值: 无
*********************************************************************************************************
*/
void CST816_Config_LpScanTH(uint8_t TH)
{
	CST816_IIC_WriteREG(LpScanTH,TH);
}

2 硬件IIC的实现

我已经包括进去了 ,就是改个IIC接口,注意通信速率不能过快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值