搜索
bottom↓
回复: 226

嵌入式系统用户接口设计之裸机界面开发

  [复制链接]
(246216423)

出0入239汤圆

发表于 2013-7-22 18:31:21 | 显示全部楼层 |阅读模式
本帖最后由 mcu_lover 于 2013-7-23 19:36 编辑

    裸机界面开发一般指在不借助于现成的GUI库的情况下,构建整个应用系统的图形(文本)用户接口。通常一个完整的GUI库都会提供诸如窗口(界面)管理,事件生成,派发等等。除此之外,其还有其固定的一个编程框架,通常这种框架因为GUI库的不同略有差异,但到目前为止,基本大同小异。这些框架大都提供好了各种图形液晶的驱动接口,按键/触摸屏的接口以及其它事件接口。通常利用GUI框架完成设计工作,就是在这种框架下,处理各种消息事件。可以说,利用GUI库,使得界面的开发工作相对的变得容易些。
    尽管GUI库提供了一个编程的框架,使得我们从繁杂琐碎的底层细节中脱离出来。但正如上面我们提及的,它仅仅只是是我们的工作变得相对容易些,而非轻而易举。有如下几个原因:
一是GUI库大都比较庞大,对于FLASH 和RAM 以及执行速度等资源均有一定的需求。因此很多中低端的MCU就基本无福消受。二则商业的GUI库大都售价不菲。最重要的一点是,界面逻辑的设计本来就是与具体的项目相关联,而每个项目的需求各异,进而导致界面的设计从来都不是一件轻而易举的事情,尤其是在要求系统界面可变性强的场合。
所以,很多场合下,我们不得不从零开始,设计整个界面的框架。也就是裸机界面开发。在这样的情况下,使用的显示装置一般有如下几种,字符型液晶,如1602 2002 2004 等等,图形点阵液晶如12832 12864 19264 240128 320240等等。这些图形点阵液晶,共同点就是单色,不需要显示复杂的图形界面。当然,复杂的图形界面在单色上面,表现出来的效果也不是很理想。通常,在这些显示设备上,适当的使用直线,矩形,圆角矩形,以及反白显示,即可以实现不错的人机交互界面。
    因此,在这样的图形设备环境下,使用窗口的方式来构建整个界面是不合适的。相反,直接以屏幕(Screen)的方式来设计整个界面系统是比较合适的。那么,一个项目中的界面设计,就可以转化为设计合适的单个Screen ,然后想办法把这所有的单个Screen 连接起来,最终完成整个系统的界面开发工作。其实,Screen的方式在工控领域里面是使用的非常多的。因为工控领域要求开发可靠快速,对于界面的设计工作,一般是使用HMI触摸屏来实现。而HMI触摸屏设计就是以一个个 画面/屏幕 的方式来进行的。因为这种直接以画面/屏幕的方式来构建系统,是非常符合人的直观操作感受的。设想一下,如果你是一个设计者或者使用者,在操作带有屏幕显示的设备时候,肯定是在一个个屏幕界面下面进行的,如在设置屏幕界面进行系统的设置,在控制屏幕界面进行相关的控制工作等等。因此,作为一个设计者来说,在设计这样的系统的时候,务必要以面向屏幕的方式来思考整个用户界面工作的构建。可能会有人嗤之以鼻,整个GUI库里面均是以窗口的方式来组织界面的,为啥到这里就变成面向屏幕了呢。这是由于GUI库一般使用的场合下均含有较多的资源,如屏幕分辨率比较大,色彩位数高等等,且界面比较复杂,使用窗口的方式组织界面工作则较为方便。因此面向屏幕和面向窗口是针对不同的应用场合来说的。通俗一点来说,面向屏幕适合低端的单色低分辨率图形设备环境(工控上的HMI除外),面向窗口则适合高端彩色高分辨率的图形设备环境。
    回归到主题。既然我们要以面向屏幕的方式思考,那么首先我们需要将系统需求整理出来,然后将其归纳到一个个具体的屏幕中去。如主界面具体需要显示什么内容,设置界面有多少个,分别设置的内容是什么,控制界面有多少控制项等等。基本上只要系统需求明晰之后,系统需要的主界面,设置界面,控制界面内容等等均会随之而出,剩下的就是如何在相应的界面上,使得界面的显示看起来更具工业美感,操作上更加符合用户的操作习惯。对于我个人而言,我喜欢在纸上画出这些单个屏幕的内容,然后思考这些单个屏幕如何有效的连接在一起。然后用线连接这一个个屏幕。在线旁标注,是什么原因导致显示内容由当前屏幕跳转到另一个屏幕。如在主界面下,有四项相关系统参数显示,它们实时更新,以表征系统正在运行的某些变量。在主界面下当按下设定按键的时候,屏幕就会切换到设置界面,显示设置界面的相关内容。于是乎在主界面和设置界面之间的连线旁,我会标注 屏幕跳转事件为设置按键按下。这样,当所有屏幕之间跳转的关系确定好之后,基本上界面主体设计就完成了。如果你设计的最终界面,如同蜘蛛网一样混乱,各个屏幕之间均有联系,那么肯定你的设计是有问题的。好的设计应该是界面之间的跳转关系非常清晰,非常有层次感的。如果你没有达到此要求,试着重新组织你屏幕的内容,让每个屏幕所完成的工作,相对而言,具有一个整体性,这样经过多次重构之后,你的屏幕看起来一定非常有条理和层次感。就如同我们编程一样,为了追求结构上的优美,低耦合,高内聚的特性,总是需要对整个系统进行不断的抽象,重构,最终实现目标。当一个个屏幕设计出来之后,连接跳转关系也明确了之后,似乎一切都看起来轻松美好。是的,没错,但是有个前提,除非你接着看完本文后面的内容,否则,直到此处,一切还只是看起来美,镜中花水中月一般。好的建筑除了要优秀的设计图纸之外,还需要优秀的砖瓦匠去一砖一瓦堆砌。下面的内容,我们就来让每一个屏幕变得有血有肉,变得生动起来。
    对于一个具体的屏幕来说。从层次上来看,导致进入它的情况有两种,一种是上层屏幕跳转进入,也就是它的PARENT 屏幕,还有一种就是从下层返回回来,也就是它的CHILD屏幕。记住,这里的PARENT,CHILD是我们人为的将屏幕进行层次化分类的结果。如果不进行分类,所有的屏幕都是处于同一层次上。为什么要进行层次分类呢,就像之前在进行屏幕设计时候提到的那样,我们不断的进行抽象,就是为了让事情越来越简单。要知道,越抽象的东西,使用起来越简单。所以这里,为了方便屏幕的处理,我们就对屏幕进行了抽象,使得它们具有层次。所以对于某一个屏幕来讲,FROM_PARENT  和FROM_CHILD,分别表示从父屏幕跳转进入到本屏幕和从子屏幕返回到本屏幕。而从本屏幕返回父屏幕和进入子屏幕,则分别对应TO_PARENT 和TO_CHILD 两种情况。在这里,FROM_PARENT 和TO_CHILD 对应的其实是同一个事件。只是针对对象不一样角度不同而已。FROM_PARENT 是从本屏幕的角度来看,而TO_CHILD则是从父屏幕的角度来看。同理,TO_PARENT 和FROM_CHILD也是针对同一事件而言的。

    上面这张图清晰的展示了屏幕之间的切换关系。其中,父屏幕,当前屏幕,子屏幕它们的关系都是相对的。每个屏幕对于进入事件的两种形式处理要依据实际情况进行处理。如对于菜单屏幕来说,从父屏幕进入当前屏幕,即FROM_PARENT事件的处理,要求重新绘制所有内容,且相关状态全部为初始化状态。譬如,反白第一项菜单。而从子屏幕返回当前屏幕,即FROM_CHILD,不仅要求重新绘制所有内容,而且需要恢复进入子屏幕之前的状态。如进入子屏幕之前,本屏幕显示的菜单项3,则从子屏幕返回时候,需要恢复菜单项3的反显。




    从上面这两张图可以清楚看到对于FROM_CHILD 和FROM_PARENT 之间的区别。虽然这两个事件都会导致进入到当前屏幕,但是因为进入之前的状态不同,所以对其的处理也因情况而异。如果进入到当前状态时候的处理是独立的,与任何先前状态无关,则FROM_CHILD 和FROM_PARENT的处理可以相同,否则,FROM_CHILD 和FROM_PARENT就需要进行不同的处理。

    对于具体的界面系统来说,一般为三层左右,顶多四层,到了五层就比较讨厌了。至于六层,用户肯定想砸了产品。所以成功的界面设计不仅要合理组织好系统所需要提供给用户使用的界面,还要考虑用户的使用心理。菜单层次过多,带来的直接后果就是操作记忆麻烦。想象一下,你为了找个某个参数的设置项,最快需要按十几次按键,并记清楚层次关系,这种体验是非常糟糕的。因此,一定要把你的界面层次控制在四层以内。

    对于大多数的应用系统而言,界面千变万化,无外乎如下几种:
    参数屏幕:用于提供给用户进行相关参数的设置,修改。一般来说,与参数修改设置相关的操作,最终都会跳转到此。
    菜单屏幕:用于提供给用户进行菜单/屏幕的导航。也就是我们所熟知的菜单选择的屏幕。
    信息显示屏幕:类似于参数屏幕,不同的是参数屏幕即可以查看参数,又可以修改参数。而信息显示屏幕,仅仅只是显示相关的信息,没有修改的权限。
    主屏幕:系统运行后,除了开机屏幕外,第一个运行的屏幕。也就是说,系统在整个运行期间,显示时间最长的屏幕。一般来说,主屏幕显示的参数信息仅仅只供用户观看,且是相对而言比较重要的信息。极少的情况下,主屏幕上的参数信息,可以直接修改(因为修改一般在具体的参数屏幕中进行)。

