物联网AI MicroPython传感器学习 之 LCD1602液晶屏

news2024/11/19 19:38:52

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

LCD1602 字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5x7点阵+游标的显示模式。提供显示数据缓冲区 DDRAM、字符发生器CGROM和字符发生器CGRAM,可以使用CGRAM来存储自己定义的最多8个5x8点阵的图形字符的字模数据。提供了丰富的指令设置:清显示;游标回原点;显示开/关;游标开/关;显示字符闪烁;游标移位;显示移位等。提供内部上电自动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。
image.png
引脚定义:

  • VSS:电源地
  • VDD:电源+5V
  • VO:液晶显示偏压,接电位计VO
  • RS:数据/命令选择
  • RW:读/写选择
  • E:使能信号,用于数据传输
  • D0-D3:数据,暂未用
  • D4-D7:数据,接入 GPIO
  • A:背光源正极,接电源+5V
  • S:背光源负极,接电源地

二、技术参数

  • 显示容量:16×2个字符
  • 芯片工作电压:4.5—5.5V
  • 工作电流:2.0mA(5.0V)
  • 模块最佳工作电压:5.0V
  • 字符尺寸:2.95×4.35(W×H)mm

三、软件接口

LCD1602() - 创建 LCD1602 驱动对象

  • 函数原型:

lcd1602Obj = LCD1602(RS, RW, E, D4, D5, D6, D7)

  • 参数说明:
参数类型必选参数?说明
RSGPIO传入GPIO对象
RWGPIO传入GPIO对象
EGPIO传入GPIO对象
D4GPIO传入GPIO对象
D5GPIO传入GPIO对象
D6GPIO传入GPIO对象
D7GPIO传入GPIO对象
  • 返回值:
    LCD1602 对象成功,返回 LCD1602 对象;LCD1602 对象创建失败,抛出 Exception
  • 示例代码:
from machine import Pin
import lcd1602

# 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)

print('GPIO init done')

lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
  • 输出:
GPIO init begin
GPIO init done
LCD inited!

displayString(row, col, text) - 向 LCD 屏幕指定行列打印字符

  • 函数功能:
    先设置光标到指定行列偏移位置,然后打印字符,其中行列偏移为字符偏移而非点阵偏移,共2行16列
  • 函数原型:

drv.displayString(1, 0, ‘Hello’)

  • 参数说明:
    • row 表示行偏移,范围是 0-1 表示 行1-行2
    • col 表示列偏移,范围是 0-15 表示 列1-列16
    • text 待打印的字符串
  • 返回值:
    成功打印的字符数量
  • 示例:
# 在第二行,第一列打印字符 Hello
from machine import Pin
import lcd1602

# 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)

print('GPIO init done')

lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
lcd1602Obj.displayString(1, 0, 'Hello')
print('LCD printed')
  • 输出:
GPIO init begin
GPIO init done
LCD inited!
LCD printed

四、接口案例

  • 代码:
# Python代码
from machine import Pin
import lcd1602

if __name__ == '__main__':
    # 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)

print('GPIO init done')

lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
lcd1602Obj.displayString(1, 0, 'Hello')
print('LCD printed')
  • 输出:
...
GPIO init begin
GPIO init done
LCD inited!
LCD printed
...

五、通信协议

主控芯片和 LCD1602 控制器之间通信为 GPIO 通讯,分为初始化阶段以及指令通讯阶段。

  • 初始化阶段
    • 通过三次发送 0x03,向 LCD 控制器发起初始化请求,每次间隔不同;
    • 初始化后立即设置数据/命令传输模式为 4bits 模式;
    • 然后进行功能、显示模式、打印项模式的设置,均为指令通讯方式;

image.png

  • 指令通讯阶段
    • 通过 RS=0,选择 LCD 控制器的指令寄存器,随后通过D4-D7发送指令内容,可实现:清显示;游标回原点;显示开/关;游标开/关;显示字符闪烁;游标移位;显示移位等。
    • 通过 RS=1,选择 LCD 控制器的数据寄存器,随后通过D4-D7发送数据内容,可实现向 LCD 屏幕打印字符的功能;

