在本指南中,我们将学习如何将LCD与Arduino接口连接,并在LCD屏幕上显示文本字符。我们正在连接16×2 LCD到Arduino,演示电路和代码。让我们开始吧。

一个液晶显示器通常缩写为液晶显示器基本上是一个显示单元建造使用液晶技术. 当我们构建基于现实生活/现实世界电子产品的项目时,我们需要一种媒介/设备来显示输出值和消息。最基本的电子显示形式是7段显示——它有其自身的局限性。下一个最佳选择是液晶显示器有不同的尺寸规格。在市场上所有可用的LCD模块中,最常用的是16×2液晶显示模块它可以在2行中显示32个ASCII字符(1行16个字符)。其他常用的液晶显示器有20×4字符液晶显示器、诺基亚5110液晶模块、128×64图形液晶显示器和2.4英寸TFT触摸屏液晶显示器。

在本文中,我们将通过两个示例来学习如何将lcd与arduino接口——一个是与16×2 LCD模块至Arduino另一个是a的接口20×4液晶模块到Arduino

连接16×2 LCD到Arduino uno

LCD模块是许多基于arduino的嵌入式系统设计中非常重要的一部分。因此,在设计嵌入式系统时,LCD模块与arduino接口的知识是非常必要的。本文的这一部分是关于将Arduino连接到16×2 LCD的。JHD162A是此处使用的LCD模块。JHD162A是一款基于来自日立的HD44780驱动程序.JHD162A有16个引脚,可以在4位模式(仅使用4条数据线)或8位模式(使用所有8条数据线)下工作。这里我们使用的LCD模块在4位模式。首先,我将向您展示如何使用arduino在LCD模块上显示纯文本消息,然后我设计了一个有用的项目使用LCD和arduino - a数字温度计.在深入这个项目的细节之前,让我们先来看看JHD162A LCD模块。

16×2 LCD模块引脚输出图

JHD162A液晶模块有16个引脚,可以在4位模式或8位模式下工作。这里我们使用的LCD模块在4位模式。在深入这个项目的细节之前,让我们先来看看JHD162A LCD模块。下面给出了一个JHD162A LCD引脚图的原理图。

arduino JHD162ALCD模块

下面给出16×2液晶模块各引脚的名称和功能。

Pin1 (Vss):LCD模块的接地引脚。

Pin2 (Vcc):电源到LCD模块(+5V电源给这个引脚)

Pin3(V形):对比调整销。这是通过将10K电位器的两端连接到+5V和接地,然后将滑块引脚连接到VEE引脚来完成的。VEE引脚处的电压定义了对比度。正常设定在0.4至0.9V之间。

Pin4(RS):寄存器选择引脚。JHD162A有两个寄存器,即命令寄存器数据寄存器.逻辑高在RS引脚选择数据寄存器和逻辑低在RS引脚选择命令寄存器。如果我们将RS引脚设为HIGH,并向数据线(DB0到DB7)提供一个输入,这个输入将被视为数据,显示在LCD屏幕上。如果我们使RS引脚低,并向数据线提供一个输入,那么这将被视为一个命令(一个被写入LCD控制器的命令-如定位光标或清除屏幕或滚动)。

平快(R / W):读/写模式。该引脚用于在读取和写入模式之间进行选择。该引脚的逻辑高激活读取模式,该引脚的逻辑低激活写入模式。

Pin6 (E):此引脚是用来启用LCD模块的。该引脚处的高到低信号将使模块生效。

引脚7(DB0)至引脚14(DB7)这些是数据引脚。命令和数据通过这些引脚馈送到LCD模块。

引脚15(LED+):背光LED的阳极。当工作在5V, 560欧姆电阻应该串联到这个引脚。在基于arduino的项目中,背光源LED可以从arduino板上的3.3V电源供电。

引脚16(LED-):背光LED的阴极。

了解更多液晶模块JHD162A及其引脚功能,请阅读本文:16×2液晶显示器与8051单片机的接口. 将LCD连接到arduino以显示文本消息的电路图如下所示。

