欢迎光临散文网 会员登陆 & 注册

液晶显示(二)-----字符控制IC-ST7066应用

2022-05-30 08:21 作者:e小白官方  | 我要投稿

本文作者:显示行家,e小白网址:www.e-xiaobai.com

在单色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);                 //屏蔽低4位,保留高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个字符,

    {  

      for(i=0;i<16;i++)

      {   

        writelcd(0x80+i,k++) ;             //第1行16个字符,起始地址0x80,首16个会随机显示,忽略

      }

        for(i=0;i<16;i++)

      {   

        writelcd(0xC0+i,k++) ;             //第2行16个字符,起始地址0xc0,正常字符开始显示

      }

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模式不同,显示效果不同,驱动原理一样。

液晶显示(二)-----字符控制IC-ST7066应用的评论 (共 条)

分享到微博请遵守国家法律