已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
10天前关闭。
Improve this question
我正在尝试构建一个嵌入式应用程序。其中,我有一个键盘接口和一个LCD显示接口.我使用“C编程”进行编码。
我有Menu
,Up
,Down
,Right
,Left
,Select
和Exit
(7)键。
根据上下文,我应该在LCD上显示内容。
比如说,
- 当
Menu
键被按下,我需要显示菜单选项. - 在这些菜单选项中,根据
Up
,Down
,Right
或Left
按键,我需要在LCD上导航不同的选项。 - 如果用户选择“一个选项”从上面的上下文,那么我需要显示该选项的相关内容。
因此,有许多可能的组合。我知道,我可以放置足够的条件语句/切换案例来构建我的应用程序;但是,我想知道是否有更优雅的编码方式。
明天,如果我得到20+键和100+不同的LCD上下文显示在屏幕上,那么可以肯定的是,使用条件语句将不起作用(或变得太乏味!)
有没有什么好的编程技术可以解决这个问题?
1条答案
按热度按时间t3irkdon1#
就像迪米奇说的...你可以使用有限状态机来扩展你的应用程序,通过向转换表添加更多的状态和事件来处理额外的键和LCD上下文,而不用用一堆条件语句来弄乱你的代码。这将使您的代码更加模块化,并且随着应用程序的增长而更加易于维护。
定义状态,然后定义事件,然后创建转换表,然后实现fsm。
1.定义状态:确定应用程序可能处于的不同状态。在您的情况下,状态可能包括“主菜单”、“子菜单1”、“子菜单2”等。每个状态对应于特定的LCD上下文。
1.定义事件:识别可能触发状态转换的事件或用户输入。这些事件可以是您提到的按键(菜单、向上、向下、向右、向左、选择、退出)。
1.创建状态转换表:构建一个Map当前状态、事件和下一个状态的表。此表将定义应用程序在不同状态下如何响应用户输入。
1.实施FSM:编写代码读取用户输入并根据转换表更新当前状态。这可以使用switch-case语句或查找表来完成。
这里有一个例子,你可以如何实现这一点.
如果你需要更多关于fsm的内容,这里有一篇文章我觉得很有帮助。
https://flaviocopes.com/finite-state-machines/