F103RB STemWin+GUI_builder触摸屏移植

lwj_122 2018-01-19 03:44:49
本文基于航顺HK32F103RB芯片,代码级完全兼容STM32F103
本文的设置前提是STemWin已经移植成功
感谢原子的电阻触摸例程
电阻触摸屏设置
一、准备TOUCH驱动文件
Touch.c 和touch.h:需包含基本触摸屏初始化程序(TP_Init())和读取坐标函数(TP_Read_XOY(CMD),CMD是命令)
二、添加GUI_X_Touch.c到STemWin
配置文件中的接口程序,只需配置以下两个函数:
int GUI_TOUCH_X_MeasureX(void)
{
return TP_Read_XOY(0XD0); //CMD_RDX=0XD0,代表读取x轴命令
}

int GUI_TOUCH_X_MeasureY(void)
{
return TP_Read_XOY(0X90); //CMD_RDX=0X90,代表读取y轴命令
}
三、添加触摸校准(必须的一步)
本例子没有设置横屏显示,所以只在LCD_X_Confg()函数中添加了下面两行代码
GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 239, TOUCH_AD_LEFT, TOUCH_AD_RIGHT);
GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 319, TOUCH_AD_TOP, TOUCH_AD_BOTTOM);

需提前手动define四个常量TOUCH_AD_LEFT,TOUCH_AD_RIGHT,TOUCH_AD_TOP,TOUCH_AD_BOTTOM,触摸屏幕获取AD值得到,本例程中通过触摸左上和右下两个点获得这4个值

#define TOUCH_AD_LEFT 490 //触摸左上角x轴的AD值(注意是AD值,也叫物理坐标)
#define TOUCH_AD_RIGHT 3717//触摸屏幕右下角边x轴的AD值
#define TOUCH_AD_TOP 460 //触摸左上角y轴的AD值
#define TOUCH_AD_BOTTOM 3831//触摸右上角y轴的AD值

四、运行GUI_TOUCH_Exec()
本例程中是放在main函数while循环中执行
GUI_BUILDER使用
GUI_BUILDER路径:STemWinLibrary532\Software\GUIBuilder.exe
一、界面,双击打开

二、首先放置FrameWin或者Window,不然会提示没有parent dialog

放置一个framewin 和两个button

设置framwin参数,点击framewin空白处选中它,然后在左边编辑参数,例程中只设置了位置和显示屏大小。下图是按240x320屏幕设置。Button图标可以随意拉大。

三、保存
配置好后,直接file->save,C文件就生成在GUI_builder同一个文件夹中了,下图中的FramewinDLG.c

四、移植和修改
把FramewinDLG.c文件中的内容复制到GUIDEMO_Start.c当中,只需移植如下三部分内容:define,资源列表和回调函数
1.Define部分
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
2.资源列表部分
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 1, 1, 240, 320, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 11, 8, 146, 59, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 12, 81, 136, 93, 0, 0x0, 0 },
};
3.回调函数部分
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
.
.
.
}
然后如下修改MainTask函数
void MainTask(void);
WM_HWIN Hdlg;
void MainTask(void)
{
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init();
Hdlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
}

五、运行
Main函数中代码修改如下,然后编译下载运行了。


六、运行结果
通过触摸选中button按钮的图片

...全文
803 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
faihung 2018-01-20
  • 打赏
  • 举报
回复
好长,看完了。似乎没有问题,感谢楼主的无私分享。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