完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MM32F103 开发板带了一块2.8寸触摸屏,可玩性大大增加,何不来一个UI来方便进行图形界面的开发呢。于是上网搜了下,目前嵌入式8/16/32位的低开销的UI也就ucGUI/emWin以及RT-Thread 的RTUI。
其实uC/Gui的核心代码并不是Micrium公司开发的,而是Segger公司为Micrium公司定制的图形软件库,当然也是基于Segger公司的 emwin 图形软件库开发的。所有说uC/GUI其实是 emwin 的一版精简版。 MM32F103的SRAM只有20KB,当然选择有源码的ucGUI。能找到的最新源码基本就是3.98了吧。 第一部分:在UCGUI移植之前 在移植之前,首先要了解在网上下的UCGUI 3.98源码的文件结构是。 UCGUI 3.98源码中有三个文件夹: 1)“tool文件夹”是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的. 2)“sample文件夹”下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能. 3)“Start文件夹”里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以放在任何C语言平台下编译而不会担心兼容性问题,这个uCGUI在这方面做的算是完美了),所以,我们可以在vc平台下写界面,然后再把代码拷进我们的下位机编译器进行编译,这样子效率就会非常高了。 Start文件夹”目录内容: 移植uC/GUI主要集中在修改三个头文件和两个C文件: 第二部分:修改配置文件GUICon.h ,GUITouchConf.h,LCDConf.h 在“Start文件夹”里有两个文件夹里的内容,使我们移植所关心的。一个是CONFIG , 另一个是GUILCDDriver。 在CONFIG文件夹中有三个.h文件,GUIConf.h、 CONFIG: 配置LCDConf.h文件如下: 配置GUITouchConf.h文件如下: #define GUI_TOUCH_SWAP_XY 0 #define GUI_TOUCH_AD_LEFT 0 #endif /* GUITOUCH_CONF_H */ 第三部分:修改LCDWin.c LCDDriver这个文件夹中一共有三个文件分别是:LCDWin、LCDNull.c、LCDDummy.c 。 在LCD的最基本操作就是在某一个坐标上画点,其他的操作都是画点操作延伸出来的。必须要把画点这个函数连接到uC/GUI的代码里面。连接的函数就在LCDDriver下,我选用LCDWin.c(还有两个文件是LCDNULL.c和LCDDUMMY.c,这三个文件选一个作为驱动程序就可以,都是些模板) 修改这个文件的时候要注意,首先要屏蔽掉第一行的条件编译语句 #if defined(WIN32) && !defined(LCD_SIMCONTROLLER) 和文件的最后一行的#endif 顺便把#endif头上的#else 也干掉。这个文件是针对PC仿真的,不注释掉这几个地方,整个文件都不会被编译的。 5、修改GUI_X.C(SampleGUI_X.C)文件,这主要是系统级的函数。 在GUI_X这个文件夹下有3个GUI_X*文件。分别为:GUI_X.c、GUI_X_embOS.c、GUI_X_ucOS.c这3个文件分别对应无操作系统、embOS和ucOS。 分别根据自己的硬件板重写如下函数: void GUI_X_Init(void) void GUI_X_InitOS() void GUI_X_Unlock() void GUI_X_Lock() int GUI_X_GetTime(void) void GUI_X_Delay(int ms) int GUI_X_GetTaskID() void GUI_X_ExecIdle(void) void GUI_X_UpdateScreen() void GUI_X_Log (const char *s) { GUI_USE_PARA(s); } void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); } void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); } 说明:有的函数可以不用修改,可以用它软件的实现,有的则要重写,有的则可以直接返回0,完全有你个人的系统所决定。 我是用的FreeRTOS,所以修改了GUI_X_ucOS.c,实现了几个函数。 6. 触摸屏移植: 只需实现GUI_X_Touch.c里的4个函数,简单的可以只实现GUI_TOUCH_X_MeasureX(void)和GUI_TOUCH_X_MeasureY(void),获得x,y坐标即可。 void GUI_TOUCH_X_ActivateX(void) { } void GUI_TOUCH_X_ActivateY(void) { } int GUI_TOUCH_X_MeasureX(void) { // According to the code in GUI_TOUCH_Exec function Measure Y is first called. tp_dev.scan(0); return tp_dev.x[0]; } int GUI_TOUCH_X_MeasureY(void) { return tp_dev.y[0]; } 7. 修改完成后,编译通过。 MainTask.c里的MainTask是一个示例,可以用来测试显示。我移植的时候为了测试触摸屏找了个带对话框等windows控件的更加复杂的MainTaskWM.c. 注意如果使用触摸屏,需要每秒大概100次的调用GUI_TOUCH_Exec(); 这些文件可以在附件里找到。文件目录如下: 8. 运行 效果见https://bbs.elecfans.com/forum.php?mod=viewthread&tid=921347&page=1#pid4924502
|
|
相关推荐
28 个讨论
|
|
只有小组成员才能发言,加入小组>>
2249个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11740 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5947 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10982 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4583 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4310 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1008浏览 1评论
819浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:51 , Processed in 0.886041 second(s), Total 55, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号