新闻中心

EEPW首页>嵌入式系统>设计应用> 基于单片机的LCD时序图的底层驱动编写

基于单片机的LCD时序图的底层驱动编写

作者: 时间:2010-09-11 来源:网络 收藏

  //=======================================================

  void_DataWrite(unsigned char Dat)

  {

_A0 = 1; //A0 置高,示意进行显存数据操作

_RW = 0; //RW 置低,示意进行写入操作

  LCD_EP = 0; //EP 先置低,以便后面产生跳变沿

  LCD_CS = 0; //片选 CS 置低

  DAT_PORT = Dat; //装载数据置总线

  LCD_EP = 1; //产生有效的跳变沿

  LCD_CS = 1; //片选置高

  }

  //=====================================================

  // 函数: unsigned char LCD_DataRead(void)

  // 描述: 从 LCD 中的显示缓冲 RAM 当中读一个字节的显示数据

  // 参数: 无

  // 返回: 读出的数据,

  //=====================================================

  unsigned char LCD_DataRead(void)

  {

  unsigned char Read_Data;

  DAT_PORT = 0xff; //51 的端口想要输入前,要先给端口全置 1

  LCD_A0 = 1; //A0 置高,示意进行显存数据操作

  LCD_RW = 1; //RW 置高,示意进行读出操作

  LCD_EP = 0; //EP 先置低,以便后面产生跳变沿

  LCD_CS = 0; //片选 CS 置低

  LCD_EP = 1; //产生有效的跳变沿

  LCD_EP = 0;

  Read_Data = DAT_PORT; //读出数据

  LCD_CS = 1; //片选置高

  return Read_Data; //返回读到的数据

  }

  以上便是要介绍的最基本的操作程序,它们几乎是整个 LCD程序当中与硬件打交道的代码了,这样的话,当要改变LCD 的 MCU 端口时或者换用别的 MCU 来LCD 时,基本上只需要在这些代码里作一下修改即可。

  关于读 LCD 状态

  而在一般的 LCD 模块当中,还有一个功能同样重要,就是读 LCD 状态;可以通过此操作获取当前 LCD 模块的忙状态以及一些相关的状态信息,当 LCD 模块正处于忙状态时,则不宜对它进行数据的写入或读出操作(有很多较老式的 LCD 控制器规定在忙的状态下时不允许写入或读出数据)。

  所以在很多 LCD 的驱动程序当中,会在寄存器写入、数据写入/读出的操作前加入读取 LCD状态并判别忙状态的代码;这点可以参考网上流传的很多 LCD 驱动程序。不过,对于 MzL02这样的较新出的 LCD 控制器来说,已经对忙状态不是很在乎了,或者说影响已经很小甚至没有了;所以我们在前面的代码当中并没有加入这样的代码。至于有没有必要加读状态判忙的代码,要视具体的 LCD 控制器而定。

  关于的时间要求

的一个非常重要的数据就是类似上图中标出的tAS88之类的时间长短要求,只是上图中并没有标出它们的具体最大最小值要求而已;但在这类的时序接口程序时它们还是非常重要的,当然还要看 MCU 的端口操作速度以及 MCU 的指令执行速度。打个比方,有的时序里就会有要求某些信号的电平保持最小宽度,而如果 MCU 的指令执行速度以及端口操作速度非常快的话,就需要酌情在连续操作端口的代码之间加入适量的延时(通用用空操作来代替,具体多少个多少时长视具体的 MCU 以及 LCD 控制器而定)以保证该信号的脉冲宽度满足要求。

  在本文的所列出的源代码当中,并没有如前所述的为时序的要求而插入空操作或延时处理,因为 MCU 的速度并不是非常快,况且现在的 LCD 控制器的总线速度都挺快的了,没有必要加入而已。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