基于 HD44780 的字符 LCD 需要微控制器至少 6 条 I/O 线来显示数据。因此,它们不适合像 PIC12F 系列微芯片这样的低引脚微控制器。在这个项目中,我将展示如何仅使用微控制器的 3 个引脚来驱动基于 HD44780 的 LCD 显示器。我将用 PIC12F683 微芯片来演示它。来自微控制器的字符数据和命令被串行传输到移位寄存器(74HC595),并且移位寄存器的并行输出被馈送到LCD引脚。
关于74HC595
74HC595是一款高速8位串行输入、串行或并行输出移位寄存器,具有存储寄存器和三态输出。
引脚分配_1
移位寄存器和存储寄存器具有独立的时钟,分别为SH_CP和ST_CP。移位寄存器中的数据在 SH_CP 正向跳变时移位,移位寄存器的内容将在 ST_CP 正向跳变时传输到存储寄存器。如果我们将两个时钟连接在一起,移位寄存器将始终比存储寄存器早一个时钟。当输出使能(OE)为低电平时,存储寄存器的 8 位数据将出现在并行输出(Q0-Q7)处。
在此项目中,SH_CP 和 ST_CP 捆绑在一起。因此,如果我们想在Q0-Q7处接收串行传输的8位并行形式,则在传输串行数据的第8位后需要一个额外的时钟脉冲,因为时钟是捆绑的并且存储寄存器是1个时钟移位寄存器后面。
基于HD44780的字符液晶屏
所有基于 HD44780 的字符 LCD 显示器均使用 14 条线连接:8 条数据线 (D0-D7)、3 条控制线(RS、E、R/W)和 3 条电源线(Vdd、Vss、Vee)。某些 LCD 可能具有 LED 背光,因此它们可能具有额外的连接(通常是两个:LED+ 和 LED-)。
引脚排列_2
电路图
该项目的硬件部分相当简单。具有挑战性的部分是编写驱动程序软件,该软件负责将字符数据和命令串行传输到 74HC595 串行输入并行输出移位寄存器所需的正确操作序列。移位寄存器并行输出然后连接到 LCD 数据线 (D4-D7) 和 RS 控制引脚。这种布置需要微控制器的 3 个引脚在并行 LCD 显示器上显示字符数据:2 个引脚用于向 74HC595 提供时钟和数据,1 个引脚用于 LCD 模块的使能控制 (E) 引脚。由于数据传输采用 4 位模式,因此任何 8 位命令或字符数据都分两步发送:先发送高半字节,然后发送低半字节。 R/W 控制引脚接地,因此在这种情况下无法从 LCD 模块读取数据或状态。
75HC595 的 SH_CP (11) 和 ST_CP (12) 时钟输入连接在一起,并由一个微控制器引脚驱动。来自微控制器的串行数据通过 DS (14) 引脚馈送到移位寄存器。 OE(13)引脚接地,复位引脚MR(10)拉高。 74HC595 的并行输出 Q0-Q3 连接到 LCD 模块的 D4-D7 引脚。同样,Q4 输出用作 RS 控制引脚。如果 LCD 模块带有内置背光 LED,则可以通过上面所示的 LED 控制引脚简单地打开或关闭它。将 LED 引脚拉至逻辑高电平将打开背光。
电路焊接在通用原型板上
首先,2 个时钟后,馈送到 74HC595 DS 引脚的一位数据出现在 Q0 输出处(因为 SH_CP 和 ST_CP 相连)。因此,发送 4 位数据 (D4-D7) 和 RS 信号需要 6 个时钟脉冲,直到它们分别出现在 Q0-Q4 输出处。当LCD模块打开时,它被初始化为8位模式。应发送多个初始化命令以在 4 位模式下操作 LCD 模块。这里讨论的所有驱动程序例程都是用 mikroC 编译器编写的。它们仅适用于 16×2 LCD 模块。用户可以修改 Initialize_LCD() 例程内的初始化操作以考虑其他 LCD 配置。驱动程序及其功能如下所述。
Initialize_LCD() :初始化 LCD 模块,使其工作为 4 位模式、2 行显示、5×7 大小字符、显示 ON、无光标。Write_LCD_Data() :发送一个字符字节以在当前光标位置显示。Write_LCD_Cmd() :向 LCD 模块写入命令字节。Write_LCD_Nibble() :数据或命令字节作为两个半字节发送到 LCD 模块。因此,该函数例程负责将半字节数据发送到 LCD 模块。Write_LCD_Text() :该例程用于发送字符串以在当前光标位置显示。Position_LCD() :改变当前光标位置
在程序开始时,您需要为所选的微控制器端口定义 Data_Pin、Clk_Pin 和 Enable_Pin。我将在这里演示如何使用这些驱动程序例程在不同位置显示两个闪烁的字符串 Message1 和 Message2。我将使用 PIC12F683 微控制器测试我们的串行 LCD 模块。测试电路如下图所示。
锁定、数据和启用线路通过 GP1、GP5 和 GP2 端口提供服务。