新闻中心

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

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

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

注意到多通道的参数设置项完全相同,ID为111,112,.,118的菜单分支完全一样,ID为121和122的菜单分支也完全相同。可以定义一种,从而删去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的空间,但是保证的程序的一致性,对于不同的系统其设计基本一致。

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

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

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

结束语

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

陀螺仪相关文章:陀螺仪原理



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