实验动物独立通气笼盒(Individual Ventilated Cages,IVC)(闭环)监控系统,由微控制器实现对笼盒风扇的通气量、笼盒内部的氨含量等参数采集,并根据这些参数来调整通气风扇转速,以调整笼盒的换气率,从而确保笼盒内部的空气质量。同时,根据相关参数指标发出警报以提醒更换过滤膜等,实现对小动物生长环境的过程控制。
在整个监控系统中,人机交互界面部分用于显示整个实验动物生长环境过程中的控制历史数据、实时控制参数和环境温度参数等。
本文采用以ST7920为控制器的YMl2864R点阵式液晶显示模块(LCD Module,LCM)构成了整个IVC监控系统的人机界面部分。YM12864R点阵式液晶显示模块具有灵活的接口方式和简单的操作指令,构成的全中文人机交互图形界面既可以显示8×4行16×16点阵的汉字,也可以显示图形。模块内部设有2MB的中文字型CGROM和64×256点阵的GDRAM绘图区域;同时,提供4组可编程控制的16×16点阵造字空间。
1 点阵式液晶硬件接口设计
以ST7920为控制器的YM12864R点阵式液晶显示模块和单片机之间的接口方式有并行和串行两种。本文采用串行接口方式,单片机选用AVR公司的ATmega16。接口电路如图1所示。其中,PC4控制串行的片选信号(CS),低电平有效;PC5控制串行的数据线(SID);PC6控制串行的时钟输入(CLK)。ST7920通过VCC(+5 V)和GND之间串联一个10 kΩ的电阻来控制背光强度。如果不需要调节对比度,可以直接将VLCD引脚接VCC(+5 V),此时对比度最大。
2 文本显示及绘图显示
2.1 文本显示
ST7920可以显示半宽的HCGROM字型、CGRAM字型以及中文CGROM三种字型,通过在DDRAM中写入的编码选择。文本显示DDRAM提供8个×4行的汉字空间,如下所示:
字型编码如下:
①显示半宽HCGROM字型。将1字节写入DDRAM中,范围为02H~7FH的编码。
②显示半宽CGRAM字型。将2字节编码写入DDRAM中,总共有0000H、0002H、0004H、0006H四种编码。
③显示中文CGROM字型。将2字节编码写入DDRAM中,范围为A1AOH~FTFFH(GB码)或A140H~D75FH(BIG5码)的编码。
2.2 绘图显示
绘图显示GDRAM提供128×8字节的记忆空间。在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入2个字节的数据到绘图RAM中,而地址计数器(AC)会自动加1。在写入绘图显示RAM的期间,绘图显示功能必须关闭。整个写入绘图RAM的步骤如下:
①关闭绘图显示功能;
②先将水平的位元组坐标(X)写入绘图RAM地址,再将垂直的坐标(Y)写入绘图RAM地址;
③依次将D15~D8和D7~D0写入RAM中;
④打开绘图显示功能。
图形显示坐标如图2所示。其中,水平方向X以字节单位,垂直方向Y以位为单位。
3 字符反白
在实现人机交互界面菜单时,字符反白可以表示菜单中不同选项被选中的状态。液晶显示模块YM12864R的使用手册中提供了对应行的反白指令,但在原理上ST7920控制器的128×64点阵液晶等同于256×32点阵,第3行对应的文本显示(DDRAM)地址紧接着第1行,第4行对应的文本显示(DDRAM)地址紧接第2行。因此,用户对第1行执行反白显示操作时,第3行必然也反白显示;对第2行执行反白操作时,第4行也必然反白。可见,使用手册中自带的反白指令不能实现任意字符的反白。
为了解决上述问题,可以将图形显示和字符显示结合起来使用。在ST7920控制器中,文本显示的DDRAM和图形显示的GDRAM是相互独立的,而最后显示到液晶上的结果则是,文本显示DDRAM中数据和图形显示GDRAM中数据的异或结果。
如果要在液晶显示模块的某个点上呈现反白显示,那么就在该点绘图并且显示文本;如果要取消反白,只需用全“0”擦掉该点的绘图。这样,就可以实现YM12864R的任意字符的反白。
字符反白程序流程如图3所示。其中,base_x表示绘图起始的行地址;Y_Pos表示绘图起始的列地址;第1行至第4行的起始地址分别是(0x80,0x80),(0xS0,0xg0),(0x88,0xS0)和(0x88,0x90)。
反白就是在需要反白的区域进行绘图,即在这个区域写进0xff。清除一个区域的反白,就是对需要清除反白的区域清除绘图,即在这个区域写进0x00。
在整个绘图的过程中,横向地址指针是自动进行加1运算的,所以只需要确定这一行的首地址横坐标;而纵坐标的地址不进行自动加1运算,需要在程序中修正,每次修正是以像素为基本单位的。
字符反白显示实例如图4所示。
4 任意位置显示任意大小图形
在实现人机交互界面时,图文结合是常见的一种方式。本文尝试一种任意位置显示任意大小图形(横向尺寸以字节为基本单位,纵向尺寸以位为基本单位)的方法,为人机交互界面的图形结合设计提供了捷径。
4.1 任意位置显示任意大小图形程序
任意位置显示任意大小图形程序流程如图5所示。其中,x1和y1表示所画图的起始点相对于液晶屏幕左上角起始点(0xS0,0x80)的距离(横向x1以字节为基本单位,纵向y1以位为基本单位);x表示所画图的起始横坐标地址;y表示所画图的起始纵坐标地址;Write_command()函数用于向液晶中写命令;templ表示图形的纵向尺寸(以像素为单位)。
绘图时,如果所画的图形只涉及上半屏(或下半屏),那么在写地址时可以不考虑地址跨越上下半屏的调整,只需要在所画图形的初始处写好行地址和列地址:
Write_command(y+templ);
Write_command(x);
在绘图过程中,横坐标地址指针会在写数据的过程中自动加1,因此只需要写出这一行的首地址;但纵坐标地址指针不会自动加1,需要在程序中修正。
4.2 任意位置显示任意大小图形实例
任意位置显示任意大小图形实例如图6(a)~(c) 所示。
结 语
ST7920因内置字库而被广泛应用,其图形显示的关键点是熟练掌握图形显示坐标。在笔者所参与的独立通气笼盒监控系统设计过程中,利用以ST7920为控制器的液晶显示模块构建良好的人机交互界面,以曲线和直方图的方式显示实时温度。系统可由用户设定开启密码,可以查看相关历史数据、实现实验动物生长环境及生长过程的控制,以及回溯历史数据、实时控制参数和环境温度等参数。该设计对优化控制实验动物生长环境、稳定实验动物生活习性、动物形态十分有益。