基于STM32的TFT-LCD触摸屏实验(HAL库)_第五次实验 lcd屏幕触摸屏实验

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值