阅读:1411回复:11
问个技术问题
我用状态转移法设计了个键盘处理程序,也就是类似手机的菜单程序。
遇到一个问题:每按一个功能键可以转移到另一个状态。但是到最后一级 是需处理多次按键问题如何解决?也就是说象手机的菜单到了让你处理电话薄的那一级菜单,下一级任务要处理:添加,编辑。。。每个功能都面临多次可能按到同一个按键问题而且还有作出处理。如何解决?是跟据当前的状态在主程序中读取键值在该状态下作出处理,还是在该任务处理函数中完成键值读取? 谁做过给点指导! 回答的好坚决给分,不客气! |
|
|
沙发#
发布于:2005-03-14 22:55
谢绝灌水
|
|
|
板凳#
发布于:2005-03-15 09:13
我用状态转移法设计了个键盘处理程序,也就是类似手机的菜单程序。 关于这个问题没有准确答案 都可以 这些东西都应改在程序设计最初就确定 然后在搭不同的框架 如果菜单过多(大于200)建议用后一种方式 如果菜单比较少 建议用第一中方式 第一种方式的有点在与 程序的实时处理能力比较强 程序的深度比较浅 容易实现“多任务” 还有一点就是程序的时间可控性比较强 缺点就是如果菜单过多 处理比较繁琐 状态量太多 编程的思维需要更缜密 第二种方式反之 |
|
地板#
发布于:2005-03-15 09:18
#define key_a 11
#define key_b 11 key_a和key_b键值一样,但用途不一 可能你是第一次写这方面的程序, 可以找一些键盘和菜单的例程来参考一下. |
|
|
地下室#
发布于:2005-03-15 10:48
[quote]#define key_a 11
#define key_b 11 key_a和key_b键值一样,但用途不一 可能你是第一次写这方面的程序, 可以找一些键盘和菜单的例程来参考一下. 具体点,该如何处理?能推荐点资料吗? 我的具体应用是一个配料机控制,处理各料值比重。在输入配比时要多次 用到数字键。当状态转移到配比输入函数时我该如何处理,我要多次了用到键盘输入各个物料的重量。 还有,在状态转移法中好像不能向你说的那样定义。因为无法区分。 谢谢! |
|
|
5楼#
发布于:2005-03-15 13:19
1,状态转移法转移只能用在读取键盘值GetKeyValue( )函数中运用
2,每一个菜单,有自己单独的键盘处理程序,所以即使不同菜单中用同一键值不会有任何影响. 3,菜单是分层的,刚开始是主菜单,要进入子菜单,其实就是调用不同的子功能模块,每一个这样的功能模块都有自己单独的键盘处理函数. 通常如 switch( GetKeyValue() ) { case KEY_A: ****; break; case KEY_B: ****; break; case KEY_C: ****; break; .... .... default: ****; } 若此模块中的KEY_A和另一个模块的KEY_C是同一个键, 不会影响的. 因为菜单是分层的, 所以键盘处理也是分层的 ...... 我手头上只有获得键盘消息和传送LCD显示消息的代码, 和你要求的有一些小差别, 但程序结构基本一致的: *层次菜单 *分级处理的键盘处理和显示 [编辑 - 3/15/05 by hzhq1] |
|
|
6楼#
发布于:2005-03-15 13:29
附件:
mainmenu.c是主菜单, 其他菜单是各下级子菜单, 子菜单中又有子菜单 .... .... |
|
|
7楼#
发布于:2005-03-16 00:06
谢谢,我要向你学习!
|
|
|
8楼#
发布于:2005-03-16 09:46
我用状态转移法设计了个键盘处理程序,也就是类似手机的菜单程序。 你应该好好学习学习 有限状态自动机。 |
|
|
9楼#
发布于:2005-03-16 21:24
我没学过有限状态自动机,我是学自动化的,有限状态机应该是自动控制的内容啊,可是我没没开过这课。数据结构就甭提了,更美学过。C语言是自学的。
|
|
|
10楼#
发布于:2005-03-16 21:27
估计欧要是弄ARM 肯定问题更多,因为编程基础太差。
|
|
|
11楼#
发布于:2005-03-17 09:25
我没学过有限状态自动机,我是学自动化的,有限状态机应该是自动控制的内容啊,可是我没没开过这课。数据结构就甭提了,更美学过。C语言是自学的。 :D 有空的时候还是补补好。 |
|
|