电路图-Arduino至16×2 LCD模块

接口LCD和arduinoLCD模块的RS引脚连接到arduino的数字引脚12。LCD的R/W引脚接地。LCD模块的启用引脚连接到arduino的数字引脚11。在本项目中LCD模块和arduino以4位模式连接. 这意味着仅使用LCD的四条数字输入线(DB4至DB7)。这种方法非常简单,需要较少的连接,几乎可以充分利用LCD模块的潜力。数字线DB4、DB5、DB6和DB7连接到Arduino的数字管脚5、4、3和2。10K电位计用于调整显示器的对比度。560欧姆电阻器R1限制通过背光LED的电流。arduino可以通过板上提供的外部电源插座供电+电路其他部分所需的5V电压可从arduino板上的5V电源分接。arduino也可以通过USB端口从PC上供电。将LCD连接到arduino的完整程序如下所示。

程序- Arduino到LCD
#include LiquidCrystal lcd(12,11,5,4,3,2);//设置接口引脚void setup() {lcd。开始(16日2);//初始化16x2的LCD} void loop() {LCD . setcursor (0,0);//设置光标在第0行第0列lcd。打印(“16 x2液晶模块”);//打印16x2 LCD MODULE LCD . setcursor (2,1);//设置光标在第1行第2列lcd。打印(“HELLO WORLD”);//打印HELLO WORLD}

关于这个项目。

为了方便Arduino和LCD模块之间的通信,我们使用了Arduino自带的库< LiquidCrystal.h >-是为使用日立的LCD模块编写的HD44780芯片组(或兼容芯片组)。这个库可以处理4位模式和8位模式的LCD布线。

请参阅——LiquidCrystal Library的文档-在你继续下去之前!

库“LiquidCrystal.h”用于Arduino板轻松控制LCD模块,在库内定义的内置方法的帮助下,例如,数据字符串可以通过调用一个方法打印在LCD模块上lcd.print(). 如果要在第1行打印“Hello World”,请从第3列开始;首先使用方法将光标设置在所需位置lcd.setCursor(1,3)然后编写命令打印字符为液晶显示器。打印(“Hello World”);——明白了吗?这个库可以与Arduino IDE一起使用(因为它是预先安装的标准库).任何库都可以通过“导入库"在"素描选项卡在主菜单栏。h库为几乎所有的应用程序提供了函数/方法,比如打印字符串、设置光标、初始化LCD、滚动显示、自动滚动、清除LCD、闪烁光标等。

项目的其他重要方面

LiquidCrystal液晶()–是用于声明其类型的变量的构造函数。这里的“lcd”是使用构造函数声明的变量,用于调用库liquidcystal.h中定义的方法(例如-lcd.print();lcd.setCursor()和其他方法)

lcd.begin ()–被调用以初始化lcd屏幕,并将lcd屏幕的尺寸(列、行)作为调用方法的参数传递。

使用Arduino滚动LCD屏幕的程序。

这里显示了一个简单的程序,用于使用arduino在LCD屏幕上滚动文本信息。这是用"滚动()“在Liquidcystal.h库中定义的方法。例如“方法”lcd.scrollDisplayRight ()“将显示屏向右滚动,然后选择方法”lcd.scrollDisplayLeft ()'将向左滚动显示。“for”循环用于选择一次滚动的位置数。在如下所示的程序中,由于要显示的文本相对较长,因此选择为2。对于较短的文本,一次必须滚动更多的位置以获得平滑的显示。

#包括int pos=0;//液晶lcd(12、11、5、4、3、2)的光标位置保持变量;void setup(){lcd.begin(16,2);//初始化16x2 lcd.print(“16x2 lcd模块&ARDUINO-UNO”);//要显示的文本}void loop(){for(pos=0;pos<2;pos++){lcd.scrolldDisplayLeft();//按两个位置向左滚动显示}延迟(800);//设置显示器移动的速度}