以实际一个常用的界面举例:
主屏幕界面用于显示系统目前运行相关的参数信息:


在主界面按下菜单设置键后,跳入菜单屏幕界面,菜单屏幕界面采用图标+文字的方式组成。这样对用户而言,操作感更加友好。这里我们只设计三个菜单,如下所示:
第一个菜单为系统设置:


第二个菜单为通信设置


第三个菜单为历史异常信息:



从上面三张图可以看到,当选中不同的菜单图标时候,最上面的文字提示信息也会作出相应的变化。在图标菜单界面下,接收用户的按键信息有两种,一种是KEY_NEXT,用于选中不同的菜单项。还有一种是KEY_ENTER,表示确定选中此菜单项,进入与该菜单项关联的界面。
所以,对于上面三个菜单项,当按下KEY_ENTER时候,会进入到与他们相关联的界面。而至于这个界面究竟是什么内容,是还是菜单屏幕呢,还是具体的参数设置屏幕,则与具体你的设计有关。但有一点铭记在心,就是始终以界面/屏幕的方式去思考所有的跳转关系。
上面三个菜单项选中后,分别跳转对应的参数屏幕和信息查看屏幕:






我们可以看到,最终它们对应的屏幕都是与具体的设置应用相关的。也许你会有疑问,如果我还有下一级菜单,不需要现在跳转到具体设置界面怎么办,没有关系,跳转到你想要的下一级菜单即可。不过是又多了一个屏幕而已。最终它们的目的地终究会是具体的某一个设置屏幕,或者信息查看屏幕。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(246216196)

