请教各位老师:如何才能做好人机交互

[复制链接]
5676|21
 楼主| mcu_lover 发表于 2009-12-21 11:29 | 显示全部楼层 |阅读模式
很喜欢单片机,学习也有快半年了。现在感觉有一个瓶颈就是在处理人机交互的时候,感觉程序写的又大又臃肿,添加或者修改一点点显示,往往牵扯到很多地方的改变。google了一下,始终无法找到好的结构。在论坛也搜索了一下,也很少有相关的资料学习。
    感觉好像卡在这里了似的,想要提高真的很难。各位老师做了多年的开发了,能否稍微点拨一下,或者贴一点示例代码学习一下。谢谢了。
    (BTW,卡在这个地方很长时间了,而且我觉得可能这是入门到熟手的一个分水岭:( )
宇容创行 发表于 2009-12-21 12:21 | 显示全部楼层
用状态机
建议好好学习一些开源gui的应用
jerkoh 发表于 2009-12-21 12:23 | 显示全部楼层
你在说 人机交互式
是PC通过串口等方式操作MCU动作?

还是MCU键盘操作液晶屏?
 楼主| mcu_lover 发表于 2009-12-21 12:39 | 显示全部楼层
用状态机
建议好好学习一些开源gui的应用
宇容创行 发表于 2009-12-21 12:21

谢谢。状态机是个好东西,目前我的按键处理和显示就是用简单的状态转换实现的。但是总感觉稍微做复杂一点的时候,而且每个显示界面处理任务不同,程序结构就开始混乱了。往往是一个界面下面(譬如是调整一个参数的上下限值)调用获取键值函数GetKeyValue(),
然后
switch(KeyValue)
{
    case KEY_UP :
    case KEY_DOWN :
    case KEY_ENTER :
    ......
}
之类的。
整个程序写下来,又大又臃肿,很多地方看起来差不多,几乎是重复一遍,但是又很难做成一个通用函数调用。
可否举几个开源GUI的名字,我去google学习一下。:handshake
 楼主| mcu_lover 发表于 2009-12-21 12:41 | 显示全部楼层
你在说 人机交互式
是PC通过串口等方式操作MCU动作?

还是MCU键盘操作液晶屏?
jerkoh 发表于 2009-12-21 12:23

是MCU按键 和 液晶显示。当然也不仅仅局限于此,感觉只要是用户输入和输出显示,如果要做的好一点,确实结构很难组织好。能否提供一点点思路,谢啦。
5880527 发表于 2009-12-21 12:52 | 显示全部楼层
很久不做这玩意,想起来真的痛苦,简直就跟绣花似的
HWM 发表于 2009-12-21 12:54 | 显示全部楼层
状态机只是个“名字”而已,内含状态的机器都是状态机,所以满眼看出去的都是“状态机”。
GUI只是个图象借口而已,也别过于寄予其希望。

人际交互,一个按钮,一个灯也算。为何复杂一点就玩不转了呢?问题是不会把对象肢解了,要学点“解剖”技术。要知道从何处下手最快捷,最安全,更具完整性和层次性。这些东西,现实中的实体(对象)早就教会了我们,只是我们通常木知木觉而已。为此人们还搞出了个“面向对象”的玩意儿,其实对象早已在我们面前,只是我们没有正面看它而已。
5880527 发表于 2009-12-21 13:00 | 显示全部楼层
楼主是液晶屏显示比较繁琐,其他应该都算比较简单吧
 楼主| mcu_lover 发表于 2009-12-21 19:00 | 显示全部楼层
7# HWM

面对对象确实是好,不过用C实现面对对象好像有一点复杂,不仅仅是一个结构体里包含几个数据再加几个函数指针这么简单,得花时间好好琢磨琢磨。
 楼主| mcu_lover 发表于 2009-12-21 19:05 | 显示全部楼层
楼主是液晶屏显示比较繁琐,其他应该都算比较简单吧
5880527 发表于 2009-12-21 13:00

恩,同感,简单显示几个字符还简单,一涉及到多级菜单,反白啊什么的,就得处处小心了,真象绣花似的。
tqtxk 发表于 2009-12-21 20:48 | 显示全部楼层
也正想学习一下
nz122911 发表于 2009-12-21 22:03 | 显示全部楼层
本帖最后由 nz122911 于 2009-12-21 22:05 编辑

我与楼主也有相同的感受。
对于菜单结构,采样结构体形式,每幅界面通常都有自己单独的显示内容,并且有单独的功能函数,对于通常的菜单反显,多级菜单级连倒是问题不大,就是在菜单功能函数与实时显示这方面
例如,这个界面功能是设置一大堆试验参数的
      那个界面功能是设置一大堆系统参数的。。。
      到这个界面时要执行什么,那个时要执行什么,并且要实时对应到显示界面,是把显示与执行分开,还是也在执行里调显示函数,我也是经常程序一搞大,就有点乱了
曾经也想尝试采用开辟一片内存专门用于LCD的显存,显示任务完全不理会当前执行什么,只关注显存里有什么,就反映到LCD上,但也不是很成功,感觉不是很通用。

最近又没时间继续研究,也打算好好看看别人的怎么做的
红金龙吸味 发表于 2009-12-21 22:54 | 显示全部楼层
呵呵,这方面确实很难搞。期待更多高手普及一下。
匠人JJ呢,还有XWJ大哥,肠子哥呢.....赶快出来撒
古道热肠 发表于 2009-12-21 23:17 | 显示全部楼层
呵呵,俺搞的那些,数码管的较多,以状态机来实现较为方便.
LCD要想想理得顺,做成结构化模块,但这样一来,代码量比较大,适合于不太关心代码容量的设备中.如果采用精巧的数据结构+算法来实现,代码是小,但维护比较难.
较为理想的GUI界面,个人觉得还是用事件驱动比较容量实现,对象不对象倒不是关键的.可以参考一下微软件的DOS操作系统源程序,里面有很多采用事件驱动的代码.也可参考一下mini GUI的早期版本吧,有源码的.

评分

参与人数 1威望 +1 收起 理由
mcu_lover + 1

查看全部评分

程序匠人 发表于 2009-12-21 23:41 | 显示全部楼层
别舍不得那点空间。人机界面无小事。一个程序,好与不好,用户最直观的感受就是来自于人机界面。
5880527 发表于 2009-12-22 09:57 | 显示全部楼层
公司以前的产品都是用液晶屏的,原来的硬件又设计得有些不好,真的是痛苦,我又没本事去修改那些。后来我把产品都改成了通过串口用触摸屏显示(买现成的),写个通用的通讯协议,用起来比PLC都简单,以前一个星期完成的程序现在就一个小时,价格也上去了,当然跟我们公司的行业有关哈

评分

参与人数 1威望 +1 收起 理由
xlsbz + 1

查看全部评分

myfaith 发表于 2009-12-22 11:47 | 显示全部楼层
LZ的问题深有感触
 楼主| mcu_lover 发表于 2009-12-24 12:09 | 显示全部楼层
这么多人没一个说容易,看来真的有很长路要走了。
中原一点 发表于 2009-12-24 13:01 | 显示全部楼层
那位大虾来普及下
pangshen 发表于 2010-1-7 13:55 | 显示全部楼层
我最近也在搞这方面,听听大虾们的经验啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

82

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部