注:-本接口教程足以学习其他尺寸的线LCD屏幕(如8×1、8×2、16×1、16×3、16×4、20×4、20×2、40×2、40×4等)的接口,这些屏幕是使用日立HD44780芯片组。所有的line LCD屏幕(基于HD44780芯片组)的引脚配置是非常相同的。这意味着相同的电路图足以连接其他尺寸的lcd屏幕到arduino。我们在下面的章节中对此做了更多的解释20×4 LCD至Arduino接口

数字温度计与LCD显示使用arduino。

这只是LCD与Arduino接口的一个实际实现。一个简单的数字温度计使用arduino和3位7段显示已经发表在这里。你可以在这里找到那篇文章:arduino数字温度计.在尝试LCD版本之前请阅读本文。LM35是本项目使用的温度传感器。它是一种三端线性模拟温度传感器。温度每升高1℃,LM35输出电压增加10mV,范围为-55℃~ +155℃。arduino液晶温度计的电路图如下图所示。

电路图:液晶温度计。

使用arduino的液晶温度计LM35温度传感器接arduino的模拟输入引脚。LM35的Vcc引脚(引脚1)接arduino的A0引脚LM35输出引脚(引脚2)接arduino的A1引脚LM35的GND引脚(引脚3)接arduino的A2引脚。使用arduino实现的液晶温度计的完整程序如下。

程序:液晶温度计。
#include  int vcc=A0;int传感器= A1;int接地= A2;临时浮动;浮动tempf;液晶显示器(12,11,5,4,3,2);void setup() {pinMode(vcc,OUTPUT);pinMode(传感器、输入);pinMode(接地、输出);digitalWrite (vcc,高); // Vcc for LM35 digitalWrite(gnd,LOW); // Ground for LM35 lcd.begin(16, 2); // initializes the 16x2 LCD lcd.setCursor(2,0); // sets the cursor at column 2 row 0 lcd.print("TEMPERATURE"); // prints temperature } void loop() { temp=analogRead(sensor); // reads the sensor output temp=temp*5; // converts the sensor reading to temperature temp=temp/10; // adds the decimal point tempf=(temp*1.8)+32; // converts to Fahrenheit lcd.setCursor(0,1); // sets cursor at column 0 row 1 lcd.print(temp); // prints temperature in degree Celsius lcd.print((char)223); // prints degree sign lcd.print("C"); // prints letter c lcd.setCursor(8,1); // sets cursor at column 8 row 1 lcd.print(tempf); // prints temperature in degree Fahrenheit lcd.print((char)223); // prints degree sign lcd.print("F"); // prints letter F delay(1000); // 1 second delay }

好吧!我们已经看到了如何接口16×2液晶模块到Arduino,我们也学习了如何构建一个实际的应用程序,如数字温度计使用Arduino和LCD模块。现在让我们继续连接20×4液晶模块与Arduino!

Arduino与20×4液晶显示模块的接口

我们首先分析20×4液晶模块的引脚图,如下图所示。

引脚输出图-LCD模块

20×4液晶模块引脚图与16×2液晶模块引脚图非常相似。这与引脚的数量,引脚的顺序和引脚的用途是一样的。所以接口电路图也和Arduino的16×2 LCD模块一样。

注:-在电路图中,您可能需要做的唯一更改是将限流电阻连接到引脚15的背光LED上,并将电位器设置连接到VEE (16×2和20×4模块的对比度水平可能会随着选择的电位器值而变化)。其余的都非常类似于将16×2 LCD接口到Arduino。

电路图-LCD至Arduino

由于使用日立驱动程序的16×2、16×1、20×4、20×2、40×2等许多流行的线式LCD模块的引脚输出结构相似,因此将这些线式LCD模块连接到Arduino的电路图仍然很常见。为了将20×4 LCD连接到Arduino,我们可以使用与将16×2 LCD连接到Arduino完全相同的电路图。

