单片机与8155的连接图(单片机入门805189S52接入LCD)(1)

前言

显示单元是嵌入式工程和电子产品中最重要的输出设备。16x2 LCD 是最常用的显示单元之一。1602 LCD 表示有两行,每行可显示 16 个字符,每个字符在 LCD 上占用 5X7 矩阵空间。

在本文中,我们将1602 LCD 模块连接到 AT89S52单片机。AT89S52单片机接入LCD 对于新手来说可能看起来相当复杂,但在理解了这个概念之后,它就变得非常简单。这个过程需要一些时间,因为您需要了解 LCD 的 16 个引脚并将其连接到单片机。

认识1602 LCD

1602管脚说明

那么首先让我们了解一下LCD模块的16个引脚。

我们可以将其分为五类,电源引脚、对比引脚、控制引脚、数据引脚和背光引脚。

单片机与8155的连接图(单片机入门805189S52接入LCD)(2)

除了控制管脚外,所有管脚的名称和功能都一目了然,对于控制管脚有必要做一些说明:

RS: RS 是寄存器选择引脚。如果我们要发送一些要在 LCD 上显示的数据,我们需要将其设置为 1。如果我们发送一些命令指令,例如清除屏幕(十六进制代码 01),我们会将其设置为 0。

RW:这是读/写引脚,如果我们要在 LCD 上写入一些数据,我们将其设置为 0。如果我们从 LCD 模块读取,则将其设置为 1。一般设置为 0,因为我们不需要从 LCD 读取数据。

E:使能控制,实质上是相当时钟引脚。对LCD写数据和写命令,把数据或命令送到数据线后,E引脚接收到一个下降沿,才能把数据、命令送入1602。

1602预设命令

1602 LCD 中有一些预设的命令指令,我们在下面的程序中使用它们来准备 LCD(在 lcd_init() 函数中)。下面给出一些重要的命令说明:

单片机与8155的连接图(单片机入门805189S52接入LCD)(3)

测试电路图及说明

单片机与8155的连接图(单片机入门805189S52接入LCD)(4)

LCD与8051单片机接口的电路图如上图所示。

我们将 LCD 的数据引脚 (D0-D7) 连接到单片机的端口 2 (P2_0 – P2_7) 。并将控制引脚RS、RW和E分别连接到单片机的引脚12、13、14(端口3的引脚2、3、4)。

LCD的PIN 2(VDD)和PIN 15(背光电源)连接到电源(5v),PIN 1(VSS)和PIN 16(背光地)接地。

Pin 3(VEE)通过一个10k的可变电阻连接到电压(Vcc)以调节LCD的对比度。可变电阻的中间脚连接到 PIN 3,其他两个腿分别连接到电源和地。

测试程序

正如前面关于命令模式和数据模式所介绍的那样,你可以看到:

在发送命令(函数 lcd_cmd)时,设置为

RS=0(RS=0 命令模式, RS=1 数据模式)

RW=0(RW=0 写模式, RW=1 读模式),

并且通过将 E 设为 1,然后将其设为 0,将高到低脉冲(下降沿)提供给 E .

此外,当向 LCD 发送数据(函数 lcd_data)时,设置为

RS=1,RW=0

并且通过将 E 设为 1 到 0 将高到低脉冲(下降沿)提供给 E。

延时函数 msdelay() 以毫秒为单位的延迟并且在程序中被频繁调用,延时函数的调用是为了让LCD模块有足够的时间来执行内部的操作和命令。

while循环打印字符串,每次调用lcd_data函数来打印一个字符,直到最后一个字符(空终止符-'\0')。

lcd_init() 函数通过预设命令(如上文所述)初始化 LCD。

//1602 LCD 与 8051 微控制器 (AT89S52) 接口的程序 #include<reg51.h> #define display_port P2 //数据引脚连接到微控制器上的端口 2 sbit rs = P3^2; //RS 管脚连接到端口 3 的管脚 2 sbit rw = P3^3; // RW 引脚连接到端口 3 的管脚 3 sbit e = P3^4; //E管脚连接到端口3的管脚4 void msdelay(unsigned int time) // 以毫秒为单位的延迟函数。 { unsigned i,j ; for(i=0;i<time;i ) for(j=0;j<1275;j ); } void lcd_cmd(unsigned char command) //向LCD发送命令指令的函数 { display_port = command; rs = 0; rw=0; e=1; msdelay(1); e=0; } void lcd_data(unsigned char disp_data) //向LCD发送显示数据的函数 { display_port = disp_data; rs = 1; rw=0; e=1; msdelay(1); e=0; } void lcd_init() //初始化LCD { lcd_cmd(0x38); // 用于使用 2 行和 5X7 矩阵的 LCD msdelay(10); lcd_cmd(0x0F); // 打开显示,光标闪烁 msdelay(10); lcd_cmd(0x01); //清屏 msdelay(10); lcd_cmd(0x81); // 将光标移动到第 1 行的位置 1 msdelay(10); } void main() { unsigned char a[15]="Hello World!"; // 14 个字符的字符串,带有一个空终止符。 int i=0; lcd_init(); while(a[i] != '\0') // 直到字符串中的空终止符 { lcd_data(a[i]); i ; msdelay(50); } while(1); }

,