image.png

  • 4线传输机制
    • 指令和数据每次传输均为 8bits,因此分为两次传输,每次传输4bits
    • 传输时序:
      • RS=0/1 先稳定寄存器显示选择
      • 因为目前我们仅用到写,因此 RW=0 同时保持拉低
      • 随即准备数据到 D4-D7 管脚,准备通知 LCD 读取
      • 控制 E 管脚产生下降沿,其中高电平保持需要>450ns
      • 因为 LCD 控制器获得下降沿时需要读取数据并执行指令,因此再保持一个命令执行的时间稳定,时间为 40us

image.png

六、工作原理

液晶显示屏从 LCD 控制器引出 16 个管脚用于控制指令/数据输入,通过 GPIO 控制。

  • VSS 为地电源
  • VDD 接5V正电源
  • VO 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10k欧姆的电位器调整其对比度。
  • RS 为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
  • RW 为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或显示地址;当RS为低电平,RW为高电平时,可以读忙信号;当RS为高电平,RW为低电平时,可以写入数据。
  • E 端为使能端,当E端由高电平跳变为低电平时,液晶模块读取 D0-D7 数据执行命令。
  • D0-D7 为8位双向数据线。
  • A 背光源正极。
  • K 背光源负极。

参考文献及购买链接

[1] LCD1602电气手册
[2] LCD1602系列
[3] LCD1602商品购买链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双十一某宝、某东活动脚本

一、前言 双十一马上就快开始了,各大网购平台的优惠活动开展的如火如荼,羊毛党们也是摩拳擦掌,蠢蠢欲动。为了提高效率,自动化脚本应运而生,今天,小编为大家带来的就是这么三款自动化点击软件。主要是针对…

protobuf对象与JSON相互转换

除了之前的 protobuf-java依赖之外&#xff0c;还需要引入 protobuf-java-uti 依赖&#xff1a; <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --><dependency><groupId>com.google.protobuf</groupId><artifactId&…

linux可视化运维工具

今天推荐两个linux可视化的运维工具Cockpit和orion-ops Cockpit Cockpit是CentOS 8默认内置的一个基于Web的可视化管理工具。它提供了对一系列常见命令行管理操作的图形化支持&#xff0c;包括用户管理、防火墙管理、服务器资源监控等等。方便易用的Cockpit号称是适用于所有人…

一文解决:Swagger API 未授权访问漏洞问题

Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面&#xff0c;让开发者可以更方便地查看和测试 API 接口。然而&#xff0c;在一些情况下&#xff0c;未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 …

基于SpringBoot + Vue的学生成绩管理系统的设计与实现源码及搭建视频

基于SpringBoot Vue的学生成绩管理系统的设计与实现 引言 1.1目的 该文档的目的是描述学生成绩管理系统的概要设计&#xff0c;主要内容包括系统功能简介、系统结构设计、模块设计和界面设计等。 本文档的预期读者包括&#xff1a;产品设计者、编程人员、系统用户。 1.2 范围…

高品质工地建筑模板,防水耐用,易脱模

欢迎选购我们的产品&#xff1a;高品质工地建筑模板。作为一家专业厂家&#xff0c;我们提供适用于高层建筑的建筑模板&#xff0c;具有出色的防水耐用性能&#xff0c;且不易开胶。1. 高品质工地建筑模板&#xff1a;我们的建筑模板经过精心设计和制作&#xff0c;以确保其高品…

Python 中多态性的示例和类的继承多态性

单词 “多态” 意味着 “多种形式”&#xff0c;在编程中&#xff0c;它指的是具有相同名称的方法/函数/操作符&#xff0c;可以在许多不同的对象或类上执行。 函数多态性 一个示例是 Python 中的 len() 函数&#xff0c;它可以用于不同的对象。 字符串 对于字符串&#xf…

新的iLeakage攻击从Apple Safari窃取电子邮件和密码

图片 导语&#xff1a;学术研究人员开发出一种新的推测性侧信道攻击&#xff0c;名为iLeakage&#xff0c;可在所有最新的Apple设备上运行&#xff0c;并从Safari浏览器中提取敏感信息。 攻击概述 iLeakage是一种新型的推测性执行攻击&#xff0c;针对的是Apple Silicon CPU和…

LabVIEW更改图像特定部分的颜色

LabVIEW更改图像特定部分的颜色 在随附的照片中&#xff0c;想将包围的部分更改为黄色。该怎么做&#xff1f;或者如何将图像的蓝色部分更改为绿色。 绘制拼合像素图不接受数组或输出数组。如果需要有关函数的更多信息&#xff0c;请按 CTRL H 打开上下文帮助&#xff0c;或单…

