else
if(HAL_I2C_Mem_Write(&IICx,AT24C_DEV_WRITEADDR,WriteAddr,I2C_MEMADD_SIZE_16BIT,&WriteData,1,0xff) == HAL_OK)
res = 0;
HAL_Delay(10);
return res;
}
/*****************************************
函数名:uint8_t HAL_AT24CXX_ReadOneByte(uint16_t ReadAddr)
参数: ReadAddr:要读取数据的地址
功能描述:在指定地址读取一个字节数据
返回值:返回读取地址的数据
/
uint8_t HAL_AT24CXX_ReadOneByte(uint16_t ReadAddr)
{
uint8_t rxData = 0;
if(EE_TYPE < AT24C16)
{
HAL_I2C_Mem_Read(&IICx,AT24C_DEV_READADDR,ReadAddr,I2C_MEMADD_SIZE_8BIT,&rxData,1,0xff);
}
else
HAL_I2C_Mem_Read(&IICx,AT24C_DEV_READADDR,ReadAddr,I2C_MEMADD_SIZE_16BIT,&rxData,1,0xff);
HAL_Delay(10);
return rxData;
}
/
函数名:void HAL_AT24CXX_WriteLenByte(uint16_t WriteAddr,uint8_t *pData,uint8_t dataLen)
参数:WriteAddr :要写入数据的地址 pData:要写入的数据的首地址 datalen:要写入数据的长度
功能描述:从指定地址开始写入多个字节数据
返回值:无
**/
void HAL_AT24CXX_WriteLenByte(uint16_t WriteAddr,uint8_t pData,uint8_t dataLen)
{
while(dataLen–)
{
HAL_AT24CXX_WriteOneByte(WriteAddr,pData);
WriteAddr++;
pData++;
}
}
/
函数名:void HAL_AT24CXX_ReadLenByte(uint16_t ReadAddr,uint8_t *pData,uint8_t dataLen)
参数: ReadAddr:要读取数据的地址 pData:回填数据首地址 dataLen:数据长度
功能描述:从指定地址开始读取多个个字节数据
返回值:无
**/
void HAL_AT24CXX_ReadLenByte(uint16_t ReadAddr,uint8_t pData,uint8_t dataLen)
{
while(dataLen–)
{
pData++ = HAL_AT24CXX_ReadOneByte(ReadAddr++);
}
}
/
函数名:uint8_t HAL_AT24CXX_Check(void)
参数:无
功能描述:检查AT24CXX是否正常,这里用了24XX的最后一个地址(255)来存储标志字.如果用其他24C系列,这个地址要修改
返回值:检测成功返回0 失败返回1
*****************************************/
bool HAL_AT24CXX_Check(void)
{
uint8_t temp;
temp = HAL_AT24CXX_ReadOneByte(EE_TYPE);//避免每次开机都写AT24CXX
if(temp == 0XAB)
return true;
else//排除第一次初始化的情况
{
HAL_AT24CXX_WriteOneByte(EE_TYPE,0XAB);
temp = HAL_AT24CXX_ReadOneByte(EE_TYPE);
if(temp == 0XAB)
return true;
}
return false;
}
### 4.3 TOUCH代码
**这部分代码主要分为2个部分:**
(1)一个部分是SPI通讯之后读取XPT2046的数据,之后将AD数据转换成X,Y坐标信息;
(2)另一部分是电阻式触摸屏的校准程序;
**touch.h代码:**
#ifndef TOUCH_H
#define TOUCH_H
#include “main.h”
//=触摸屏触接线=//
#define u16 unsigned int
#define u8 unsigned char
#define TP_PRES_DOWN 0x80 //触屏被按下
#define TP_CATH_PRES 0x40 //有按键按下了
//触摸屏控制器
typedef struct
{
// u8 (*init)(void); //初始化触摸屏控制器
u8 (*scan)(u8); //扫描触摸屏.0,屏幕扫描;1,物理坐标;
// void (*adjust)(void); //触摸屏校准
u16 x0; //原始坐标(第一次按下时的坐标)
u16 y0;
u16 x; //当前坐标(此次扫描时,触屏的坐标)
u16 y;
u8 sta; //笔的状态
//b7:按下1/松开0;
//b6:0,没有按键按下;1,有按键按下.
触摸屏校准参数/
float xfac;
float yfac;
short xoff;
short yoff;
//新增的参数,当触摸屏的左右上下完全颠倒时需要用到.
//touchtype=0的时候,适合左右为X坐标,上下为Y坐标的TP.
//touchtype=1的时候,适合左右为Y坐标,上下为X坐标的TP.
u8 touchtype;
}_m_tp_dev;
extern _m_tp_dev tp_dev; //触屏控制器在touch.c里面定义
//与触摸屏芯片连接引脚
//#define PEN PCin(1) //PC1 INT
//#define DOUT PCin(2) //PC2 MISO
//#define