一、主要还是读取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接口,注意通信速率不能过快。