基于HD44780的字符LCD至少需要MicroController的6 I/O线以显示数据。因此,它们不适用于PIC12F系列微芯片等低针微控制器。在这个项目中,我将展示如何使用仅3个微控制器的3个引脚来驱动基于HD44780的LCD显示屏。我将用PIC12F683 Microchip演示它。来自微控制器的字符数据和命令串行转移到移位寄存器(74HC595),并将移位寄存器的并行输出馈送到LCD引脚。
约74HC595
74HC595是带有存储寄存器和3状态输出的高速8位序列,串行或并行移出寄存器。

移位寄存器和存储寄存器分别具有单独的时钟,SH_CP和ST_CP。移动寄存器中的数据在SH_CP的正转换上移动,并且在ST_CP的正进行过渡时,移位寄存器的内容将转移到存储寄存器。如果我们将两个时钟都绑在一起,则移位寄存器将始终是存储寄存器之前的一个时钟。当输出启用(OE)较低时,存储寄存器的8位数据将出现在并行输出(Q0-Q7)。
在这个项目中,SH_CP和ST_CP被绑在一起。因此,如果我们想在Q0-Q7处接收一个串行的8位转移到并行形式中,则在传输8次序列数据后需要额外的时钟脉冲,因为绑定了时钟,并且存储寄存器在移位寄存器后面是1个锁定。
基于HD44780的角色LCD
所有基于HD44780的字符LCD显示器均使用14条线连接:8个数据线(D0-D7),3个控制线(RS,E,R/W)和3个电源线(VDD,VSS,VEE)。某些LCD可能具有LED背光,因此它们可能具有额外的连接(通常是两个:LED+和LED-)。

PINOUT_2
提供单个LCD PIN的详细说明不在该项目的范围之内。如果您是LCD的初学者,我建议您首先阅读这两篇文章,从日常实用电子杂志:如何使用智能LCD.
电路图
该项目的硬件部分非常简单。具有挑战性的部分是编写负责串行传输字符数据并命令到74HC595串行的并行偏移寄存器所需的正确操作顺序的驱动器软件。然后将移位寄存器并行输出连接到LCD数据线(D4-D7)和RS控制引脚。这种布置要求3针微控制器在并行LCD显示器上显示字符数据:2个针对74HC595的时钟和数据的引脚,而1引脚用于LCD模块的启用控制(E)。由于数据传输使用4位模式,因此以两个步骤发送任何8位命令或字符数据:首先发送更高的nibble,然后发送较低的nibble。 R/W控制引脚是接地的,因此在这种情况下,从LCD模块中读取的数据或状态没有。

shematic_1
SH_CP(11)和ST_CP(12)时钟输入为75HC595,并将一个微控制器引脚驱动。来自微控制器的序列数据通过DS(14)引脚馈送到移位寄存器。 OE(13)引脚接地,并将重置PIN MR(10)拉高。从74HC595的并行输出Q0-Q3连接到LCD模块的D4-D7引脚。同样,Q4输出用于RS控制引脚。如果LCD模块带有内置背光LED,则可以通过上面显示的LED控制引脚打开或关闭它。将LED引脚拉到逻辑高将打开后灯。
电路在通用原型板上焊接
软件
首先,在2个时钟后,以Q0输出时,将馈送到74HC595的DS引脚的数据(因为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尺寸的字符,显示在和没有光标。write_lcd_data():发送一个字节以在当前光标位置显示。write_lcd_cmd():将命令字节写入LCD模块。write_lcd_nibble():数据或命令字节以两个nibbles发送到LCD模块。因此,此功能例程会注意将nibble数据发送到LCD模块。write_lcd_text():此例程是为了发送一个字符串以在当前光标位置显示。位置_lcd():更改当前光标位置在程序的开头,您需要将data_pin,clk_pin和enable_pin定义到所选的微控制器端口。我将在这里演示如何使用这些驱动程序例程在不同位置显示两个闪烁的字符字符串,Message1和Message2。我将使用PIC12F683微控制器测试我们的串行LCD模块。测试电路如下所示。
注意:我的PIC12F683设置
MCLR禁用了4 MHz内时钟,WDT OFF。
锁定,数据和启用线通过GP1,GP5和GP2端口提供。