打印

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

[复制链接]
4097|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

使用特权

评论回复
5
mcu_lover|  楼主 | 2009-12-21 12:41 | 只看该作者
你在说 人机交互式
是PC通过串口等方式操作MCU动作?

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

是MCU按键 和 液晶显示。当然也不仅仅局限于此,感觉只要是用户输入和输出显示,如果要做的好一点,确实结构很难组织好。能否提供一点点思路,谢啦。

使用特权

评论回复
6
5880527| | 2009-12-21 12:52 | 只看该作者
很久不做这玩意,想起来真的痛苦,简直就跟绣花似的

使用特权

评论回复
7
HWM| | 2009-12-21 12:54 | 只看该作者
状态机只是个“名字”而已,内含状态的机器都是状态机,所以满眼看出去的都是“状态机”。
GUI只是个图象借口而已,也别过于寄予其希望。

人际交互,一个按钮,一个灯也算。为何复杂一点就玩不转了呢?问题是不会把对象肢解了,要学点“解剖”技术。要知道从何处下手最快捷,最安全,更具完整性和层次性。这些东西,现实中的实体(对象)早就教会了我们,只是我们通常木知木觉而已。为此人们还搞出了个“面向对象”的玩意儿,其实对象早已在我们面前,只是我们没有正面看它而已。

使用特权

评论回复
8
5880527| | 2009-12-21 13:00 | 只看该作者
楼主是液晶屏显示比较繁琐,其他应该都算比较简单吧

使用特权

评论回复
9
mcu_lover|  楼主 | 2009-12-21 19:00 | 只看该作者
7# HWM

面对对象确实是好,不过用C实现面对对象好像有一点复杂,不仅仅是一个结构体里包含几个数据再加几个函数指针这么简单,得花时间好好琢磨琢磨。

使用特权

评论回复
10
mcu_lover|  楼主 | 2009-12-21 19:05 | 只看该作者
楼主是液晶屏显示比较繁琐,其他应该都算比较简单吧
5880527 发表于 2009-12-21 13:00

恩,同感,简单显示几个字符还简单,一涉及到多级菜单,反白啊什么的,就得处处小心了,真象绣花似的。

使用特权

评论回复
11
tqtxk| | 2009-12-21 20:48 | 只看该作者
也正想学习一下

使用特权

评论回复
12
nz122911| | 2009-12-21 22:03 | 只看该作者
本帖最后由 nz122911 于 2009-12-21 22:05 编辑

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

最近又没时间继续研究,也打算好好看看别人的怎么做的

使用特权

评论回复
13
红金龙吸味| | 2009-12-21 22:54 | 只看该作者
呵呵,这方面确实很难搞。期待更多高手普及一下。
匠人JJ呢,还有XWJ大哥,肠子哥呢.....赶快出来撒

使用特权

评论回复
14
古道热肠| | 2009-12-21 23:17 | 只看该作者
呵呵,俺搞的那些,数码管的较多,以状态机来实现较为方便.
LCD要想想理得顺,做成结构化模块,但这样一来,代码量比较大,适合于不太关心代码容量的设备中.如果采用精巧的数据结构+算法来实现,代码是小,但维护比较难.
较为理想的GUI界面,个人觉得还是用事件驱动比较容量实现,对象不对象倒不是关键的.可以参考一下微软件的DOS操作系统源程序,里面有很多采用事件驱动的代码.也可参考一下mini GUI的早期版本吧,有源码的.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
mcu_lover + 1
15
程序匠人| | 2009-12-21 23:41 | 只看该作者
别舍不得那点空间。人机界面无小事。一个程序,好与不好,用户最直观的感受就是来自于人机界面。

使用特权

评论回复
16
5880527| | 2009-12-22 09:57 | 只看该作者
公司以前的产品都是用液晶屏的,原来的硬件又设计得有些不好,真的是痛苦,我又没本事去修改那些。后来我把产品都改成了通过串口用触摸屏显示(买现成的),写个通用的通讯协议,用起来比PLC都简单,以前一个星期完成的程序现在就一个小时,价格也上去了,当然跟我们公司的行业有关哈

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
17
myfaith| | 2009-12-22 11:47 | 只看该作者
LZ的问题深有感触

使用特权

评论回复
18
mcu_lover|  楼主 | 2009-12-24 12:09 | 只看该作者
这么多人没一个说容易,看来真的有很长路要走了。

使用特权

评论回复
19
中原一点| | 2009-12-24 13:01 | 只看该作者
那位大虾来普及下

使用特权

评论回复
20
pangshen| | 2010-1-7 13:55 | 只看该作者
我最近也在搞这方面,听听大虾们的经验啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

82

帖子

1

粉丝