EMWIN电容触摸Touch步骤及注意事项


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

生成海报
点赞 0

梓默

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

Lin总线通信在STM32作为主机代码以及从机程序

距离上次做资料准备已经过去六天了。最近在学车,上周末就没有开电脑。这周开始进行了Lin通信的代码整理,目前是可以正常通信的了,采用的是增强型校验方式。后期再进一步跟进研究。。。更新一博,留

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

HAL库串口中断

一,配置串口初始化 void MX_USART1_UART_Init(void) {huart1.Instance USART1;huart1.Init.BaudRate 115200;huart1.Init.WordLen