注:-背光LED及其当前要求可能因不同类型的LCD模块而异。使用560欧姆限流电阻器的16×2 LCD的亮度与20×4 LCD(或其他变体,如20×2或40×2或16×1等)的亮度不同。因此,您必须调整限流电阻器的值,以满足您所需的亮度。您可能需要做的另一个更改是在V形引脚连接电位计设置,它决定LCD的对比度。16×2 LCD与特定pot设置的对比度可能与20×4 LCD或其他线LCD类型(例如16×1、20×3或40×2)不同

因此,除了上面提到的“注释”之外,电路图中不需要做任何更改。让我们进入编码部分。这些命令与我们为16×2 LCD编写的命令非常相似。唯一的区别是在arduino程序的setup()部分,我们声明了LCD模块的列和行(行)的数量。这个声明使得程序能够理解硬件中使用的LCD模块的类型(模块的列数和行数)。

代码- LCD到Arduino
#include  LiquidCrystal lcd(12,11,5,4,3,2);//设置接口引脚void setup() {lcd。开始(20,4);//初始化20x4的LCD} void loop() {LCD . setcursor (0,0);//将光标设置为line 0 column 0 lcd。打印(“20 x4液晶模块”);//打印字符- 20x4 LCD MODULE LCD . setcursor (5,3);//设置光标在第3行第5列lcd。打印(“HELLO WORLD”);//打印HELLO WORLD}

可以我们已经完成了接口教程,并学习了如何将arduino接口到LCD。如果您有任何疑问或在接口时遇到任何问题,请在评论部分询问。同时,我们有以下教程-您可能会喜欢阅读。

接口Arduino到7段显示学习如何将7段显示接口到arduino,并举例说明1位7段显示(共阴极和阳极版本)和4位7段显示(共阴极和阳极版本)。

液晶显示器与8051的接口–学习如何将LCD模块连接到8051微控制器,并在LCD屏幕上显示文字信息。

作者

