新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 跟我学51单片机(八)——图型带字库液晶128×64

跟我学51单片机(八)——图型带字库液晶128×64

作者:时间:2013-01-26来源:网络收藏

二、电路详解

  如图2所示,液晶的控制管脚都接到了单片机管脚上,前文提到,在功能设置指令中可以将液晶设为并行的8位、4位数据接口,图中采用的是8位的数据接口,当然也可以当四位数据接口或者串行接口来用。另液晶电源正端接5V,负端接地,背光正端由5V经过一个二极管降压后接入,负端接地。此外,液晶的偏压管脚(VO)接到一个电位器的中间抽头,电位器的两端分别接5V和地,这样就可通过调节电位器来实现对液晶对比度的调节。经实验测试,笔者手里的液晶的偏压管脚的电压调节到3.6~3.7V时对比度效果最好。读者可以自己实践测试。

跟我学51单片机(八)——图型带字库液晶128×64

图2 128×64液晶与单片机的连接图

  三、程序设计

  在程序设计之前,我们先了解下128×64液晶内部控制器ST7920的读写时序,其读写时序如图3、4所示。

跟我学51单片机(八)——图型带字库液晶128×64

图3 ST7920的数据写入时序(8位数据线模式)

跟我学51单片机(八)——图型带字库液晶128×64

图4 ST7920的数据读取时序(8位数据线模式)

  对照时序图和表2、表3,我们可以很容易的写出驱动128×64液晶的各个子函数,如下所示:

  /*读忙函数:检测液晶是否能够接收数据或命令,可用

  一段延时替代*/

  void check_busy(void)

  {

  BF = HIGH;

  //将读忙管脚设为输入

  RS = LOW;

  //读忙时,RS电平应为低

  RW = HIGH;

  //读忙时,RS电平应为高

  E = HIGH;

  //E置高,配合数据读取

  while(BF==1);

  //死循环,如果忙,则一直等待

  E = LOW; //E置低

  }

  /*写指令函数:向寄存器写入控制字

  参数:cmd - 要写入的控制字*/

  void LCD_en_command(uchar cmd)

  {

  check_busy();

  //先检测液晶是否能够接收指令

  RS= LOW;

  //写指令时,RS电平应为低

  RW=LOW;

  //写指令时,RS电平应为低

  LCDIO= cmd;

  //将要写入的指令输出到对应的端口

  E=HIGH;

  //E置高

  E=LOW;

  //E置低,下降沿写入数据

  }

  /*写数据函数:向寄存器写入数据

  参数:dat - 要写入的数据*/

  void LCD_en_dat(uchar dat)

  {

  check_busy();

  //先检测液晶是否能够接收数据

  RS=HIGH;

  //写数据时,RS电平应为高

  RW=LOW;

  //写数据时,RW电平应为低

  LCDIO=dat;

  //将要写入的数据输出到对应的端口

  E=HIGH;

  //E置高

  E=LOW;

  //E置低,下降沿写入数据

  }



评论


相关推荐

技术专区

关闭