linux shell脚本修改ini配置文件[session]下的键值

比如我要修改一个配置文件&#xff0c;如下&#xff0c;修改systemFlag.ini下的[huake]下的ip和port的值 代码如下&#xff0c;我就不解释了&#xff0c;有注释&#xff0c;用的是sed 来修改的&#xff0c;不懂的&#xff0c;可以去学习一下 #!/bin/bash #获取当前路径 curr…

无需更换vue-cli 脚手架 uniapp-搭建项目-H5-低版本安卓IOS兼容问题(白屏)(接口请求异常)

✨求关注~ &#x1f4bb;博客&#xff1a;www.protaos.com I. 简介 A. UniApp项目概述 B. 白屏和接口请求异常问题的背景 II. 白屏问题 A. 问题描述 1、uniapp 打包H5内嵌入APP内、低版本手机系统访问白屏问题 B. 问题根本原因 1、低版本手机系统 自带的webview内核不支持ES6语…

开放式耳机推荐百元价位、好用的开放式耳机推荐

个人很喜欢体验新潮或者与众不同的耳机&#xff0c;这不就发现了不一样的开放式耳机&#xff0c;这种耳机不需要插入耳道&#xff0c;而是采用开放式设计&#xff0c;最大的优点是在听音乐的同时能够感知周围环境的声音效果&#xff0c;同时佩戴也非常舒适&#xff0c;因此深受…

计算机操作系统重点概念整理-第四章 内存管理【期末复习|考研复习】

第四章 内存管理 【期末复习|考研复习】 计算机操作系统系列文章传送门&#xff1a; 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第四章 内存管理 【期末复习|考研复习】前言四、内存管理4.1 内…

centos ubantu IP一直变化,远程连接不上问题

文章目录 一、为什么IP地址会变1.主机DHCP导致 二、解决IP地址变化1.centos2.ubantu 总结 虚拟机能连接为互联网,但下一次启动IP地址再发生变化,无法使用ssh远程连接 一、为什么IP地址会变 1.主机DHCP导致 虚拟机系统(ubantu,centos…)启动后会向本地申请IP地址租约,租聘的I…

[Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷

一.Docker 部署 Nginx 以及端口映射 Docker 部署 Nginx,首先需要下载nginx镜像,然后启动这个镜像,就运行了一个nginx的容器了 1.下载 nginx 镜像并启动容器 #查看是否存在nginx镜像:发现没有nginx镜像 [rootlocalhost zph]# docker images | grep nginx#下载nginx镜像 [rootl…

高等数学教材重难点题型总结(六)定积分的应用

本章全是物理题&#xff0c;总的来说计算层面并不难&#xff0c;难点主要在于&#xff1a;对于体积和面积的题&#xff0c;核心在于抽象出面积/体积元素——本质上就是被积函数&#xff1b;对于物理题&#xff0c;基础的物理的公式一定要牢记~ 1.求平面面积 2.求旋转体的体积…

【DOCKER】

Docker 出现&#xff1a; 解决了运行环境和配置问题的软件容器。 方便做持续集成并有助于整体发布的容器虚拟化技术。 面试题&#xff1a; 容器和虚拟机比较&#xff1f; 区别&#xff1a; 1.Docker的三件套 1.镜像&#xff1a; 2.容器 3.仓库 2. 基础架构图 2.…

Kafka - 3.x Producer 生产者最佳实践

文章目录 生产经验_生产者提高吞吐量核心参数Code 生产经验_数据可靠性消息的发送流程ACK应答机制ack应答级别应答机制 小结Code 生产经验_数据去重数据传递语义幂等性幂等性原理开启幂等性配置&#xff08;默认开启&#xff09; 生产者事务kafka事务原理事务代码流程 生产经验…

Leetcode—121.买卖股票的最佳时机【简单】

2023每日刷题&#xff08;十一&#xff09; Leetcode—17.电话号码的字母组合 枚举法题解 参考自灵茶山艾府 枚举法实现代码 int maxProfit(int* prices, int pricesSize){int i;int max 0;int minPrice prices[0];for(i 1; i < pricesSize; i) {int tmp prices[i] -…

拼多多根据ID取商品详情 API 返回值说明

item_get-根据ID取商品详情 pinduoduo.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;获取key和secret接入secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_sea…