新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于AVR单片机的控制系统设计

基于AVR单片机的控制系统设计

作者:时间:2014-12-19来源:网络收藏

  对于用户按键操作切换不同的菜单时,我们只需修改一个指向对应菜单节点的全局菜单节点指针即可。当用户按下“ESC”键时,菜单指针指向当前节点的父节点,按下“Enter”键时,则指针指向对应节点的子节点。

本文引用地址:http://www.eepw.com.cn/article/267092.htm

  用于单片机的RAM空间较小,只有4KB,我们需设计一种合理而简洁的数据结构,我们将菜单的数据结构定义为(C语言实现)。

  

 

  图3 menuselect函数的流程图

  将菜单分为显示型菜单和功能性菜单,显示型菜单项用于切换各级菜单,功能型菜单则执行最底层菜单所对应的操作,total变量为0则表示为功能型菜单,大于0则表示选择型菜单。通过菜单的ID,即可以知道当前菜单的显示位置和内容,将此信息放在对应的displaymenu函数中可以节省数据空间,不用对于功能型菜单建立额外的ID与处理函数间的对应关系表,从而实现功能型菜单和显示型菜单的一致性操作。一个供参考的执行函数可以写作:

  if(g_pmenu->total>0)

  { g_pmenu=menuselect(g_pmenu,Key);} else {(g_pmenu->displaymenu)(g_pmenu->ID,g_pmenu->cur);}

  其中menuselect函数用于切换对应的菜单子项,按键为“UP”键和“DOWN”键时,只需修改g_pmune->cur即可;按下“ENTER”键时,则g_pmenu=g_pmenu->down,再根据cur值,g_pmenu=g_pmenu->right;按下“ESC”键,则g_pmenu=g_pmenu->up.

  这种设计使得代码数据量变得较小,同时增强了程序的扩展性,需要增加或修改菜单项时,不论是功能型菜单还是执行性菜单,只需要修改对应的菜单结构的数组即可,而不必修改对应的执行代码。经过这样的简化后,发现对于菜单数较多的多通道输入/输出系统,系统RAM区还是不够用。对于一个8输入通道的系统,每个通道的参数设置项可能多达40项,总菜单节点大于300个,每个节点占用14B,则整个菜单节点所占的RAM已超过4K,所以这种方式还是需要进一步改进。

  注意到多通道的参数设置项完全相同,ID为111,112,。,118的菜单分支完全一样,ID为121和122的菜单分支也完全相同。可以定义一种Sibling菜单,从而删去ID为112~118以及ID为122的菜单节点和子节点(虚线框所示),其上级菜单(ID为11和ID为12)的项目中的total值均变为1.为了区别不同的通道分支,有两种实现办法:

  一种处理方法采用全局变量

  增加一个g_CODER_Channel_Number的全局变量,用于保存当前的通道号。在menuselect函数中,增加一个针对本系统设计的一个判断,当ID为11时,则不修改对应的g_pmenu->cur,而是直接修改变量g_CODER_Channel_Number,进入对应的显示函数后,直接根据g_CODER_Channel_Number判断通道号,从而输出对应的值。这种方法不需要改变系统设计的结构,但需要针对不同的系统修改主处理函数menuselect.

  另一种处理方法在菜单结构中增加一个MenuSibling结构,定义为

  typedef struct _menuSibling{

  signedcharcur;signedchartotal;}SIBLING;同时对应的菜单结构修改为typedefstructmenu{……

  SIBLINGSibling;}MENU;

  这样,ID为11的结构项的Sibling.total为8,Sibling.cur为当前的子菜单项。判断到total>0且Sibling.total>0时,可知其下一级菜单为SIB2LING菜单,此时以前需修改cur想的操作则修改Sibling.cur即可。这种设计下,每个节点增加了2B的空间,但是保证的程序的一致性,对于不同的系统其设计基本一致。

  以上菜单项的设计用于系统设置部分,当退出系统设置时,即进入系统循环检测部分。单片机通过接口检测各个通道是否正常,当正常时则显示为绿灯,出现异常则显示为红灯,黄灯为中间状态。指示灯的流程参见图4.

  

 

  图4循环检测的指示灯流程

  结束语

  按照本文提供的方法优化后的设计,可以满足大多数的多通道输入/输出系统的控制系统的需要,整个系统的设计主要在于建立一个菜单树,将对应的节点编号,再编写对应的节点处理函数即可。这种设计使得程序的开发、维护都很容易,具有较强的可扩展性和可移植性。

c语言相关文章:c语言教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理


蜂鸣器相关文章:蜂鸣器原理

上一页 1 2 下一页

关键词: AVR ATmega128 RS-485

评论


相关推荐

技术专区

关闭