出0入0汤圆

发表于 2013-7-22 18:35:08 | 显示全部楼层
搬凳子学习一下
(246214003)

出0入0汤圆

发表于 2013-7-22 19:11:41 来自手机 | 显示全部楼层
马克一下
(246212368)

出0入0汤圆

发表于 2013-7-22 19:38:56 | 显示全部楼层
怎么不写了
(246211772)

出0入0汤圆

发表于 2013-7-22 19:48:52 | 显示全部楼层
占位学习
(246210812)

出0入0汤圆

发表于 2013-7-22 20:04:52 | 显示全部楼层
受教了~~期待下文~
(246210477)

出0入17汤圆

发表于 2013-7-22 20:10:27 | 显示全部楼层
顶一下~~~~~~~~~
(246210199)

出0入0汤圆

发表于 2013-7-22 20:15:05 | 显示全部楼层
楼主的博客里面有很多极其价值的文章
(246210143)

出0入0汤圆

发表于 2013-7-22 20:16:01 | 显示全部楼层
不错。支持了。谢谢LZ分享经验。                                                                                                                 
(246208718)

出0入0汤圆

发表于 2013-7-22 20:39:46 | 显示全部楼层
这种方式其实和网上流传的液晶菜单的写法,很相似!
曾经用过这种方法,有一个问题就是,当写好的界面需要调整相关ITEM位置时,你不得重新改写
所有相关的画图操作。
最后你会发现你一直是CTRL+C CTRL+V,于是乎可能又开始偷懒是不是可以把这两个界面合成一
个,这样又省了MenuXInit MenuXExit MenuXJump 等函数。哈哈!
(246207255)

