其他分享
首页 > 其他分享> > 单片机入门之8051接入1602 LCD 显示字符

单片机入门之8051接入1602 LCD 显示字符

作者:互联网

前言

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

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

认识1602 LCD

1602管脚说明

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

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

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

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

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

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

1602预设命令

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

测试电路图及说明

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);

}

标签:8051,RW,引脚,RS,1602,显示字符,LCD,管脚
来源: https://blog.csdn.net/m0_67034740/article/details/123308276