本文将讨论基本 16x2 LCD 模块与 MCU 的连接细节。
本文将介绍基本 16×2 LCD 模块的引脚排列。然后,将讨论与HD44780 LCD 控制器/驱动器芯片兼容的常见 LCD 模块的一些重要说明。,本文将给出一个 C 代码示例,用于连接 AVR ATMEGA32 微控制器与 16×2 LCD。
1602A是一款 16 字符、2 行显示器,与当今使用的许多其他16x2 显示器类似。每个字符以5列×8行点阵或5列×10行点阵显示。应正确控制这些像素,以便我们可以显示所需的字符。使用微控制器直接控制所有这些像素并不容易,这就是为什么我们通常使用带有控制器/驱动器芯片的 LCD 模块,以方便将 LCD 连接到处理器。常见的 LCD 驱动器是HD44780。这些 LCD 模块的引脚排列通常如下图 1 所示。
GND 和Vcc (+5V) 引脚是电源引脚。 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 引脚指定我们是向模块写入 (R/W=0) 还是从模块读取 (R/W=1)。
E 引脚(“启用”)启动读/写操作,将在下一节中讨论。
虽然我们既可以从数据总线写入也可以读取,但写入操作更为常见。因此,在本节中,我们将研究写入操作的时序图,如下图 2 所示。表 1 给出了不同参数的定义和期望值。
时序图显示,我们应该将 RS 和 R/W 引脚设置为适当的值,并等待 t AS(应大于 40 ns),然后再将 E 引脚设置为逻辑高电平。根据该表,E 信号的宽度 (PW EH ) 应大于 230 ns。
然后,E 信号应具有开始写入操作的从高到低的沿。请注意,在该边沿之前的 t DSW数据必须有效。另外,在E的下降沿之后,控制信号和数据在图中t AH和t H表示的一段时间内不应改变。另一个重要问题是“启用周期时间”,它应大于 500 ns。这表明我们应该等待一段时间才能开始进行下读或写操作。
总而言之,E 上的从高到低的转换启动数据读取或写入,但必须满足某些时序条件。将 LCD 模块与 MCU 连接时,我们必须考虑这些因素。
您可以在本数据表的第 24 页上找到 HD44780 兼容 LCD 模块的完整说明列表。在这里,我们将仅使用其中一些指令来执行一些基本操作。
清晰显示
该指令清除显示。您必须将 RS 和 R/W 设置为逻辑低电平,并执行写入操作,将十六进制值 0x01 应用到数据总线。此外,数据表指出“清除显示”命令“在地址计数器中设置 DDRAM 地址 0”。这意味着什么?
显示数据 RAM (DDRAM) 是存储我们发送到 LCD 模块的字符的 ASCII 代码的 RAM。 DDRAM 多可存储 80 个字符(容量为 80×8 位)。然而,LCD 上仅显示这 80 个字符中的一部分。例如,在 16×2 LCD 的情况下,仅显示这些存储位置中的 32 个。显示的DDRAM地址和LCD位置之间的关系如图4所示。
根据图4,如果我们将一个特定字符写入DDRAM地址0x00,它将显示在上面一行的个单元格中。同样,如果我们向地址 0x40 写入一个字符,该字符将出现在下一行的个单元格中。
要访问 DDRAM 的特定地址,我们可以将所需的地址写入地址计数器 (AC)。此外,AC 还确定通过写入操作输入的字符在 LCD 上的位置。
请注意,LCD 支持移位操作,可以更改图 4 中所示的关系。例如,对图 4 的默认状态应用左移将导致图 5。有关更多信息,请参阅数据表。
现在您已经熟悉了 DDRAM 和 AC,“清除显示”命令的描述对您来说应该有意义了。 “清除显示”命令“在地址计数器中设置 DDRAM 地址 0”,因此,它将把光标返回到起始位置(上一行的个单元格)。
回家
图 6 给出了该命令的代码及其描述。
该命令还将光标返回到原始位置,并将显示返回到其原始状态(如果发生移动)。对于这个命令,DB0 是一个无关命令。
输入模式设置
该命令的详细信息如图 7 所示。
当“I/D”为1时,写入操作后光标位置加1(在显示屏上向右移动)。当“I/D”为0时,光标位置减1(向左移动)。
S 位指定是否移位显示(移位会更改 LCD 上显示的 DDRAM 地址)。当S为0时,显示不移位。对于移位选项(当S=1时),请参考数据表。
在许多情况下,我们希望在写入操作后光标位置增加,同时显示保持静止(不使用移位选项)。对于此类应用,DB7-DB0 的命令代码将为十六进制值 0x06。
显示开/关控制
下面给出了该命令的详细信息。
通过将D位设置为1或0,我们可以分别打开和关闭显示。类似地,C 位可用于打开/关闭光标。 B 控制光标位置的闪烁能力。因此,如果我们将十六进制值0x0C作为指令写入DB7-DB0,则LCD将打开并且光标将关闭。
功能设定
下图给出了“功能设置”命令的详细信息。
DL 位指定 LCD 模块的数据长度。如果 DL=1,则数据在数据总线(DB7 至 DB0)上作为 8 位字发送和接收。当DL=0时,以4位长度(DB7至DB4)发送和接收数据。为了简单起见,我们将在本文中使用 8 位选项。
N 位指定显示行数。对于单行显示,N 应为 0。对于两行及以上,N 应为 1。
“F”决定字符字体,常见的是 0。
因此,当使用接收和发送 8 位长度数据的 16×2 LCD 时,DB7-DB0 的“功能集”代码将是十六进制值 0x38。
设置显存地址
该指令设置 DDRAM 的地址。它可用于在 LCD 的特定单元中写入字符。例如,发送十六进制值0x80到数据总线将使光标移动到上一行的个单元格。
现在,我们将使用上述命令来操作 16×2 LCD。下表总结了上面讨论的命令。
现在,我们将编写一些函数来将 16×2 LCD 连接到 ATMEGA32。假设如图11所示,端口A连接到LCD数据总线,端口B的前三个引脚用于控制LCD的RS、RW和E引脚。请注意,图 11 中未显示 VSS、VDD 和 VEE 的连接。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。