出0入0汤圆

发表于 2013-7-22 21:04:09 | 显示全部楼层
状态机画个图全搞定了,并且还是图形化维护
(246205903)

出0入0汤圆

发表于 2013-7-22 21:26:41 | 显示全部楼层
我必须要顶你,楼主                                                                                                
(246204093)

出0入0汤圆

发表于 2013-7-22 21:56:51 | 显示全部楼层
先顶在看,谢谢!
(246203910)

出0入0汤圆

发表于 2013-7-22 21:59:54 | 显示全部楼层
顶一下                                      
(246203613)

出0入0汤圆

发表于 2013-7-22 22:04:51 | 显示全部楼层
写的不错,学习!
(246203533)

出0入0汤圆

发表于 2013-7-22 22:06:11 | 显示全部楼层
不错,值得看看,话说我好久没看过很长不分段的文字了,看来我真的变懒了
(246202322)

出0入0汤圆

发表于 2013-7-22 22:26:22 来自手机 | 显示全部楼层
领悟能力强
(246198506)

出0入239汤圆

 楼主| 发表于 2013-7-22 23:29:58 | 显示全部楼层
本帖最后由 mcu_lover 于 2013-7-22 23:31 编辑
electrlife 发表于 2013-7-22 20:39
这种方式其实和网上流传的液晶菜单的写法,很相似!
曾经用过这种方法,有一个问题就是,当写好的界面需要 ...


只要有变化项,任何方法都避免不了需要修改。只是修改烦简程度不一致而已。
这种界面方式,是我的第二代设计方法。

第一代设计方法类似很多人使用过的《一个占内存极少的菜单系统》和傻孩子曾经贴出来的方法。

第一代方法,对于某种方式的液晶界面组织比较适合,当稍微需求高一点点时候,它们就都不合适了。
所以经过很长时间思考,还是决定转向第二种方法,也就是我现在文件提及的这种方法。

(246198353)

出0入239汤圆

 楼主| 发表于 2013-7-22 23:32:31 | 显示全部楼层
orzorzorzorz 发表于 2013-7-22 21:04
状态机画个图全搞定了,并且还是图形化维护

到时候,会有一个简单的案例讲解,兄弟抽时间帮忙用QM画一画,让大家都有个基本了解。
(246196503)

出0入0汤圆

发表于 2013-7-23 00:03:21 | 显示全部楼层
顶!!!!!!!!!!!!!!!!!!!!!!!!1
(246166715)

出0入0汤圆

发表于 2013-7-23 08:19:49 来自手机 | 显示全部楼层
顶。。。。。。。。。
(246164467)

出0入0汤圆

发表于 2013-7-23 08:57:17 | 显示全部楼层
不错,学习 了
(246162150)

出0入0汤圆

发表于 2013-7-23 09:35:54 | 显示全部楼层
一定要学习。
(246160496)

出0入0汤圆

发表于 2013-7-23 10:03:28 | 显示全部楼层
状态鸡啊状态鸡
(246125976)

出0入239汤圆

 楼主| 发表于 2013-7-23 19:38:48 | 显示全部楼层
orzorzorzorz 发表于 2013-7-22 21:04
状态机画个图全搞定了,并且还是图形化维护

例子更新到楼主位了,兄弟若是有空帮忙QM画一个状态图出来.....
(246124844)

出0入0汤圆

发表于 2013-7-23 19:57:40 | 显示全部楼层
非常不错的做法
(246030318)

出0入0汤圆

发表于 2013-7-24 22:13:06 | 显示全部楼层
mcu_lover 发表于 2013-7-22 23:32
到时候,会有一个简单的案例讲解,兄弟抽时间帮忙用QM画一画,让大家都有个基本了解。 ...

我贴一张我做界面的状态图,这张图画好界面就写好了,界面开发是基于PC模拟器,调试都在PC上进行,只要交叉编译即可烧写到单片机上,大大加快了开发速度。

界面框架基本就是,上电启动界面,然后进入正常界面
正常界面分层的,frame层就是最高父状态,其他界面全部是frame的子状态
在特定界面处理特定消息
启动界面之后,进入main界面,也就是我们一般界面的主界面,当按了set按键,进入主菜单,一步一步画图,完全按照我们菜单的操作逻辑进行
页面切换的改变,或者增加页面,删除页面,只要修改状态图即可,维护很简单

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(246027235)

出0入0汤圆

