在STM32上移植ucGUI之触摸屏

2019-10-15 18:30发布

更多更精彩内容见晓梦逸尘的博客:www.xiaomengyc.com
 之前的三篇文章分别介绍了如何在
STM32裸机上移植ucGUI,移植ucGUI源例程以及ucGUI的存储设备和抗锯齿。现将STM32裸机上移植ucGUI触摸屏的过程详述如下:
1、  将正点原子的《触摸屏移植实验》中HARDWRAE/TOUCH目录复制到已经建立好的ucGUI工程目录的HARDWARE文件夹下,并添加touch.c文件和头文件路径。 2、  打开ucGUI工程中的GUIConf.h文件,将其中的GUI_SUPPORT_TOUCHGUI_WINSUPPORT总开关打开。如下所示: #define GUI_SUPPORT_TOUCH         1  /* Support a touch screen (req. win-manager) */ #define GUI_WINSUPPORT            1  /* Window manager package available */ 此时编译程序,会出现四个函数未定义的错误。 3、  GUI_X中添加文件GUI_X_Touch.c,此时编译工程错误消失。 4、  GUI_X_Touch.c中添加预处理命令#include “touch.h”。然后将其中的GUI_TOUCH_X_MeasureXGUI_TOUCH_X_MeasureY两个函数改为如下所示的形式: int  GUI_TOUCH_X_MeasureX(void) {            u16 x,y;   Read_ADS2(&x,&y);      return x; } fficeffice" />  int  GUI_TOUCH_X_MeasureY(void) {   u16 x,y;   Read_ADS2(&x,&y);   return y; } 5、  由于是在裸机上运行ucGUI程序,对话框程序会阻塞当前进程的执行。所以需要在定时器中断中不断的去扫描触摸屏的状态。设置定时器10ms中断一次,在定时器中断处理函数中加入GUI_TOUCH_Exec()语句。 6、  在主函数中加入初始化定时器和触摸屏,并在GUI_Init()函数之后加入GUI_CURSOR_Show函数以显示指针。 7、  以上就完成了触摸屏的移植操作,下面对触摸屏的工作状态进行配置。由于我的显示屏是横屏显示,所以我的将GUITouchConf.h文件配置成如下形式:

   对于使用正点原子STM32 Mini开发板的同学可以试试上面的参数。如果GUI_TOUCH_AD_XXXX这四个参数很重要,配置不合适会出现指针停留在左上角不动,指针跟触摸的位置不同等问题。下面三个参数设置不合适会出现指针移动的方向跟触摸的方向不一致的问题。    上面四个参数的设置需要读取触摸屏的左上角和右下角的AD采样值来确定。

8、触摸屏的使用需要窗口等回调函数的支持,应首先移植好一个窗口程序之后再将触摸屏移植上去进行验证。

9、移植成功之后发现指针移动很慢,操作起来极为不爽。哪位高手如果有触摸屏的优化方案请予以指导,谢谢!





更多更精彩内容见晓梦逸尘的博客:www.xiaomengyc.com



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
counter
1楼-- · 2019-10-17 04:46
非常感谢楼主,我用这中方法基本移植成功了。可是指针还是有拖尾额。GUI_TIME里面那个函数我也改了的……
xiaomengyichen
2楼-- · 2019-10-17 08:09
回复【14楼】counter:
---------------------------------
你把定时器的频率调高一点就没有拖尾了。
counter
3楼-- · 2019-10-17 13:34
 精彩回答 2  元偷偷看……
xiaomengyichen
4楼-- · 2019-10-17 16:22
回复【16楼】counter:
---------------------------------
哦哦,这样子啊。我的触摸屏前几天被我压坏了,不能测试了~~~悲剧啊……
wan296555869
5楼-- · 2019-10-17 22:13
回复【楼主位】xiaomengyichen:
---------------------------------
请问这几个参数你说“上面四个参数的设置需要读取触摸屏的左上角和右下角的AD采样值来确定”是不是我按住屏幕的左上角和右下角得出来的AD值啊 但有X和Y2个AD值吧 怎么配对呢 
#define GUI_TOUCH_AD_LEFT       
#define GUI_TOUCH_AD_RIGHT      
#define GUI_TOUCH_AD_TOP        
#define GUI_TOUCH_AD_BOTTOM
xiaomengyichen
6楼-- · 2019-10-18 01:04
回复【18楼】wan296555869:
---------------------------------
没你想的那么复杂,LEFT就代表屏幕最左边的值,TOP就是屏幕最上边的值,以此类推。读取左上角和右下角两个点这些值就都有了。

一周热门 更多>