版主
最后登录1970-1-1
在线时间 小时
注册时间2018-12-17
|
本帖最后由 ZZZ_XXJ 于 2020-11-6 15:09 编辑
2020.11.06更新
经过多次测试发现原来的电阻屏左转90°和右转90°的参数配置有问题,需要修改两个文件,这里把正确的配置贴出来,原来的仍然保留正常竖屏和旋转180°的配置没问题。
电阻屏右转90°:- GUI_X_Touch_Anlog.c
- int GUI_TOUCH_X_MeasureX(void)
- {return XPT2046_ReadAdc_Fliter(macXPT2046_CHANNEL_X);}
- int GUI_TOUCH_X_MeasureY(void)
- {return XPT2046_ReadAdc_Fliter(macXPT2046_CHANNEL_Y);}
- LCDConf_FlexColor.c
- /*设置触摸原点,显示方向:右转90° */
- GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorYEx(0)));
- /*设置触摸校准,显示方向为左转或右转90°时,需要交换 */
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 240-1, TOUCH_AD_RIGHT, TOUCH_AD_LEFT);
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 320-1, TOUCH_AD_BOTTOM, TOUCH_AD_TOP);
复制代码 电阻屏左转90°:- GUI_X_Touch_Anlog.c
- int GUI_TOUCH_X_MeasureX(void)
- {return XPT2046_ReadAdc_Fliter(macXPT2046_CHANNEL_X);}
- int GUI_TOUCH_X_MeasureY(void)
- {return XPT2046_ReadAdc_Fliter(macXPT2046_CHANNEL_Y);}
- LCDConf_FlexColor.c
- /*设置触摸原点,显示方向:左转转90° */
- GUI_TOUCH_SetOrientation((GUI_MIRROR_Y * LCD_GetMirrorXEx(0)));
- /*设置触摸校准,显示方向为左转或右转90°时,需要交换 */
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 240-1, TOUCH_AD_RIGHT, TOUCH_AD_LEFT);
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 320-1, TOUCH_AD_BOTTOM, TOUCH_AD_TOP);
复制代码
之前发过一篇帖子,讲了下修改emWin显示方向的方法,链接在这:如何修改emWin的屏幕显示方向。不过当时只讲了显示方向,没有讲触摸方向怎么改,所以就再写一篇帖子讲下触摸方向的修改。下面这些方法仅针对野火的开发板和emWin配套例程。
和改显示方向一样,改触摸方向也分两种:电阻屏和电容屏。
1. 电阻屏:
电阻屏的触摸方向修改同样是在GUIConf_flexcolor.c文件中,主要修改的地方在第203行到第209行两个函数的参数,见下图:
首先是GUI_TOUCH_SetOrientation,其实就是靠它来设置触摸方向的,这个函数的原型和可选参数我就不放上来了,在帖子下面会给出每个方向具体的配法。如果不清楚为什么这么调的,可以到《STemWin5.44》英文手册第1074页查看。
然后是GUI_TOUCH_Calibrate函数,这个是在触摸校准的时候设置触摸范围用的,只需要改第一个参数就可以了,在左右两侧横屏的时候,把208行和209行的GUI_COORD_X和GUI_COORD_Y换个位置。
这个就是电阻屏改触摸方向需要修改的地方,下面我会把四个方向的触摸配置全部放上来。
正常竖屏:
- /*设置触摸原点 */
- GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorXEx(0)) |
- (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) |
- (GUI_SWAP_XY * LCD_GetSwapXYEx (0)));
- /*设置触摸校准 */
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240-1, TOUCH_AD_RIGHT ,TOUCH_AD_LEFT );
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320-1,TOUCH_AD_BOTTOM ,TOUCH_AD_TOP );
复制代码
右转90°:
- /*设置触摸原点,显示方向:右转90° */
- GUI_TOUCH_SetOrientation((GUI_MIRROR_Y * LCD_GetMirrorXEx(0)));
- /*设置触摸校准,显示方向为左转或右转90°时,需要交换 */
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 240-1, TOUCH_AD_RIGHT ,TOUCH_AD_LEFT );
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 320-1,TOUCH_AD_BOTTOM ,TOUCH_AD_TOP );
复制代码
左转90°:
- /*设置触摸原点,显示方向:左转90° */
- GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorYEx(0)));
- /*设置触摸校准,显示方向为左转或右转90°时,需要交换 */
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 240-1, TOUCH_AD_RIGHT ,TOUCH_AD_LEFT );
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 320-1,TOUCH_AD_BOTTOM ,TOUCH_AD_TOP );
复制代码
旋转180°:
- /*设置触摸原点,显示方向:旋转180° */
- GUI_TOUCH_SetOrientation((GUI_SWAP_XY * LCD_GetSwapXYEx (0)));
- /*设置触摸校准 */
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240-1, TOUCH_AD_RIGHT ,TOUCH_AD_LEFT );
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320-1,TOUCH_AD_BOTTOM ,TOUCH_AD_TOP );
复制代码
2.电容屏:
因为电容屏是直接返回的触摸点坐标,所以只需要处理触摸坐标就可以了,这方面的例子还是F429挑战者V2的RGB竖屏例程,具体是在触摸检测函数里实现的,见下面的代码:
- void GT9xx_GetOnePiont(uint8_t Orientation)
- {
- GUI_PID_STATE State;
- GTP_DEBUG_FUNC();
-
- __disable_irq();
-
- Goodix_TS_Work_Func();
-
- __enable_irq();
-
- if((pre_x==-1) || (pre_y==-1))
- {
- State.x = -1;
- State.y = -1;
- State.Pressed = 0;
- State.Layer = 0;
- GUI_TOUCH_StoreStateEx(&State);
- return;
- }
- else
- {
- switch(Orientation)
- {
- case 0:/* 正常 */
- State.x = pre_x;
- State.y = pre_y;
- break;
- case 1:/* 右侧竖屏 */
- State.x = pre_y;
- State.y = LCD_PIXEL_WIDTH - pre_x - 1;
- break;
- case 2:/* 翻转180° */
- State.x = LCD_PIXEL_WIDTH - pre_x - 1;
- State.y = LCD_PIXEL_HEIGHT - pre_y - 1;
- break;
- case 3:/* 左侧竖屏 */
- State.x = LCD_PIXEL_HEIGHT - pre_y - 1;
- State.y = pre_x;
- break;
- default:
- State.x = pre_x;
- State.y = pre_y;
- break;
- }
- State.Pressed = 1;
- State.Layer = 0;
- GUI_TOUCH_StoreStateEx(&State);
- }
- }
复制代码
上面的switch用来判断屏幕方向,然后根据不同的屏幕方向对读到的触摸坐标进行处理。这个就是电容屏修改触摸方向的方法。
================================================================我 是 分 割 线 ================================================================
电容屏里面,F407开发板的修改还不太一样。对于F407,只需要修改LCDConf_FlexColor.c的第186行的LCD_SCAN_MODE就可以了。
407的显示和触摸方向见下面的代码。
正常竖屏:
右转90°横屏:
左转90°横屏:
|
|