Arduino基础入门篇31—LCD1602液晶显示

2023-11-04

LCD1602显示

LCD1602也叫1602字符型液晶,是一种专门用来显示字母、数字、符号的点阵型液晶模块,能同时显示16X2即32个字符。本篇我们来认识LCD1602,驱动它显示「Hello World」。

1. LCD1602介绍

对于单片机爱好者和电子爱好者来说,或多或少都曾使用过液晶显示模块。它们都是由若干个点阵字符位组成的,根据显示内容可分为1602、12864等。LCD1602可以显示两行字符,每行16个,显示背景也有所不同,有蓝色白字和黄色白字等。

LCD1602

LCD1602接口说明:

管脚说明

其中:

  • VL(V0):液晶对比度调整端,用于调节显示对比度,一般接10K电位器进行调整。
  • RS:数据/命令选择。高电平表示数据,低电平表示命令。
  • RW:读写选择。高电平为读,低电平为写。一般我们写入数据进行显示,所以此引脚接地。
  • EN:使能信号,配合数据/命令的读写。
  • D0-D7:双向数据端。可以使用8根数据线并行操作,也可以使用4根数据线串行操作。

关于LCD1602的驱动也非常简单。官方数据手册给出了基本操作时序和初始化设置步骤。本篇我们为了减少线路连接采用4位串行操作方式,一条8位的数据和命令分两次写入1602。

2. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • LCD1602液晶屏
  • 16Pin排针
  • 10K电位器

3. 实验步骤

1. 根据原理图搭建电路图。

LCD1602的第1、5、16脚接开发板GND;LCD1602第2、15脚接开发板5V;LCD1602的第4、6、11、12、13、14分别连接开发板数字引脚7、6、5、4、3、2;电位器两端引脚分别连接5V和GND,中间引脚连接LCD1602第3引脚。

实验原理图如下图所示:

电路连接图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
 * LCD1602_bit4
 * LCD1602驱动显示Hello World
 */
 
int LCD1602_RS = 7;
int LCD1602_EN = 6;
int DB[4] = { 2, 3, 4, 5};

/*
 * LCD写命令
 */
void LCD_Command_Write(int command)
{
  int i, temp;
  digitalWrite( LCD1602_RS, LOW);
  digitalWrite( LCD1602_EN, LOW);

  temp = command & 0xf0;
  for (i = DB[0]; i <= 5; i++)
  {
    digitalWrite(i, temp & 0x80);
    temp <<= 1;
  }

  digitalWrite( LCD1602_EN, HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN, LOW);

  temp = (command & 0x0f) << 4;
  for (i = DB[0]; i <= 5; i++)
  {
    digitalWrite(i, temp & 0x80);
    temp <<= 1;
  }

  digitalWrite( LCD1602_EN, HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN, LOW);
}

/*
 * LCD写数据
 */
void LCD_Data_Write(int dat)
{
  int i = 0, temp;
  digitalWrite( LCD1602_RS, HIGH);
  digitalWrite( LCD1602_EN, LOW);

  temp = dat & 0xf0;
  for (i = DB[0]; i <= 5; i++)
  {
    digitalWrite(i, temp & 0x80);
    temp <<= 1;
  }

  digitalWrite( LCD1602_EN, HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN, LOW);

  temp = (dat & 0x0f) << 4;
  for (i = DB[0]; i <= 5; i++)
  {
    digitalWrite(i, temp & 0x80);
    temp <<= 1;
  }

  digitalWrite( LCD1602_EN, HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN, LOW);
}

/*
 * LCD设置光标位置
 */
void LCD_SET_XY( int x, int y )
{
  int address;
  if (y == 0)    address = 0x80 + x;
  else          address = 0xC0 + x;
  LCD_Command_Write(address);
}

/*
 * LCD写一个字符
 */
void LCD_Write_Char( int x, int y, int dat)
{
  LCD_SET_XY( x, y );
  LCD_Data_Write(dat);
}

/*
 * LCD写字符串
 */
void LCD_Write_String(int X, int Y, char *s)
{
  LCD_SET_XY( X, Y );    //设置地址
  while (*s)             //写字符串
  {
    LCD_Data_Write(*s);
    s ++;
  }
}

void setup (void)
{
  int i = 0;
  for (i = 2; i <= 7; i++)
  {
    pinMode(i, OUTPUT);
  }
  delay(100);
  LCD_Command_Write(0x28);//显示模式设置4线 2行 5x7
  delay(50);
  LCD_Command_Write(0x06);//显示光标移动设置
  delay(50);
  LCD_Command_Write(0x0c);//显示开及光标设置
  delay(50);
  LCD_Command_Write(0x80);//设置数据地址指针
  delay(50);
  LCD_Command_Write(0x01);//显示清屏
  delay(50);

}

