ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-06 12:35:12  阅读:195  来源: 互联网

标签:8051 RW 引脚 RS 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有