在单色LCD应用中,字符液晶模组是应用很广泛的一种显示组件。到目前为止,像16x2,20x2,24x2的字符模组还有广泛应用。前面说过,要实现LCD显示,必须搭配合适的控制驱动电路才能实现显示功能。ST7066就是一颗专为实现字符显示的控制IC。由台湾ST(矽创)推出,成为最早替代HD44780(日立)和S6A0069(三星)字符控制IC的公司之一。虽然目前有国内的AIP31066(无锡中微爱芯)、UCI7066(台湾晶宏)的替代品出现,但ST7066还是占有比较大的应用。这几家的芯片基本可以兼容替换。这里就以ST7066为例,介绍字符液晶模组的驱动方式。
先介绍几个单色LCD驱动控制常用的术语:
VDD(VCC)----指IC工作电压,通常2.7-5.5V;
VOP(VLCD)----指能驱动LCD显示的电压,段码类和字符类一般不超过5V;点阵类最高可到24.0V;
DUTY----可简单理解为显示行数的倒数,如1/16duty,实际驱动行数16行;
BIAS----可简单理解为把显示电压进行分压的分压比,BIAS跟DUTY有直接关系,一般1/4DUTY-->1/3bias;1/16DUTY-- >1/5bais;1/32DUTY-->1/6bias;1/64DUTY-->1/9bias;1/128DUTY-->1/12bias;1/240DUTY-->1/16bias;
COM----行驱动;
SEG----列驱动;
CGROM----内部字符只读存储器,ST7066自带240个标准西文字符,出厂时已经写人ROM内,用户不可更改;
CGRAM----内部字符随机存储器,ST7066允许用户自定义8个5x点阵或者4个5x11点阵字符;
DDRAM----显示数据存储器,这个存储器定义了显示数据在内存中的显示地址(与显示屏的位置对应)。ST7066满屏最大显示80个字符,第一行起始地址为0x80,结束地址0xCF(单行);如果是2或是4行显示,则第二行的开始地址从0xC0开始;
一、基本特点
ST7066本身带有16个COM输出,40个SEG输出,按照西文字符5x8点阵格式,则可实现1行16个字符(16x1)或者2行8个字符(8x2);如果搭配ST7065(40列输出)或者ST7063(80列输出)驱动器,可实现显示字符扩充,最大可实现40x2个字符显示。
工作电压2.7-5.5V(IC),LCD显示驱动电压3.0-18.0V(超过VDD电压时,需要外部供电);
支持4BIT/8BIT并口通讯(AIP和UC新推出的还支持SPI/IIC);
软件可选择DUTY,1/8,1/11,1/16duty;
内部自带240个5x8西文字符库(CGROM),支持不同字库(英日字库ST7066-0A,英欧字库ST7066-0B等),注意ST7066系列不支持汉字显示,显示汉字库有另外的控制IC--ST7920,以后介绍;
二、应用电路如下图(以16x2字符模组为例,可下载压缩文件)
图中完整描述了ST7066和ST7065组合使用的接法(COM和SEG需要接到LCD对应标号即可),因为要显示16x2行字符,按照单个字符需要5x8点阵(加上光标)计算,总共需要5x16=80列,2x8=16行才可以,一颗ST7066只有16行x40列,因此需要搭配1颗ST7065,刚好可实现16x80点阵显示。
采用1/16duty的VOP一般不超过5.0V(大多4.8V左右),因此不需要外加电压,只需从VDD(5.0V)中分压即可。图中R2-R6构成BIAS电路(VO端可直接接地),正常情况下R2-R6取等值(1K-10K),根据显示效果调整,也可外接电位器调节。Bias与Duty关系如下图:
三、参考例程(通过C51测试,可直接引用修改)
/**************************************/ /* */ /* this is a sample program */ /* for C1602 ,8Bit-6800 */ /* IC:ST7066U-0A /0B/0E */ /**************************************/ #include#include #define Dat P1 // MCU P1 Connect To LCM sbit RS = P2^7; // Command or Data Select,1:DATA , 0:COMMAND sbit RW = P2^6; // 1:Read; 0: Write sbit EN = P2^5; // Enable, 0 sbit LED1 = P3^7; #define uchar unsigned char #define uint unsigned int /*------------------延时子程序1--------------------------*/ void nop(uint t) { while(t--) _nop_(); } /*------------------延时子程序2---------------------------*/ void delay(uint t) { while(t--) { nop(500);} } /*------------------ 读状态字子程序-----------------------*/ uchar Read_state(void) { uchar State=0x00; Dat=0x00; //注意这里如果是0xff会导致处于busy状态 RS=0; RW=1; nop(1); EN=1; nop(1); State=Dat;nop(2); //读状态的高4位 EN=0; return(State); //返回状态值 } /*------------------ 判忙子程序,可以不采用--------------*/ void CheckBusy(void) { uchar Busy; do{ Busy=Read_state(); } while((Busy&0x80)==0x80); //如果BF=1,则判忙,等待继续查询;否则跳出 } /*---------------- 4bit子程序---------------------*/ void Write(uchar flag,uchar n) { RS=flag; RW=0; nop(1); EN=1; nop(1); Dat=(0xf0&n); nop(2); //采用4BIT通讯时,高4位有效 EN=0; nop(1); } /*---------------- 8bit命令子程序-----------------*/ void Writecom(uchar n) { CheckBusy(); Write(0,n); } /*---------------- 8bit数据子程序-----------------*/ void Writedata(uchar n) { CheckBusy(); Write(1,n); } /*------------------初始化LCD屏-------------------*/ void InitLCD(void) { delay(15); Write(0,0x38); delay(15); //设置工作方式8bit,2行显示,5x8点阵,1/16duty;0x28=4BIT,2行显示 Write(0,0x38); nop(100); //可以不保留 Writecom(0x06); nop(10) ; // 设置输入方式: 数据读写后DDRAM地址自动加1,光标右移 Writecom(0x0F); nop(10) ; // 开显示,开光标及光标闪烁;0x00=关显示 Writecom(0x01); nop(10) ; // 清屏 } /***************************************************/ void ClearLCD() //清屏 { Writecom(0x01); nop(4); } /***************************************************/ void writelcd(uchar m,uchar n) //连续写入指令或数据,0(m)--指令,1(n)--数据 { Writecom(m); Writedata(n); } /**************************************************/ /**** 测试主程序 ***/ /**************************************************/ main() { uint i,k=0; InitLCD(); while(1) { for(m=0;m<8;m++) //显示字库表(CGROM)中256个字符(每页显示16x2个字符,共8页显示) { for(i=0;i<16;i++) { writelcd(0x80+i,k++) ; //第1行16个字符,这16个是CGRAM地址,会随机显示,忽略 } for(i=0;i<16;i++) { writelcd(0xC0+i,k++) ; //第2行16个字符,CGROM地址开始,正常字符开始地址 } delay_ms(n); } ClearLCD(); k=0; //256个字符显示完毕,计数器置0 for(i=0;i<16;i++) { writelcd(0x80+i,'8') ; //显示2行8字 writelcd(0xC0+i,'8') ; } delay(100); } }
编译通过,即可看到如下图显示
LCD模式不同,显示效果不同,驱动原理一样。
四、原理图压缩文件