发表于 2013-7-24 23:04:29 来自手机 | 显示全部楼层
一直学不好gui……
(245989946)

出0入239汤圆

 楼主| 发表于 2013-7-25 09:25:58 | 显示全部楼层
orzorzorzorz 发表于 2013-7-24 22:13
我贴一张我做界面的状态图,这张图画好界面就写好了,界面开发是基于PC模拟器,调试都在PC上进行,只要交 ...

谢谢。不错。与我的想法基本上是一致的。虽然具体实现方式不一样,但方法和原理应该是比较接近的。
我全手工编码,一个界面一个函数,也就是一个状态机,支持消息事件:




前面我有提及到,这种方式属于第二代方式,虽然较第一代方式有进步之处。但仍然不够。
目前我正在酝酿第三代设计方式。所有界面设计工作全部交由PC设计完成。下位机不需要额外的任何界面手工编码。真正做到十分钟搞定界面开发。不管设计,维护,修改,比statechart更为方便,简单,直观。
界面更新,下位机不用重新编译。这才是终极的解决之道。
目前正在进行的工作是PC开发环境的设计。楼主位帖子,12864液晶的界面截图,就是由该软件生成的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(245988938)

出0入0汤圆

发表于 2013-7-25 09:42:46 | 显示全部楼层
很不错。。有想法。。
(245909836)

出0入0汤圆

发表于 2013-7-26 07:41:08 | 显示全部楼层
本帖最后由 orzorzorzorz 于 2013-7-26 07:43 编辑
mcu_lover 发表于 2013-7-25 09:25
谢谢。不错。与我的想法基本上是一致的。虽然具体实现方式不一样,但方法和原理应该是比较接近的。
我全 ...


是的,HMI部分,我自己写了PC模拟器开发的,无需烧写到下位机看效果,只要上位机做出的效果,那么交叉编译即可,大大加快开发速度。
包括串口,以太网,按键等,全部由上位机可以模拟搞定
在硬件板子,或者说原理图都没出的情况下就可以提前软件开发

PS:维护代码没有维护图方便,图很直观
(245694740)

出0入239汤圆

 楼主| 发表于 2013-7-28 19:26:04 | 显示全部楼层
orzorzorzorz 发表于 2013-7-26 07:41
是的,HMI部分,我自己写了PC模拟器开发的,无需烧写到下位机看效果,只要上位机做出的效果,那么交叉编 ...

呵呵,你还没有明白我的第三种方法想要表达的意思。
(245646106)

出0入0汤圆

发表于 2013-7-29 08:56:38 | 显示全部楼层
本帖最后由 orzorzorzorz 于 2013-7-29 08:58 编辑
mcu_lover 发表于 2013-7-28 19:26
呵呵,你还没有明白我的第三种方法想要表达的意思。


我知道你第三种方法,这个方法以前我也研究考虑过,你就是语法解析的方法来做显示,并不是写代码来显示,呵呵
好比迪文那种串口液晶,但是有局限性,不是任何hmi场合都可以适用的
(245642743)

出0入0汤圆

发表于 2013-7-29 09:52:41 | 显示全部楼层
学习一下,以后尝试写一下
(245640716)

出0入0汤圆

发表于 2013-7-29 10:26:28 | 显示全部楼层
不错的文章 顶啊
(245640398)

出0入239汤圆

 楼主| 发表于 2013-7-29 10:31:46 | 显示全部楼层
orzorzorzorz 发表于 2013-7-29 08:56
我知道你第三种方法,这个方法以前我也研究考虑过,你就是语法解析的方法来做显示,并不是写代码来显示, ...

是的。
到时候等我完成了,再来具体比较不同方法的优劣点。
目前来说,用statechart 描述界面行为,再配上层次状态机,加上消息机制,是相对比较完美的方式了。
(245639914)

出0入0汤圆

发表于 2013-7-29 10:39:50 | 显示全部楼层
加油。
学习。
(245637580)

出0入0汤圆

发表于 2013-7-29 11:18:44 | 显示全部楼层
orzorzorzorz 发表于 2013-7-24 22:13
我贴一张我做界面的状态图,这张图画好界面就写好了,界面开发是基于PC模拟器,调试都在PC上进行,只要交 ...

大侠用的什么软件开发这个状态机的呀?
(245428142)

出0入0汤圆

发表于 2013-7-31 21:29:22 | 显示全部楼层
楼主用的是VISUAL STATE 做的状态图吧?
(245424559)

