文章目录[隐藏]
1.添加触摸IC驱动
2.使能EMWIN触摸 GUIConf.h
GUI_SUPPORT_TOUCH 1
3.添加EMWIN GUI_X_Touch_Analog.c文件
实现GUI_TOUCH_X_MeasureX
GUI_TOUCH_X_MeasureY
两个函数
int GUI_TOUCH_X_MeasureY(void)
{
int32_t yvalue;
//电容屏的触摸值获取
yvalue = g_GT911.Y0;
return yvalue;
}
int GUI_TOUCH_X_MeasureX(void)
{
int32_t xvalue;
//电容屏的触摸值获取
xvalue=g_GT911.X0;
return xvalue;
}
直接将触摸IC驱动读取的坐标值传递进来即可,
需要注意的是当触摸没有按下时一定要将x,y的值指向一个屏幕外的值,如0xFFFF,这样EMWIN才能发送松开消息,否则会一直聚焦在某个控件,导致响应不正常
4.定时调用GUI_TOUCH_Exec
5 GT911移植分辨率更改注意事项:
正常切换分辨率是直接买对应的分辨率的成品
但有时候发过来的不一定是想要的分辨率
就要从软件上切换
1024600 <> 800480
如果触摸配置分辨率和屏幕分辨率相同,直接用驱动 配置啥都不用改
主要注意点就是
1.配置版本号
程序写入的版本号,必须大于等于GT9xx本地保存的版本号,才可以更新配置,否则当前写入配置无效。
datasheet中写的发送0x00 会将版本号初始化为’A’ 即0x41
实际需要将配置表第一个值改为0x00,
并将全部185个寄存器值即整个配置表写进去才能复位版本号
2 把寄存器配置数组写入(0x8047-0x8100),一共186个寄存器
0X80FF寄存器用于存储校验和,使得0X8047-0X80FF之间所有数据之和为0,如果校验不通过,当前配置无效。
校验和计算方式
uint8_t ucConfigChecksum = 0;
//计算校验和,0x8047 到 0x80FE 之字节和的补码
for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams ) - 2 ); i++ ) //前184个
{
ucConfigChecksum += s_GT911_CfgParams[i];
}
s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;
完整切换函数 需要通过切换 NOMAL 宏定义来完成
void GT911_Init( void )
{
uint8_t ucConfigChecksum = 0, i;
uint8_t ucIDBuf[5] = {0};
// uint8_t ucCFG[186] = {0};
TS_IIC_Init(); //IIC接口初始化
//emWin默认是发给图层1,如果是发给图层2,修改Layer参数为1
// State.Layer = 0;
GT911_Reset_Sequence( GT911_IIC_ADDR ); //复位GT911,设定设备地址为0xBA/0xBB
/* 调试代码 */
id = GT911_ReadID();
ver = GT911_ReadVersion();
cfg = GT911_ReadCFGVersion();
if(id == 0x313139)
{
g_GT911.Enable = 1;
}
#if NOAML //正常执行 需要保证想要的配置版本要比本地保存的版本高 否则按照后 //面的方式执行
if(cfg < s_GT911_CfgParams[0])
{
// s_GT911_CfgParams[0] = 0x00; //写一次 重置
uint8_t ucConfigChecksum = 0;
//计算校验和,0x8047 到 0x80FE 之字节和的补码
for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams ) - 2 ); i++ ) //前184个
{
ucConfigChecksum += s_GT911_CfgParams[i];
}
s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;
GT911_WriteReg(GT911_CONFIG_REG, (uint8_t *)s_GT911_CfgParams, sizeof(s_GT911_CfgParams));
}
#else //版本混乱后 读出版本号不是想要的版本
//将第一个字节写为0 整个写一遍 重置版本号后 再执行上面正常执行步骤
if(cfg != 0x53)
{
s_GT911_CfgParams[0] = 0x00; //写一次 重置
uint8_t ucConfigChecksum = 0;
//计算校验和,0x8047 到 0x80FE 之字节和的补码
for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams ) - 2 ); i++ ) //前184个
{
ucConfigChecksum += s_GT911_CfgParams[i];
}
s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;
GT911_WriteReg(GT911_CONFIG_REG, (uint8_t *)s_GT911_CfgParams, sizeof(s_GT911_CfgParams));
}
#endif
}
版权声明:本文为CSDN博主「梓默」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33552551/article/details/121675406
暂无评论