void loop (void)
{
  LCD_Write_String(2, 0, "Hello World!");
  LCD_Write_String(6, 1, "--TonyCode");
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

4. 实验现象

LCD1602显示字符「Hello World! --TonyCode」,通过调节电位器可调节显示对比度。

实验现象

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
扫码加入微信公众号:TonyCode

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino基础入门篇31—LCD1602液晶显示 的相关文章

  • 如何返回变量?

    我正在编写一个程序 将字母翻译成摩尔斯电码 然后将它们传输到 LED 并闪烁 我无法返回值 include
  • Arduino 错误:无法将参数 '1' 的 'String' 转换为 'char*' 到 'char* strtok(c​​har*, const char*)'

    我正在研究一个 arduino 分配 它分割传入的字符串并将字符串的术语放入 6 个不同的变量中 分割时的示例输入字符串有 6 个术语 我弹出以下错误 无法将参数 1 的 String 转换为 char 到 char strtok c ha
  • Windows IoT 和 DS3231 RTC 时钟

    对于我的项目 我需要当前时间和日期 不幸的是 当 RP2 关闭时 它就会失去一切 接下来的事情是 我将没有互联网连接来使用 NTP 为此 我需要实现 DS3231 RTC 模块 所有设备的通信都通过 I2C 运行 Raspberry Ard
  • 将 Arduino RGB LED 从一种颜色渐变为另一种颜色?

    目前 我已成功让 LED 灯循环显示我选择的八种颜色 一切都工作正常 除了我想要一种更自然的感觉 并且想要从一种颜色褪色 过渡到下一种颜色 而不是让它们互相替换 到目前为止 这是我的代码 int redPin 11 int greenPin
  • 在 Android 上将 USB 波特率从 9600 更改为 115200

    我有一个 Arduino 它以 115200 波特率串行发送数据 有一个应用程序以 9600 波特率从 Arduino 接收数据 代码是 Arduino USB serial converter setup Set control line
  • 蓝牙 HC-05 发送错误 1F 仅适用于 INQ 命令

    我的新蓝牙 HC 05 模块有问题 在 AT 模式下 它可以与我需要的所有命令完美配合 除了 INQ 我已经尝试事先发送一大堆其他命令 AT INIT OK AT ORGL OK AT ROLE 1 OK AT CLASS 0 OK 他们都
  • Arduino I2S 正弦波

    我正在开发一个项目 我想通过组合不同的正弦波来生成 简单 声音 我使用的是 arduino mkrZero 因为它内置了 I2S 接口 并且似乎有足够的处理能力来满足我的需求 I have wired my system exactly l
  • 如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

    我有一个将文本行输出到串行的板 我需要将这些文本行与我所知道的文本进行比较 本质上 我想做strcmp thestring F knownstring 但是似乎没有一个采用 FlashStringHelper 类型的 strcmp 版本 有
  • Arduino:使用串口和软件串口与蓝牙模块

    我的目的是使用 Arduino 通过 HC 05 蓝牙模块在 PC 和 Android 设备之间建立通信 我使用 PC 和 Arduino 串行监视器 之间的 USB 通信以及 SoftwareSerial 来连接到 HC 05 我的问题是
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • Java RXTX 库不加载本机库

    基本上我想使用 Arduino 编写一个简单的通信工具java 的 RXTX 库 http rxtx qbang org wiki index php Main Page并且在加载动态库时严重失败 我的系统规格 操作系统 OS X 优胜美地
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • Android BLE 扫描与 UUID 过滤器列表混淆

    我正在 Android 移动设备 A 上执行 UUID 过滤扫描 并且有两个测试用例 一个人在另一台 Android 设备 移动设备 b 上使用名为 BLE Scanner 的应用程序来创建具有两个测试服务 每个服务都有自己唯一的 UUID
  • 静态 uint8_t 数组的输入过程和类型

    我目前正在尝试将 Arduino IDE 中的整数变量转换为静态 uint8 t 数组的值 我在用 include
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并
  • Arduino - 高效地迭代 C 数组

    我有以下数组 PROGMEM prog uint16 t show hide info 4216 8900 4380 580 500 600 500 580 1620 580 500 600 500 580 500 600 480 600
  • AVRDUDE Android Arduino ioctl 错误

    我之前的问题 Android 无法使用 AVRDUDE 与 Arduino 通信 https stackoverflow com questions 15596376 android cannot talk to arduino using
  • 将浮点数转换为字节数组的 C 函数

    我正在尝试创建一个函数来接受浮点变量并将其转换为字节数组 我找到了一段有效的代码片段 但如果可能的话 希望在函数中重用它 我也在使用 Arduino 环境 但我知道它接受大多数 C 语言 目前工作 float variable 1 11 b
  • 从 iBeacon 接收 BLE 信号到 Bluno(arduino with BLE)

    我想从 iBeacon 到 Bluno 接收 rssi 信号和 UUID Arduino 板具有 BLE 对此有一些疑问 有没有从 BLE 到 BLE 接收 UUID 和 rssi 的解决方案 两个BLE设备可以互相通信吗 我想找一些网站来
  • 如何使用基于HM-10蓝牙模块的BLE Shield?

    我是 arduino 项目的新手 我想请你帮忙 我从 http imall iteadstudio com development platform arduino shields im130704001 html http imall i

随机推荐

  • 芯片的本质是什么?(2)为什么是半导体材料

    为什么是半导体材料 我们知道 芯片用的是半导体材料 可为什么是半导体呢 一句话概括 因为只有半导体才能 用电控制电 在半导体之前 人类只能用机械控制电 比如 电报的工作原理 是通过滴滴滴哒哒哒的机械开关 控制电流的导通和断开 从而将信息传递
  • SpringBoot文件上传-单文件与多文件上传的使用

    在Spring Boot中 文件上传可以使用MultipartFile来处理 下面将为你演示如何进行单文件和多文件上传 一 单文件上传 1 1 首先 你需要创建一个表单界面来选择和上传单个文件 在HTML中 你可以使用类似于下面的表单
  • IDEA中Spring配置错误:class path resource [.xml] cannot be opened because it does not exist

    如果在运行 Spring 项目时出现了类似于 class path resource applicationContext xml cannot be opened because it does not exist 这样的异常 意思就是没
  • 智慧宿舍系统--宿舍维修管理解决方案

    在大学生活中 宿舍维修是一个必不可少的环节 然而 传统的宿舍维修管理方式通常需要大量的人力和物力投入 效率低下 质量难以保证 为了提高宿舍维修工作的效率和质量 减少人力物力的浪费 现在可以利用物联网 人工智能和数字化平台等技术来实现宿舍维修
  • Cocos2d-x中使用第三方so库

    项目中如果使用到第三方的SDK 大多数是以 so动态共享库的文件打包给我们使用 如何使用他们 见下面分析 1 获得库文件 假如我们得到的库文件是libxxx so 注 关于 so文件的命名方式 可百度 在Jni目录下新建prebuilt文件
  • android退出所有Actiivty的实例方法

    import java util ArrayList import java util List import android app Activity import android app Application public class
  • 1个星期,教你快速上手Unity ASE-【预览】

    最近在学习Amplify Shader Editor插件 准备做几期笔记 希望能给csdn友们一些帮助 共同进步 以下是用到的参数截图 更多详情请去B站搜索 Cz wang 感谢博主的讲解 目录预览 1 效果传送 1 属性面板 2 操作面板
  • 恶意软件与APT

    1 什么是恶意软件 把未经授权便干扰或破坏计算机系统 网络功能的程序或代码 一组指令 称之为恶意程序 2 恶意软件有哪些特征 1 强制安装 2 难卸载 3 浏览器劫持 4 广告弹窗 5 恶意收集用户信息 6 恶意卸载其他软件 7 恶意捆绑
  • pytorch torch.nn.Identity() 是干啥的,解释。

    class Identity Module r A placeholder identity operator that is argument insensitive Args args any argument unused kwarg
  • 惊呆了!Spring Boot 还能远程调试?

    目录 前言 什么是远程调试 为什么要远程调试 什么是JPDA 如何开启远程调试 transport server suspend address onthrow onuncaught launch timeout 常用的命令 IDEA如何开
  • 基于门限算法的SM2协同签名算法分析-openssl源码验证

    基于门限算法的SM2协同签名算法分析 openssl源码验证 介绍 1 协同公钥生成流程 2 协同签名流程 3 正确性分析 4 使用openssl接口进行代码测试 5 测试源码 介绍 门限密码体制 是安全多方计算中对抗合谋攻击的一个重要工具
  • Python实现识别图片内容的方法分析

    Python实现识别图片内容的方法分析 本文实例讲述了Python实现识别图片内容的方法 分享给大家供大家参考 具体如下 python识别图片内容 这里我的环境为windows64位 python2 7 14 需要用到PIL模块和tesse
  • springboot事务管理 注解@Transactional 无效原因,及解决办法

    1 不需要在启动类加上 EnableTransactionManagement EnableTransactionManagement是 spring tx 的注解 不是 spring boot 的 spring boot 会自动配置事务
  • 篇八:冒泡排序

    交换排序的一种 author xiaocui date 2022年08月02日 13 49 public class BubbleSort public static void main String args int arr new in
  • React 列表 & Keys

    React 列表 Keys const numbers 1 2 3 4 5 const listItems numbers map number gt li number li ReactDOM render ul listItems ul
  • leecode 题目5 最长回文子串(python)

    给你一个字符串 s 找到 s 中最长的回文子串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s cbbd 输出 bb 代码是根据B站上的一位up主写的 使用动态规划算法 从小字符串衍生相
  • css3新弹性盒子-flex-grow

    目录 flex grow 1 flex grow定义和用法 2 flex grow属性值 flex grow说明 flex grow实例 flex grow flex grow属性在CSS新弹性盒模型中是比较常用 想要用好它就先了解它的 语
  • 花卉识别卷积神经网络

    卷积神经网络做的花卉识别 keras 五分类 向日葵 雏菊 郁金香 玫瑰 蒲公英 之后更怎么做的
  • 【专题5: 硬件设计】 之 【68.开关电源 之 buck电路中的电感电流波形】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶 是一种专门用来显示字母 数字 符号的点阵型液晶模块 能同时显示16X2即32个字符 本篇我们来认识LCD1602 驱动它显示 Hello World 1 LCD1602介绍 对于单片机爱好者和电子爱好者