出0入0汤圆

发表于 2013-7-31 22:29:05 | 显示全部楼层
看看!!!不错哦!!
(245366219)

出0入0汤圆

发表于 2013-8-1 14:41:25 | 显示全部楼层
mark!期待...
(245339218)

出0入0汤圆

发表于 2013-8-1 22:11:26 | 显示全部楼层
写的很详细,学习了
(245303664)

出0入0汤圆

发表于 2013-8-2 08:04:00 | 显示全部楼层
写的很不错!学习了
(245303494)

出0入0汤圆

发表于 2013-8-2 08:06:50 | 显示全部楼层
好东东,学习
(245286152)

出0入70汤圆

发表于 2013-8-2 12:55:52 | 显示全部楼层
留爪,LZ继续!
(245285705)

出0入0汤圆

发表于 2013-8-2 13:03:19 | 显示全部楼层
学习强烈支持
(245110873)

出0入0汤圆

发表于 2013-8-4 13:37:11 | 显示全部楼层
Mark先,有空再学习。
(245109383)

出0入0汤圆

发表于 2013-8-4 14:02:01 来自手机 | 显示全部楼层
mark标记一下
(245100246)

出0入0汤圆

发表于 2013-8-4 16:34:18 | 显示全部楼层
第三种方法听起来不错,等着看看,也化繁为简试试
(244753364)

出0入0汤圆

发表于 2013-8-8 16:55:40 | 显示全部楼层
mark一下
(244751102)

出0入0汤圆

发表于 2013-8-8 17:33:22 | 显示全部楼层
楼主,你用单色图形液晶时一般用什么字体?
我现在用19264,公司要求一共可显示4-5排汉字,还没找到合适的字体,有没有好的推荐。
如果用16X16的,就没有行间距了,会很难看。但是用12X12的,很多汉字就糊了,更没法看。
(244750880)

出0入0汤圆

发表于 2013-8-8 17:37:04 | 显示全部楼层
好!还没看完,留贴先
(244750692)

出0入0汤圆

发表于 2013-8-8 17:40:12 | 显示全部楼层
mark-----------不错
(244749920)

出0入0汤圆

发表于 2013-8-8 17:53:04 | 显示全部楼层
界面设计工作全部交由PC设计完成      关注!~
(244749419)

出0入0汤圆

发表于 2013-8-8 18:01:25 | 显示全部楼层
好文章,楼主继续啊
(244691118)

出0入239汤圆

 楼主| 发表于 2013-8-9 10:13:06 | 显示全部楼层
pce516600030 发表于 2013-8-8 17:33
楼主,你用单色图形液晶时一般用什么字体?
我现在用19264,公司要求一共可显示4-5排汉字,还没找到合适的 ...


呵呵,你自己选择吧。一般来说,宋体就好了。其实12×12字体,肯定有的汉字笔画显示不全的。
不过不影响阅读使用,联系上下文基本都可以辨识出来。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(244690649)

出0入0汤圆

发表于 2013-8-9 10:20:55 | 显示全部楼层
mcu_lover 发表于 2013-8-9 10:13
呵呵,你自己选择吧。一般来说,宋体就好了。其实12×12字体,肯定有的汉字笔画显示不全的。
不过不影响 ...

我的宋体用字模软件采出来很糟糕。。。
(244689705)

出0入239汤圆

 楼主| 发表于 2013-8-9 10:36:39 | 显示全部楼层
本帖最后由 mcu_lover 于 2013-8-9 10:37 编辑
pce516600030 发表于 2013-8-9 10:20
我的宋体用字模软件采出来很糟糕。。。



我觉得还能接受,你看我贴出来的图片。是不是你找的取模软件有问题。
还是你的文字太过复杂?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(244689503)

出0入0汤圆

发表于 2013-8-9 10:40:01 | 显示全部楼层
mcu_lover 发表于 2013-8-9 10:36
我觉得还能接受,你看我贴出来的图片。是不是你找的取模软件有问题。
还是你的文字太过复杂? ...

仔细看和你差不多。主要是这个液晶点阵很大,可能看起来就违和了。
(244394226)

出0入0汤圆

发表于 2013-8-12 20:41:18 来自手机 | 显示全部楼层
mark……
顶一个…
(242318870)

出0入0汤圆

