树状菜单界面的软件设计方案分析
是有一些不同的:如果是对寄存器进行读写操作,MCU必须先通过数据总线送出寄存器的地址,然后才能在数据总线上读写寄存器资料;如果是对DisplayRAM进行读写操作,MCU可以直接在数据总线上读取和写入DisplayRAM的资料。需要注意的是:初始化的时候,读写控制信号一定先置高,读写操作都禁能,否则会造成后面时序的紊乱,即使后面的读写程序正确,液晶模块也不会有任何显示。AVR单片机的IO管脚即使不用,初始化的时候也要给它一个确定的状态,否则容易出问题。
液晶模块的八位数据总线直接连到单片机的PA口上面,几个控制管脚连到单片机的普通IO上即可。值得注意的就是液晶模块对比度的控制,在LCD驱动电压输入端V0和LCD驱动电压输出端VEE之间必须接一可调电阻,阻值20K左右,用于调节液晶模块的对比度。VEE输出固定为-23V.
通过实践,当Vo输入为-18V左右的时候效果最好。我们希望平时不用的时候,液晶背光灯关闭以节省功耗,当进行键盘操作的时候唤醒。所以在液晶模块背光电源的输人端加一个开关管控制。液晶模块与ATmaga64单片机的接口电路如图2所示。
图2液晶模块接口电路
3系统软件架构
AVR单片机的软件开发使用的集成开发环境是Atmel公司提供的AVR Studio.为了能够使用C语言进行软件开发,还必须另外安装C编译器。目前有许多关于AVR的C编译器,常用的是GCC(即WINAVR)、ICC、IAR以及CodeVisionAVR等。其中GCC是公开源代码的自由软件,使用它完全不必考虑价格因素,因此无论是GCC本身还是与CCC配套的AVR编译包,其更新速度和效率都是其他开发工具所不能比拟的。用GCC编写的源程序可读性和可移植性都很高。本文所涉及到的软件开发就是利用AVR Studio和GCC.
3.1 系统软件整体框架
整个终端显控系统的功能就是为了能够显示设备内部工况,并能够设置一些参数,所以最主要的就是显控系统跟设备主机之间的数据交互以及美观舒适的人机交互界面。数据交互以及界面的切换也要配合键盘的操作。同时应当增加睡眠模式,即平时不进行操作的时候可以关闭背光灯,关掉一些模块,当用户使用键盘的时候,产生键盘中断,从睡眠模式唤醒。因此我们可以定出系统软件的基本架构,如图3所示。
图3主程序流程图
3.2树状菜单界面的软件设计
可以看出系统软件整体框架也比较简单,重点是在于如何跟设备主机进行数据交互,同时配合菜单显示,下面我们就介绍一种树状菜单界面的软件设计。这种方法将整个菜单看作一个树形结构,每个菜单界面则是菜单树上的一个节点:其父节点为当前菜单的上一级菜单,子节点为当前菜单的第一个子菜单;左右节点为当前菜单的兄弟菜单,也就是其上一级菜单的其余子菜单。
对每个节点进行编号,定义一个长整数D为节点号,根节点D=l,考虑到有的节点其子菜单大于10,子菜单为父菜单ID乘100再加上下级菜单在上级菜单中对应的子项ID(1,2,……),这样第1级子菜单的ID就分别为101,102,103.对应IDl01的下级ID即为10101,10102,10103……,这样,不同的按键操作对应不同的菜单节点搜索方法,即每次只需要修改全局的节点号ID即可。我们同时还可以定义几个全局变量来代表每级菜单的子菜单数、邻近菜单数以及菜单类型,这样,我们可以更加方便的在各个菜单之间切换。键盘配合菜单切换的程序流程如图4所示。
图4菜单选择程序流程
- SN2005学习系统 数字语音室解决方案(05-19)
- 以可编程DSP架构应对TD-SCDMA以及TD-LTE带来的设计挑战 (02-14)
- ARM-μCLinux嵌入式系统启动引导的实现(07-26)
- 多核处理器架构及调试方案(03-28)
- 基于DSP的电源解决方案(06-13)
- 间歇性Bug最佳解决方案(09-24)