如何与MCU接口16×2 LCD模块

时间:2025-03-03
  模块引脚

  1602a是一个16个字符,2行显示屏,类似于当今使用的许多其他16x2显示器。每个字符均显示在5列×8行点矩阵或5列×10行点矩阵中。这些像素应正确控制,以便我们可以显示所需的字符。直接使用微控制器直接控制所有这些像素并不容易,这就是为什么我们通常使用具有控制器/驱动程序芯片的LCD模块来促进将LCD连接到处理器。常见的LCD驱动器是HD44780。这些LCD模块的引脚通常如下图1所示。

  图1。16 ×2 LCD模块的常见引脚。图像由AAC提供。
  GND和VCC(+5 V)引脚是电源引脚。 VEE引脚用于调整显示对比度。我们可以使用电位计将VEE连接到+5 V以下的合适正电压。LED +和LED-插脚用于打开显示背光(分别将它们连接到+5 V和接地)。
  RS引脚是LCD控制器的寄存器选择器引脚。 HD44780有两个寄存器:指令寄存器(IR)和数据寄存器(DR)。 RS引脚是一个控制引脚,指定IR或DR是否应连接到数据总线(DB0到DB7引脚)。当RS较低时,选择IR并将DB7-DB0视为指令代码。例如,指令代码可以表示“显示清晰”命令。当RS高时,选择DR并将DB7-DB0视为数据。在这种情况下,db7-db0可以是表示诸如“ a”之类的字符的代码。
  R/W PIN指定我们是写入模块(R/W = 0)还是从中读取(R/W = 1)。
  E PIN(用于“启用”)启动了读/写操作,将在下一部分中讨论。
  写操作的定时图

  尽管我们既可以从数据总线上写和阅读,却更常见。这就是为什么在本节中,我们将研究写操作的定时图,如下图2所示。表1给出了不同参数和预期值的定义。

  图2。写操作的定时图。图片由日立提供。

  表1由日立提供。
  定时图表明,我们应该将RS和R/W引脚设置为适当的值,并在将E PIN设置为逻辑高之前等待T (应大于40 ns)。根据表,E信号应具有大于230 ns的宽度(PW EH )。
  然后,E信号应具有启动写入操作的高低边缘。请注意,在此之前,数据必须有效。此外,在E的落下边缘下降之后,图中的控制信号和数据不应在图中用T AH和T H表示的时间变化。另一个重要的问题是“启用周期时间”,该时间应大于500 ns。这表明我们应该等待一段时间,然后开始进行下一个读取或写入操作。
  总而言之,E对E开始读取或写入数据,但必须满足某些时机条件。将LCD模块与MCU接口时,我们必须考虑这些注意事项。
  重要说明
  您可以在此数据表的第24页上找到与HD44780兼容的LCD模块的完整列表。在这里,我们只使用其中一些说明来执行一些基本操作。
  清除显示

  该指令清除了显示。您必须将RS和R/W设置为逻辑低,并执行将十六进制值0x01应用于数据总线的写操作。此外,数据表指出“清除显示”命令“在地址计数器中设置DDRAM地址0”。这是什么意思?

  图3。由日立提供。

  显示数据RAM(DDRAM)是一个RAM,可存储我们发送到LCD模块的字符的ASCII代码。 DDRAM多可以存储80个字符(其容量为80×8位)。但是,在LCD上只显示了这80个字符中的一些。例如,在16×2 LCD的情况下,仅显示这些内存位置中的32个。显示的DDRAM地址与LCD位置之间的关系如图4所示。

  图4。由日立提供。
  根据图4,如果我们为DDRAM地址0x00编写特定字符,它将显示在上线的个单元格中。同样,如果我们编写一个字符以地址为0x40,则将出现在下行的个单元格中。
  要转到DDRAM的特定地址,我们可以将所需的地址写入地址计数器(AC)。此外,AC确定了写操作输入的字符在LCD上的位置。
  请注意,LCD支持可以更改图4中显示的关系的移位操作。例如,应用于图4的默认状态的左移位将导致图5。有关更多信息,请参阅数据表。
  图4。由日立提供 。
  现在您已经熟悉DDRAM和AC,“清除显示”命令的描述对您来说应该很有意义。因此,“清除显示”命令“在地址计数器中设置了DDRAM地址0”,因此,它将将光标返回到HOME位置(上线的个单元格)。
  回家

  图6给出了此命令及其描述的代码。

  图6。由日立提供。
  该命令还将光标带回家庭位置,并在移动时将显示器返回其原始状态。对于此命令,DB0是一个不保守的。
  进入模式集

  此命令的详细信息在图7中给出。

  图7。由日立提供。
  当“ I/D”为1时,在写操作后,光标位置会增加一个(它向右移动)。当“ I/D”为0时,光标位置会被一个减小(向左移动)。
  S位指定是否移动显示(移动更改LCD上显示的DDRAM地址)。当s为0时,显示不会移动。对于移位选项(当s = 1时),请参阅数据表。
  在许多情况下,我们希望光标位置在写入操作之后递增,而显示屏仍保持静止(不利用换档选项)。对于此类应用,DB7-DB0的命令代码将是十六进制值0x06。
  显示开/关控制

  此命令的详细信息如下。

  图8。由日立提供。
  通过将D位设置为1或0,我们可以分别打开和关闭显示。同样,C位可用于打开/关闭光标。 B控制光标位置的闪烁能力。因此,如果我们将十六进制值0x0c写入DB7-DB0作为指令,则LCD将打开,光标将关闭。
  功能集
  下图给出了“函数集”命令的详细信息。
  图9。由日立提供。
  DL位指定LCD模块的数据长度。如果DL = 1,则在数据总线上以8位单词的形式发送数据(DB7至DB0)。当DL = 0时,数据将以4位长度(DB7至DB4)发送并接收。为了保持简单,我们将在本文中使用8位选项。
  n位指定显示行的数量。对于单行显示,n应该为0。对于两行及以上,n应该为1。
  “ F”确定字符字体,通常是0。
  因此,当使用以8位长度接收和发送数据的16×2 LCD时,DB7-DB0的“功能集”代码将是十六进制值0x38。
  设置DDRAM地址

  该指令设置了DDRAM的地址。它可用于在LCD的特定单元格中写一个字符。例如,将十六进制值0x80发送到数据总线将使光标可以移动到上排的个单元格。

  图10。由日立提供。
  现在,我们将使用上述命令操作16×2 LCD。下表总结了上面讨论的命令。

  表2

  将LCD与AVR接口
  现在,我们将编写一些功能将16×2 LCD连接到Atmega32。假设,如图11所示,端口A连接到LCD数据总线,并且端口B的前三个引脚用于控制LCD的RS,RW和E引脚。请注意,VSS,VDD和VEE的连接未显示在图11中。
  图11


上一篇:RF设计基础知识 - 传输线的引入
下一篇:如何模拟相锁环

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料