发表于 2013-9-5 21:10:34 | 显示全部楼层
mcu_lover 发表于 2013-7-22 23:32
到时候,会有一个简单的案例讲解,兄弟抽时间帮忙用QM画一画,让大家都有个基本了解。 ...

楼主你的案例做好了么,
最近正需要学习UI,非常期待!
(242318157)

出0入0汤圆

发表于 2013-9-5 21:22:27 | 显示全部楼层
学习,支持楼主
(242315890)

出0入0汤圆

发表于 2013-9-5 22:00:14 | 显示全部楼层
orzorzorzorz 发表于 2013-7-24 22:13
我贴一张我做界面的状态图,这张图画好界面就写好了,界面开发是基于PC模拟器,调试都在PC上进行,只要交 ...

两个问题
1)图片太模糊了,看不清楚;
2)用什么软件做的图呢?绘制方便么
(242305763)

出0入0汤圆

发表于 2013-9-6 00:49:01 | 显示全部楼层
electrlife 发表于 2013-7-22 20:39
这种方式其实和网上流传的液晶菜单的写法,很相似!
曾经用过这种方法,有一个问题就是,当写好的界面需要 ...

长姿势了····嘻嘻···留个爪子,明天早上来看·
(237132536)

出0入0汤圆

发表于 2013-11-4 21:49:28 | 显示全部楼层
楼主怎么还不更新呢,也想找一种通用的界面
(237129292)

出0入0汤圆

发表于 2013-11-4 22:43:32 | 显示全部楼层
楼主写的很详细啊
支持楼主
(237126475)

出0入0汤圆

发表于 2013-11-4 23:30:29 来自手机 | 显示全部楼层
不错,学习了
(237125250)

出0入0汤圆

发表于 2013-11-4 23:50:54 | 显示全部楼层
再来顶顶 “ mcu_lover ”大侠的帖子...

写得不错, 期待更新...
(227036139)

出20入65汤圆

发表于 2014-3-1 18:22:45 | 显示全部楼层
mcu_lover 发表于 2013-7-25 09:25
谢谢。不错。与我的想法基本上是一致的。虽然具体实现方式不一样,但方法和原理应该是比较接近的。
我全 ...

有些没看明白,假如是  参数配置 屏幕,需要不断读取按键输入,那么以上的那些函数也需要不断循环调用么?
(227022110)

出0入0汤圆

发表于 2014-3-1 22:16:34 | 显示全部楼层
很厉害,学习了
(227021850)

出0入0汤圆

发表于 2014-3-1 22:20:54 | 显示全部楼层
顶一下~~~~
(227020608)

出0入239汤圆

 楼主| 发表于 2014-3-1 22:41:36 | 显示全部楼层
68336016 发表于 2014-3-1 18:22
有些没看明白,假如是  参数配置 屏幕,需要不断读取按键输入,那么以上的那些函数也需要不断循环调用么 ...

所有的界面函数都是基于状态机+消息的结构
  1. static EUISTATE UINullScreen(SYSMSG* pMsg)
  2. {
  3.         EUISTATE eUIState = E_UI_STATE_NULL;
  4.                        
  5.     switch(pMsg->uMsg)
  6.         {
  7.                 case MSG_UI_ENTER_SCREEN:
  8.                          //进入屏幕,每次进入屏幕时候,触发一次进入事件
  9.                 break;
  10.                        
  11.                 case MSG_UI_EXIT_SCREEN:
  12.                          //退出屏幕,每次退出屏幕时候,触发一次退出事件                       
  13.                 break;
  14.                
  15.                 case MSG_UI_LOOP_SCREEN:
  16.                              //没有任何消息时候,每次主循环调用一次界面处理函数,则发送一个界面循环事件         
  17.                 break;

  18.                 case MSG_KEY:
  19.                        //按键事件
  20.                 break;

  21.                case MSG_TIMER:
  22.                        //定时事件
  23.                break;

  24.                case XXX:
  25.                      //自定义的事件
  26.               break;
  27.       }

  28.           return eUIState;
  29. }       
复制代码
(226894562)

出0入0汤圆

发表于 2014-3-3 09:42:22 | 显示全部楼层
mark 下。学习的道路悠悠的 长长长········任重道远·
(226847791)

出0入0汤圆

发表于 2014-3-3 22:41:53 | 显示全部楼层
密密麻麻的字。。。得花点时间看了
(226702280)

出0入0汤圆

