状 态 机 的 概 念 状 态 机 是 软 件 编 程 中 的 一 个 重 要 概 念 。比 这 个 概 念 更 重 要 的 是 对 它 的 灵 活应 用 。 在 一 个 思 路 清 晰 而 且 高 效 的 程 序 中 , 必 然 有 状 态 机 的 身 影 浮 现 。 比 如 说 一 个 按 键 命 令 解 析 程 序 , 就 可 以 被 看 做 状 态 机 : 本 来 在 A状 态 下 ,触 发 一 个 按 键 后 切 换 到 了 B状 态 ; 再 触 发 另 一 个 键 后 切 换 到 C状 态 , 或 者 返 回 到A状 态 。 这 就 是 最 简 单 的 按 键 状 态 机 例 子 。 实 际 的 按 键 解 析 程 序 会 比 这 更 复 杂 些 ,但 这 不 影 响 我 们 对 状 态 机 的 认 识 。 进 一 步 看 , 击 键 动 作 本 身 也 可 以 看 做 一 个 状 态 机 。 一 个 细 小 的 击 键 动 作 包含 了 : 释 放 、 抖 动 、 闭 合 、 抖 动 和 重 新 释 放 等 状 态 。 同 样 , 一 个 串 行 通 信 的 时 序 ( 不 管 它 是 遵 循 何 种 协 议 , 标准串 口也 好、 I2C也 好; 也 不 管 它 是 有 线的 、 还是 红外的 、 无线的 )也 都可 以 看 做 由一 系列有 限的状 态 构成。 显示扫描程 序 也 是 状 态 机 ; 通 信 命 令 解 析 程 序 也 是 状 态 机 ; 甚至连继电器的 吸合 /释 放 控制、 发 光管 ( LED)的 亮/灭控制又何 尝不 是 个 状 态 机 。 当我 们 打开思 路 , 把状 态 机 作 为一 种 思 想导入到 程 序 中 去时 , 就 会 找到 解决问题的 一 条有 效 的 捷径。 有 时 候用 状 态 机 的 思 维去思 考程 序 该干什么, 比 用 控制流程 的 思 维去思 考, 可 能会 更 有 效 。 这 样 一 来 状 态 机 便有 了 更 实 际 的 功用 。 程 序 其实 就 是 状 态 机 。 也 许你还不 理解 上面这 句话。 请想想看 ,计算机 的 大厦不 就 是 建立在 “0”和 “1”两个 基本 状 态 的 地基之上么? 状 态 机 的 要 素 状 态 机 可 归纳为4个 要 素, 即现 态 、 条件 、 动 作 ...