34评论

  1. malavika

    为什么使用560 nd 10k等电阻器?请解释一下它背后的设计?

  2. 迈克·墨菲

    出色的故障,我相信许多读者会同意,这是我们对液晶显示器最好的解释之一,我们已经读过,所以非常感谢花了这么多的时间来解释这么清楚。
    快速提问–当使用i2c时,lcd与Arduino之间的距离如何,且仍能正常工作?我想从Arduino远程安装显示器,因为我需要使用许多输入–驱动器是否超过1米?非常感谢

  3. Ushan

    这是非常有用和容易理解的..tnx很多。
    你能不能做一个arduino项目的帖子,与Lcd显示和矩阵键盘并行??

  4. 吉姆

    这不是一个接口液晶与Arduino的教程,这是一个接口日立HD44780液晶芯片组与Arduino!

    这两件事非常不同。请了解两者的区别,以后多考虑一下文章的标题,这样标题就能反映出文章的真实内容。

  5. 达尔梅什

    我是Arduino Uno的初学者。我用JHD 162A为arduino Uno尽了最大努力。恕我直言,斯克雷恩身上什么也没有。
    我试过电位器调谐
    [2]检查所有电路
    [3] 程序已编译并成功传输到Arduino uno板。

    请帮助我解决这个问题。

  6. shyam霁古普塔

    谢谢你欣赏arduino

  7. zul

    为什么这么多编码?我不明白

  8. 阿什·沙伦

    我的LCD上下都只显示前8个字符。我应该做什么来消除这个问题和我的led显示所有的16个字符在上和下部分??

  9. 罗翰

    嗨! !
    我想用arduino和蓝牙模块(HC-05)制作无线公告板。
    有人能告诉我这个程序有什么错误吗?我无法接收LCD上的数据。提前谢谢。

    # include
    # include

    SoftwareSerial BTSerial(2、3);/ / rx, tx

    char cmd_arr [40];
    液晶显示器(4,5,6,8,9,10);
    //*************************************************
    空白serial_get_command ()

    int我;
    char inchar = 0;
    int cmd_count=0;
    (我= 0,0)

    inchar = Serial.read ();

    如果(英寸=“&&cmd_计数0)

    inchar = Serial.read ();
    cmd_arr[cmd_count++]=英寸;
    cmd_arr[cmd_count]='';


    如果(inchar = = ' > ')

    cmd_arr[cmd_count-1]='';
    系列。print(" Cmd received: ");
    并同时“OK”);
    lcd.clear ();
    液晶显示器。setCursor (0,0);
    (我= 0;< = 15,我+ +){
    lcd.print (cmd_arr[我]);

    液晶显示器。setCursor (0,1);
    (我= 16;< = 31;+ +){
    lcd.print (cmd_arr[我]);

    / / serial_process_command ();




    //*************************************************
    无效的设置()

    BTSerial.begin (9600);
    Serial.begin (9600);
    Serial.println(“系统已启动!”);
    液晶显示器。开始(16日2);
    lcd.打印(“基于蓝牙”);
    液晶显示器。setCursor (0,1);
    液晶显示器。打印(“公告栏”);
    延迟(2500);
    lcd.clear ();


    //*************************************************
    void循环()

    serial_get_command ();


    //*************************************************

  10. 瓦吉

    我如何接口21英寸LCD arduino ??或者甚至是PI ?

  11. 克里斯托弗·曼

    伟大的教程与例子!省了我很多时间去研究规格表。

  12. 嗨,我是你教程的初学者。你能告诉我你在写程序时使用的是什么编程语言吗

  13. Saptarshi Das

    我的液晶显示器正在通电。我已经彻底检查了所有的连接。完全正确。但是液晶显示器没有显示任何字符。

    • 乔乔

      这可能是LCD对比度的问题。调整电位器即可解决此问题。

      • Nikhil

        我们正面临着同样的问题,LCD显示,即使LCD显示,也不显示任何字符

    • 行动中

      检查已声明的arduino引脚和连接到LCD的引脚

  14. 普拉文·库马尔D

    我的问题是,我的lcd正在充电,但它不显示数据,我已经在代码中,请金德利任何人帮助我出来

    • 乔乔

      @Praveen–请调整电位计。这可能是一个对比问题。还要确保数据线已正确连接到Arduino。

      • j·彼得拉吉

        请让我知道–当启用Enable引脚(E)时,显示器会发生什么情况?

        • 乔乔

          LCD模块具有读取模式和写入模式。启用引脚用于在这两种模式之间切换。默认情况下,当我们使用LCD模块显示字符时,我们将数据写入LCD。

  15. 阿杰

    您好,先生/女士,
    我想接口的录音和回放模块(apr33a3)与奥杜诺和编程。你能帮我吗?

    • 乔乔

      @阿杰——我们会的!很快!请下周查看该网站。

      • 萨默什·伯库勒

        请将使用aurdiuno的语音记录器(apr33a3)/播放模块和GPS接口程序发送给我,以便我可以在16*2 LCD上显示

        • 乔乔

          @somesh -现在我们还没有使用APR33a3。我们很快会就此发表一篇文章。

  16. Purushotham Baskarla

    非常感谢这些arduino项目继续发布更多。你可以使用xbee发布有关arduino家庭自动化的项目吗?

    • 乔乔

      @Purushotham -谢谢你的评论。我们正在做更多的Arduino项目

  17. 糙斑哈罗德

    我需要示意图,我正在尝试通过光纤电缆将四位二进制数据发送到LCD,使用arduino uno作为数据输入源。

  18. 阿披舍克帕乔里

    我想知道。数字密码锁的应用…如何。它被使用。和在哪儿。应用它的字段…以及如何应用它。

    请告诉我。一切必要的。关于这个
    项目
    请留下一张纸条

    谢谢你…

  19. 是一家surti

    感谢你们为这些伟大的赛道所做的努力,给你们的赛道留下了深刻的印象…

  20. 巴尔温德

    感谢今日电路团队为我们提供更好的电路指南和项目。爱你所有团队。请再次发布关于Rasbery pi板和简单项目的信息。tx。

  21. ElektrikBilim

    非常感谢这些电子电路。

Baidu