发表于 2014-3-5 15:07:04 | 显示全部楼层
学习了!!!!!!!!!!!!~~~~~~~~~~
(226676975)

出0入0汤圆

发表于 2014-3-5 22:08:49 | 显示全部楼层
马克
(226534828)

出0入0汤圆

发表于 2014-3-7 13:37:56 | 显示全部楼层
裸机界面讲解!标记
(226510683)

出0入0汤圆

发表于 2014-3-7 20:20:21 | 显示全部楼层
MK裸机!
(226464150)

出0入0汤圆

发表于 2014-3-8 09:15:54 | 显示全部楼层
我觉得最好还是搞个UI库,造车轮子真的很痛苦
(226120550)

出0入0汤圆

发表于 2014-3-12 08:42:34 | 显示全部楼层
mark,留着备用
(224346041)

出0入0汤圆

发表于 2014-4-1 21:37:43 | 显示全部楼层
mark下,GUI思路
(224340674)

出0入0汤圆

发表于 2014-4-1 23:07:10 | 显示全部楼层
好文记号
(221704635)

出0入0汤圆

发表于 2014-5-2 11:21:09 | 显示全部楼层
进来学习下
(221701496)

出0入0汤圆

发表于 2014-5-2 12:13:28 | 显示全部楼层
这个一直是我的方向呀
(221698872)

出0入0汤圆

发表于 2014-5-2 12:57:12 | 显示全部楼层
前排占位,正在学ucGui
(220069946)

出0入0汤圆

发表于 2014-5-21 09:25:58 | 显示全部楼层
LZ V5,学习了
(219424777)

出0入0汤圆

发表于 2014-5-28 20:38:47 | 显示全部楼层
辉哥厉害,顶起

应该还有后文的??
(219376519)

出0入0汤圆

发表于 2014-5-29 10:03:05 | 显示全部楼层
搬凳子围观啊
(219344429)

出0入0汤圆

发表于 2014-5-29 18:57:55 | 显示全部楼层
mcu_lover 发表于 2013-7-25 09:25
谢谢。不错。与我的想法基本上是一致的。虽然具体实现方式不一样,但方法和原理应该是比较接近的。
我全 ...

第三种我想应该是程序提供访问接口,界面只需要提供与程序配套的资源和框架就行了
(219344345)

出0入0汤圆

发表于 2014-5-29 18:59:19 | 显示全部楼层
orzorzorzorz 发表于 2013-7-24 22:13
我贴一张我做界面的状态图,这张图画好界面就写好了,界面开发是基于PC模拟器,调试都在PC上进行,只要交 ...

你这个具体是怎么搞的?能说下吗?
(214318518)

出0入0汤圆

发表于 2014-7-26 23:03:06 | 显示全部楼层
一直在发找gui与裸机菜单的区别,其实ATM就是一个很好的例子
(213802154)

出0入0汤圆

发表于 2014-8-1 22:29:10 | 显示全部楼层
orzorzorzorz 发表于 2013-7-22 21:04
状态机画个图全搞定了,并且还是图形化维护

请明示,学习下!
(213800918)

出0入0汤圆

发表于 2014-8-1 22:49:46 | 显示全部楼层
mark一下,以前的BOSS就是用组态的思路在51上实现GUI的。在没有操作系统支持下。学习~~~
(213800878)

出0入0汤圆

发表于 2014-8-1 22:50:26 | 显示全部楼层
mark一下,以前的BOSS就是用组态的思路在51上实现GUI的。在没有操作系统支持下。学习~~~
(213800700)

出0入0汤圆

发表于 2014-8-1 22:53:24 | 显示全部楼层
做个记号
(213390555)

出0入0汤圆

发表于 2014-8-6 16:49:09 | 显示全部楼层
红金龙大虾,这篇文章讲的是基于screen的菜单设计模式,那能否说一下基于窗口的菜单设计模式呢?
(213389948)

出0入0汤圆

发表于 2014-8-6 16:59:16 | 显示全部楼层
好东西标记一下
(213389706)

出0入0汤圆

发表于 2014-8-6 17:03:18 | 显示全部楼层
收藏 学习 谢谢lz
(213378586)

出0入0汤圆

发表于 2014-8-6 20:08:38 | 显示全部楼层
有启发,谢谢
(213199986)

出0入0汤圆

发表于 2014-8-8 21:45:18 来自手机 | 显示全部楼层
谢谢lz分享 mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-5-11 11:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表