小点阵汉显液晶模块及其应用
摘要:HZ132-64B30是一种采用12×12点阵的小点阵汉字液晶显示模块,该模块内嵌T9拼音输入法并采用标准的UART与控制MCU通信。文中介绍了该模块的性能特点、引脚功能及用户命令,给出了HZ132-64B30的具体应用电路和应用程序。
关键词:小点阵;汉显液晶模块;单片机;HZ3132-64B30
对于手机等体积小巧的电子产品,其人机界面一方面要满足大信息量的显示要求,另一方面,显示屏的大小又受体积的制约。因此,如何在面积有限的情况下多显示一些汉字已成为此类产品需要解决的重要问题。而解决上述问题最为行之有效的方法就是采用小点阵汉字显示,这样可以在同样的成本和体积下多显示一些汉字。另一方面,此类电子产品还要求具有较强的汉字输入功能,以满足汉字输入及查找的需要。
HZ132-64B30即是采用小点阵汉字显示,它是具有12×12点阵汉字显示功能的液晶图形显示模块。该模块同时还内嵌了先进的T9拼音输入法,并采用UART方式与控制MCU进行接口,因此可为手机、智能终端等人机交互信息量大的电子产品提供一个较好的解决方案。
1 HZ132-64B30的性能特点
HZ132-64B30汉字液晶显示模块的主要性能特点如下:
●模块分辨率为132(列)×64(行),全屏幕图形点阵,汉字显示点阵为12×12;
●内含12×12点阵一、二级简体中文汉字字库及12×6点阵ASCⅡ字符库;
●全屏幕可以显示每行10个共5行标准宋体汉字或者20×5个ASCⅡ字符,非常适合信息终端类显示;
●具有多种图形及文本显示命令;
●采用串行接口控制,硬件连接比较简单;
●内嵌先进的T9拼音输入法,与大多数手机的拼音输入法兼容;
●液晶屏尺寸(mm):53.0(L)×28.0(W)×2.0(H),显示点阵: 0.26(L)×0.28(W);
●采用单+5V电源供电,内部可提供显示驱动负电压。
HZ132-64B30汉显模块在模块上方的一排5根引脚是给用户的电源和串行数据口,现将各引脚功能说明如下:
VCC(1):5V正电源端;
TXD(2):汉显模块的串行数据输出引脚;
RXD(3):汉显模块的串行数据输入引脚,在模块启动期间,该脚接地可以激活自检程序,此时液晶屏将显示自检画面
GND(4):接地端;
RESET(5):外部复位引脚,高电平有效。
2 用户命令
控制MCU一般通过串口命令与汉显模块进行通信,模块对串口命令做出相应的显示或返回相应的数据,模块的通信格式为9600,n,8,1,所有发往汉显模块的命令都是以“ESC”键值0X1b开始,后面跟一个字节的命令码,其后再跟具体的命令内容。模块返回的内容则是以“ESC”开始,后面跟一个字节的命令码,其后跟返回内容。模块可自动对每条指令做出是否成功的返回响应,执行成功时返回“OK!”,错误指令则返回“error”。对于有数据返回的指令,这些响应通常跟在数据的后面。当模块正常运行时,可以通过适当的设置使其不再对命令执行做出成功与否的响应,以提高模块的运行速度。
发往模块的命令格式为:ESC、命令代码(1 byte)、命令内容(N bytes);
模块返回的数据格式为:ESC、返回内容(N bytes)。
下面详细介绍各用户命令:
(1)设置LCM的灰度
命令格式:ESC,0X31,HD;
0X31:灰度设置命令;
HD:灰度值,取值范围为0X00~0X3F,建议灰度值取为0X07。
(2)清屏命令
命令格式:ESC,0X32;
(3)设置光标位置
命令格式:ESC,0X33,X,Y;
其中X为以汉字为单位的屏幕列坐标值,取值范围为0~19;Y则是以汉字为单位的屏幕行坐标值,取值范围为0~4。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(4)显示光标
命令格式:ESC,0X34,A;
其中,A为光标显示开关,A为0时,不显示光标,A为1时,光标显示。
(5)在光标位置显示字符串
命令格式:ESC,0X37,B,N,END;
该命令可在当前光标位置显示汉字或ASCⅡ字符串,也可用于显示单个汉字或ASCⅡ字符。其中:B为显示属性开关,当B为0时,正常显示字符,B为1时,反显字符;N为显示字符的内容(多字节),当显示内容为汉字时,N为显示汉字的内码;当显示内容为ASCⅡ码时,N为ASCⅡ码值;END为结束标志,其值为0X00。
(6)在任意位置画点
命令格式:ESC,0X38,C,X,Y;
画点时,坐标原点(0,0)都是在左上角,X坐标向右递增,Y坐标向下递增。其中:C是画点属性开关,C为1时,在该坐标原点画一个点,C为0时,擦除该坐标的点;X表示以点为单位的X坐标值(0<X<131);Y表示以点为单位的Y坐标值(0<Y<63)。
(7)任意位置画线
命令格式:ESC,0X39,D,X0,Y0,X1,Y1;
其中,D为画线属性,D为2时,画一条虚线;D为1时,画一条实线;D为0时,擦除该位置的线;X0表示直线一端的X位置;Y0表示直线一端的Y位置;X1表示直线另一端的X位置;Y1表示直线另一端的Y位置。
(8)任意位置画圆
命令格式:ESC,0X41,E,X,Y,R;
其中,E表示画圆属性,E为1,画一个圆,E为0,擦除该圆;X表示圆心的X位置;Y表示圆心的Y位置;R表示半径。
(9)画图片
命令格式:ESC,0X42,F,X0Y0,X1Y1,N;
其中,F为画图属性,F为0,画正常图,F为1,画反显图;X0Y0为图片左上角的坐标位置;X1Y1为图片大小,宽为X1 高为Y1;N为多字节图形数据,排列方法为横向8bit,字节为左高右低,字节排列顺序为从左到右、从上到下。
(10)画ICON
命令格式:ESC,0X43,G,N;
该功能用于显示厂家预设在模块内的ICON图形。其中:G表示ICON属性,G为1时,画该ICON,G为0时,擦除该ICON;N表示从左到右第几个ICON0<n<131。
(11)取数字组合的有效拼音组合用于T9拼音输入法
命令格式:发送:ESC,0X47,N1,END;
返回:ESC,N1,X1,END,Xn,END;
数字代表的字母采用国际标准:0和1无效,2ABC,3DEF,4GHI,5JKL,6MNO,7PQRS,8TUV,9WXYZ;
N1表示输入数字所代表的字母小于或等于6个数字,取值范围为2~9,代表的字母范围为A~F;
X1表示第一个返回的拼音字符串(小写);
Xn表示第n个返回的拼音字符串(小写);
(12)取符合输入拼音字符串的汉字串用于T9拼音输入法
命令格式:发送:ESC,0X48,N,Xn,N,END;
返回:ESC,Nx,END。
其中,N表示返回汉字的个数;Xn表示返回第几页的汉字n≥1(用于待选汉字翻页);N1表示输入的拼音字符串≤6个数字;Nx表示返回的汉字串。
(13)设置是否对命令做返回响应
命令格式:ESC,0X50,H;
其中,H为命令响应属性,H为00表示不返回命令响应,H为01则表示当命令正确执行时返回“OK!”,当命令不正确时返回“error”。
3 具体应用
HZ132-64B30汉显液晶模块可广泛用于人机交互界面友好、显示信息量大的电子产品中,由于控制MCU是通过UART与液晶模块进行通讯的,故该模块几乎可与任何种类的单片机进行接口。对于不具备UART或UART被占用的单片机,可使用通用I/O口线来模拟串口,但模拟串口的波特率将受到指令周期的限制而无法做得很高,一般只能做到4800bps,这时可将汉显模块的晶振更换为11.0592MHz,同时模块的波特率也改为4800 bps, 即可正常通讯了。
图1是以AT89C2051单片机为例,给出的汉显液晶模块与单片机的接口电路。
下面是采用C51语言编写的与图1硬件电路配套的子程序:
#define CR putstring(“\r\n”) //发送一个回车换行
#define OLEN 8 //串行发送缓冲区长度
idata uchar outbuf[OLEN]; //发送缓冲区
data uchar idata *outlast=outbuf; //最后由中断传输出去的字节位置
data uchar idata *putlast=outbuf; //最后放入发送缓冲区的字节位置
#define ILEN 30 // 串行接收缓冲区长度
idata uchar inbuf[OLEN] ;接收缓冲区
data uchar idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置
data uchar idata *getlast=inbuf; //最后取走的字节位置
bit outbufsign0; //最后一个数据发完标志,发完=0
bit outbufsign; //输出缓冲区非空标志,非空=1
bit inbufsign; //接收缓冲区非空标志, 非空=1
bit inbufful; //输入缓冲区满标志,满=1
//放入一个字节到发送缓冲区
putbyte(unsigned char c)
{
ES=0; //暂停串行中断,以免数据比较时出错
while((((outlast-putlast)==2)&&(outlast > putlast )) || ((outlast < putlast) && (OLEN-(putlast-outlast)==2)))
{
ES=1;
c++;c--;
ES=0;
}
*putlast=c; //放字节进入缓冲区
putlast++; //发送缓冲区指针加一
if(putlast==outbuf+OLEN) putlast=outbuf;
//指针到顶部后换到底部
outbufsign=1;
if (!outbufsign0)
{
outbufsign0=1;
TI=1;
} //缓冲区开始为空置为有,启动发送
ES=1;
}
// 设置光标位置
void lcd_cursor(uchar x, uchar y)
{
putbyte(0x1b);
putbyte(0x33);
putbyte(x);
putbyte(y);
}
//显示字符串
void lcd_string(uchar attr,uchar *string)
{
putbyte(0x1b);
putbyte(0x37);
putbyte(attr);
putstring(string);
putbyte(0x00);
}
//画点
void lcd_ dot(uchar attr,uchar x,uchar y)
{
putbyte(0x1b);
putbyte(0x38);
putbyte(attr);
putbyte(x);
putbyte(y);
}
// 画图片,*picture data指向图片数据,图片数据的第一二个字节是图片宽度和图片高度
void lcd_picture(uchar attr,uchar x0,uchar y0,uchar *picture_data)
{
putbyte(0x1b);
putbyte(0x42);
putbyte(attr);
putbyte(x0);
putbyte(y0);
putbytes(picture_data,(((*picture_data)+7)/8)*(*(picture_data+1))+2);
}
//发送字符串到串口
putstring(uchar *puts)
{
for(;*puts!=0;puts++)//遇到停止符0结束
putbyte(*puts);
}
//串口中断处理
serial () interrupt 4
{
if (TI)
{
TI = 0;
if(outbufsign)
{
SBUF=*outlast; //未发送完继续
outlast++;//最后传出去的字节位置加一
if (outlast==outbuf+OLEN) outlast=
outbuf; //地址到顶部回到底部
if (putlast==outlast) outbufsign=0;
//数据发送完置发送缓冲区空标志
}
else
{
outbufsign0=0;
}
}
if(RI)
{
RI = 0;
if(!inbufful)
{
*inlast= SBUF; //放入数据
inlast++; //最后放入的位置加一
inbufsign=1;
if(inlast==inbuf+ILEN)inlast=inbuf;
//地址到顶部回到底部
if (inlast==getlast) inbufful=1;
//接收缓冲区满置满标志
}
}
}
//串口初始化
void serial_init(void)
{
SCON=0x50;
TMOD|=0x20;
PCON|= 0x80;
TH1 = 0xf4;
TR1 = 1;
ES = 1;
REN=1;
EA=1;
}
4 结束语
HZ132-64B30小点阵汉显模块的推出为小体积、交互显示信息量较大的电子产品的人机界面显示提供了一个较好的解决方案,它可以用较低的成本显示较多的汉字,同时,其内嵌的T9拼音输入法也为汉字的输入与查找提供了方便,因而该模块在通信、信息终端及智能化电子产品中具有广泛的应用前景。