摘要:介绍了ACM12864J液晶显示模块的特性与功能,提出ACM12864J与SPCE061A微控制器的硬件接口设计,以及在此设计基础之上实现字符显示、汉字显示、图形与曲线显示的方法与编程技巧。
0. 引言
点阵式平板图形液晶显示器在各种便携式产品中具有非常广泛的应用。显示器的核心液晶显示器控制器品种繁多,各种控制芯片在控制电路逻辑、控制指令、指标参数等方面各有差异。但是对于已经带有控制电路的平板点阵式图形液晶显示器,使用者无需关心其控制核心的集成芯片,控制电路的几个信号,就可以方便地利用它进行开发。
1.ACM12864J液晶显示模块的特性
ACM12864J是采用联合电子公司生产的小型液晶显示模块,该模块价格低,数据可读写,自带负压发生电路,单+5V供电,带背光,可由各种微控制器器直接控制,数据读写操作不受外部时钟控制,不带汉字库,占空比为1/64,外部共有20条引脚来进行外部接口。
ACM12864J采用的数据传送方式是纵向数据传送方式,64行共分为0~7页,每页8行,逐页显。发送数据步骤:先发送第0页第一列,高位在下,为一个字节;再发送第二列,直到128行结束;然后发送第2页第一列,依次类推,直到整屏数据发送完为止。。这种数据显示方式利用字模提取软件,采用"纵向8点下高位"输出格式取模,不做任何修改,就能很好的显示。其写时序如图1所示。
2.ACM12864J液晶显示模块应用的硬件设计
ACM12864J数据为8位并行数据接口,外加数根控制线,若直接与单片机接口,占用口线太多。而SPCE061A内置有SIO接口,通过74HC164进行的串并转换,可以用来传送8位并行数据。这样加上连背光灯控制信号线也不过占用8根I/O口。倘若不进行读操作,可减至7根控制信号线。SIO的接口共有四种接口方式,即地址为8位、16位、24位和无地址接口,与ACM12864J的接口采用无地址方式传送,设置好寄存器工作状态,即可直接传送数据,SPCE061A的SIO接口最高传输率可达5Mb/S。数据的读写控制线由单片机的I/O线控制,LCD所需的时序延时由编好的位操作函数直接控制,编程时不须考虑SPCE061A与ACM12864J接口的时间要求,简化了编程。硬件电路如图2所示。
3. 软件程序编制
3.1 SIO初始化及写数据
SPCE061A单片机是由台湾凌阳科技股份有限公司生产的具有SOC系统的微控制器,该控制器内置A/D转换、SIO口等。SPCE061A的串行外围设备接口SIO在传送数据之前,须对SIO口控制寄存器进行初始化。SIO口控制寄存器P_SIO_Ctrl主要设置SIO口通信的工作模式,包括设备地址、传输速度、读写设置、功能设置等。SIO口数据寄存器P_SIO_Data主要负责读写过程中数据的接收与发送。SIO口的启动控制寄存器P_SIO_Start,又是状态控制寄存器,根据P_SIO_Start的状态,判断数据接收或发送完毕。
SPCE061A不提供位操作指令,对位进行操作时,要不影响其他位的状态,可采用"读---改---写"的办法,即:先读出某一位的的值,经逻辑与、逻辑或运算,再回写到当前字节,即改变了I/O口的状态。为此,编写位操作函数Set_IOA_Bit(n,dir,attrib,buffer,data)、Set_IOB_Bit(n,dir,attrib,buffer,data)解决上述问题,该函数的参数定义如下:n-位操作的位数;dir,attrib,buffer-位操作的属性;data-位操作的数据;。其传送数据的程序如下:
3.2 ASCII字符的显示
最常用的办法是采用字模提取软件提取字模,这种方法在资源比较少的条件下是适宜的。缺点是比较麻烦,要来回改动,且不好寻址。一种比较实用的方法是制作好一个ASCII字模表,定义为一个一维数组的形式。程序中若出现数字变量的操作,须把变量转化为字符显示时。因此,先判断显示的是字符还是数字,若是数字,先应转化为字符。然后再把ASCII值减去32得到索引值,根据索引值直接查表,查得8*16的点阵字模,送出显示。在程序中可以用变量直接表示数字并进行运算,显示时只送变量。对于SPCE061A,内置有32K字的flash ROM,而表格又不大,在数组前加入"const"即可把数组存到内部的flash ROM中。在ACM12864J中,取每个ASCII字模为8*16,每个ASCII字模占16个字节,按ASCII从小到大的顺序排列,便于查找。
3.3 汉字的显示
汉字在ACM12864J上一般采用两种取模方式:一种为12*12点阵,可显示5行汉字,缺点是编程较为困难;一种为16*16点阵,可显示4行汉字,编程比较简单。以16*16点阵为例来说,每个汉字占用32个字节,根据LCD显示的要求,利用字模提取软件,采用"纵向8点下高位"能满足要求。
在进行中文菜单设计时,每行可显示8个汉字,有个"焦点"问题,编程时可设置一个"焦点指针",处于焦点之下的反白显示,其他的正常显示。这样可把每行显示编成一个函数的形式,控制好焦点,显示时调用一次显示行子函数。汉字显示程序如下(fb=1,反白显示):
3.4 图形及动画的显示
图形及动画的显示一般是整屏操作的,字模的选取可以先用windows下的画笔工具。新建一幅128*64像素的图片,编完图片后,保存为黑白图象。然后在字模软件中打开,提取出字模来。每幅图片占用128*8个字节的空间,根据图片数据存储的特点,提取的邻近字模数据相同。若是图片比较多或者进行动画显示,最好进行压缩保存,节省控制器宝贵的资源,读取时编写控制器软件解压缩。
3.5 曲线的显示与绘制
点是组成曲线的基本单位,画曲线也就是多次调用点函数进行显示的。点函数编制思想也就是根据横坐标X(1<=X<=128),纵坐标Y(1<=Y<=64)来确定某一点,而在画函数时,X坐标从左往右,正好符合人的习惯。但Y坐标从上到下依次增大,与人相反,故必须校正。以画两个周期的正弦函数为例,可包含头文件"math.h",调用库函数y=sinf(x),其中x为浮点数弧度显示,y的值介于-1与1之间。要满屏显示,须加1变为正,放大31倍;x坐标为128点,取步进量为0.1弧度,可参考以下程序:
本文介绍了不带中文字库的ACM12864J与SPCE061A的接口技术,提出了技巧性的编程解决办法。采用ACM12864J液晶显示模块,可以显示字符、中文汉字、图形与动画等,提高了系统的可视化界面,在工业仪器仪表中得到了广泛的应用。凌阳公司生产的SPCE061A具有不仅具有一般控制器的功能,加上其独具特色的语音处理功能,可以开发出许多智能化的产品。