LCD1602液晶显示屏是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏,控制驱动主电路及其扩展驱动电路,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。
字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。
STEM KIT学习板用的LCD1602液晶显示屏,可以显示16x2个字符。(注意:一个汉字将占用2个字符宽度,但是显示汉字需要字库,在没有字库支持的情况下只能显示英文。)
如果我们需要知道电位器的值,可以用LCD显示屏来显示出来。只需简单的配置,就能让LCD显示字符。

# 部署

1.把滑块电位器slider1接到OSEPP UNO的A0引脚。
2.LCD的接口RS-D7分别连接到OSEPP UNO的2~7号引脚。

# 程序搭建

  • oseppBlock 积木知识

LCD积木,定义显示屏的名称引脚号。
对应的端口名称要与主板的端口名称对应,引脚号码可以更改,但连接时要对应名称连接。

LCD清屏积木,就是把屏幕所有的显示内容都清除。类似于我们要在黑板写字时,把黑板都擦干净。

显示定位积木,就是指定接下来要显示字符的起始位置。LCD有162行对应的是0-15列,0-1行。如果从第一行第一列显示就是0,0, 第二行第一列显示就是0,1

LCD要显示的内容,这里显示的是字符"hello!",如果要显示滑块电位器的值,就把电位器的电压值图标拖入到框内。

  • oseppBlock程序

  • Arduino程序

    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd1(2, 3, 4, 5, 6, 7); //定义LCD的引脚
    
    void setup()
    {
        lcd1.begin(16, 2); //LCD初始化
        //slider1
        pinMode(A0, INPUT); //定义滑块电位器连接的引脚为输入模式
    }
    
    void loop()
    {
        lcd1.clear();               //清屏
        lcd1.setCursor(0, 0);       //设置光标位置在0行,0列(左上角)
        lcd1.print(analogRead(A0)); //显示滑块电位器的值
        delay(1000);                //延时1000毫秒
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

# 运行结果

LCD的显示屏上面会显示滑块电位器的值,数值在0-1023之间。调节滑块电位器,这个数值也会跟着变化。我们在程序后面加了一个延时1秒,延时这1秒内程序会暂停,所以我们调节起来会感觉反应很慢。如果显示不清晰,可以用螺丝刀调节LCD接线端子旁边的电位器,直到显示字符清晰。

# 操作视频

# 解析

此时LCD每秒就会刷新一次滑块的电压值。我们看到LCD显示的是0-1023的数字,就是Arduino把从A0读取到的电压值0-5V映射成0-1023来显示。如果要显示成0-5V的电压,需要通过程序计算,下面展示两种计算方法:

  • 方法一:
    1023的值表示5000mV,每个单位代表5000/1023mV(即4.89mV
    analogRead(A0) 的值乘以每个单位(即4.89mV)就是实际的毫伏值, 整除1000舍掉后面的小数点就是整伏数,后面用模除算出的余数就是mV部分。

  • oseppBlock程序

  • Arduino程序

#include <LiquidCrystal.h>

LiquidCrystal lcd1(2, 3, 4, 5, 6, 7); //定义LCD的引脚

void setup()
{
    lcd1.begin(16, 2); //LCD初始化
    //slider1
    pinMode(A0, INPUT); //定义滑块电位器连接的引脚为输入模式
}

void loop()
{
    lcd1.clear();                                        //清屏
    lcd1.setCursor(0, 0);                                //显示光标定位
    lcd1.print((analogRead(A0) * (5000 / 1023)) / 1000); //计算整数部分
    lcd1.print(".");                                     //添加一个小数点
    lcd1.print((analogRead(A0) * (5000 / 1023)) % 1000); //用模除计算小数部分
    delay(1000);                                         //延时1000毫秒
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

这时LCD显示的就是滑块的实际电压值。

# 操作视频

  • 方法二:
    直接把analogRead(A0)的值映射到毫伏,整除1000舍掉后面的小数点就是整伏数,后面用模除算出的余数就是mV部分。

  • oseppBlock程序

  • Arduino程序
#include <LiquidCrystal.h>

LiquidCrystal lcd1(2, 3, 4, 5, 6, 7); //定义LCD的引脚

void setup()
{
    lcd1.begin(16, 2); //LCD初始化
    //slider1
    pinMode(A0, INPUT); //定义滑块电位器连接的引脚为输入模式
}

void loop()
{
    lcd1.clear();                                             //清屏
    lcd1.setCursor(0, 0);                                     //显示光标定位
    lcd1.print(map(analogRead(A0), 0, 1023, 0, 5000) / 1000); //计算整数部分
    lcd1.print(".");                                          //添加一个小数点
    lcd1.print(map(analogRead(A0), 0, 1023, 0, 5000) % 1000); //用模除计算小数部分
    delay(1000);                                              //延时1000毫秒
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

当没有设定特殊变量时,Arduino程序都是以整数进行运算的。为了计算后面小数部分我们用了模除(%),模除的结果的是一个数除以另一个数的余数。

  • Arduino的数学运算

两个数相加
1+2=31+2=3

第一个数减去第二个数
21=12-1=1

两个数相乘
12=21*2=2

第一个数除以第二个数
2/1=22/1=2

第一个数除以第二个数的余数
5/3=1...2结果为25/3=1...2结果为2

# 操作视频