这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 基础知识每日一题——第四十五题

共2条 1/1 1 跳转至

基础知识每日一题——第四十五题

高工
2014-08-11 13:04:32     打赏
活动简介:

“每日一题”是EEPW参考西电XDLab社推出的旨向初学者普及基础知识的一项活动,每天在此帖内公布“每日一题”的题目。大家可以根据自己的理解对题目进行回答和相互讨论,我们鼓励大家积极发言。第二天会给出参考答案。每天一帖,所有的题目都将汇集至此,以期方便大家查找。

 

活动宗旨:

活动目的在于通过“每日一题”让大家每天进步一点点,增强大家的基础知识,提高大家对电子制作的兴趣。我们鼓励大家积极发言,如果不懂、是菜鸟,请积极发问;如果懂、是大神,请慷慨解囊。


        今日题目:请简述状态机编程原理?






基础知识每日一题

高工
2014-08-12 10:05:23     打赏
2楼

  解答:

  1、什么是状态机?

  有限状态自动机,简称状态机,是表示有限个状态以及在这些状

  态之间的转移和动作等行为的数学模型。

  2、为什么要引入状态机?

  大家在学习 C 语言编程的时候,通常会用流程图来描述程序的执行

  过程,但是流程图是存在缺陷的。

  举个例子,电子表只有两个按键,用这两个按键可以完成修改、查

  看时间日期等功能。但是如果我们用流程图来描述程序的执行过程将会是这

  样的:

  这样程序的流程图将会无限地分支下去。

  可是如果我们这些流程都看成是各种“状态”,按键表示从一种状

  态转移到另一种状态,我们就能得到下面这种“状态转移图”:

  于是我们就可以比较方便地描述程序中各种状态之间的关系,便可

  以得到下面的程序思路:

  /*************A 键中断***************/

  跳转

  swith(Status)

  {

  //根据当前状态处理 A 键所引发的状态

  case DISP_TIME:Status=DISP_DATE;break;

  键,显示日期

  case DISP_DATE:Status=DISP_SEC; break;

  case DISP_SEC: Status=DISP_TIME;break;

  case SET_HOUR:if(++Hour>23) Hour=0;break;

  //时间显示按键 A

  //小时设置时按

  A 键调整小时

  case SET_MINUTE:if(++Month>12) Month=0;break;

  case SET_DATE:if(++Date>31) Date=0;break;

  }

  /*************B 键中断***************/

  swith(Status)

  状态跳转

  {

  //根据当前状态处理 A 键所引发的

  case DISP_TIME :Status=SET_HOUR;break;

  键,显示小时

  case DISP_DATE :Status=SET_HOUR;break;

  键,显示小时

  case DISP_SEC :Second=0;break;

  //时间显示时按 B

  //日期显示时按 B

  //秒钟显示时按 B

  键,秒归零

  case SET_HOUR :Status=SET_MINUTE;break; //小时设置时按 B

  键,分钟设置

  case SET_MINUTE :Status=SET_MONTH;break;

  键,月设置

  case SET_MONTH :Status=SET_DATE;break;

  B 键,日设置

  case SET_DATE :Status=DISP_DATE;break;

  //分钟设置时按 B

  //月设置时按

  //日设置时按 B 键,

  显示时间

  }

  这样我们就把 A/B 两个按键的各种状态都描述了出来,这就是“状态机

  编程”的一个例子。

  状态机编程是工程上运用非常广泛的一种编程思想,希望大家在编程中

  逐渐形成这种好的编程习惯。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]