当前位置: 首页 > article >正文

stm32移植LCD2002驱动

介绍

LCD2002支持20X2个字符串显示,引脚功能和读写时序跟LCD1602都很像

  • LCD类型:字符点阵

  • 点 阵 数:20×2

  • 外形尺寸:116.0mm×37.0mm(长宽)

  • 视域尺寸:83.0mm×18.6mm

  • 点 距 离:0.05mm×0.05mm

  • 点 大 小:0.65mm×0.6mm

  • 控 制 器:SPLC780

  • 玻璃类型:FSTN或STN

  • 显示内容:20(例)×2(行)

  • 背光类型:LED白光(白底黑字,蓝底白字)

  • 数据传输:并口

  • 工作电压:5V

LCD2002的应用场景有:

  • 物联网数据采集端显示:展示传感器数值
  • 工业自动化:电机控制展示信息
  • 嵌入式场景:智能家居终端设备

引脚

LCD2002有16Pin引脚,每个引脚功能如下

管脚号符号功能
1Vss电源地( GND)
2Vdd电源电压(+5V)
3V0LCD 驱动电压(可调)
4RS寄存器选择输入端,输入 MPU 选择模块内部寄存器类型信号:
RS=0,当 MPU 进行写模块操作,指向指令寄存器;
当 MPU 进行读模块操作,指向地址计数器;
RS=1,无论 MPU 读操作还是写操作,均指向数据寄存器
5R/W读写控制输入端,输入 MPU 选择读/写模块操作信号:
R/W=0 读操作; R/W=1 写操作
6E使能信号输入端,输入 MPU 读/写模块操作使能信号:
读操作时,高电平有效;写操作时,下降沿有效
7DB0数据输入/输出口, MPU 与模块之间的数据传送通道
8DB1数据输入/输出口, MPU 与模块之间的数据传送通道
9DB2数据输入/输出口, MPU 与模块之间的数据传送通道
10DB3数据输入/输出口, MPU 与模块之间的数据传送通道
11DB4数据输入/输出口, MPU 与模块之间的数据传送通道
12DB5数据输入/输出口, MPU 与模块之间的数据传送通道
13DB6数据输入/输出口, MPU 与模块之间的数据传送通道
14DB7数据输入/输出口, MPU 与模块之间的数据传送通道
15A背光的正端+5V
16K背光的负端 0V

原装的LCD并没有焊接排针,需要自己手动焊接
在这里插入图片描述

移植

引脚定义,一般只需要用到以下13个Pin

#define LCD_RS_PIN        GET_PIN(A, 4)
#define LCD_RW_PIN        GET_PIN(A, 5)
#define LCD_E_PIN         GET_PIN(A, 6)
#define LCD_D0_PIN        GET_PIN(A, 7)
#define LCD_D1_PIN        GET_PIN(B, 0)
#define LCD_D2_PIN        GET_PIN(B, 1)
#define LCD_D3_PIN        GET_PIN(B, 2)
#define LCD_D4_PIN        GET_PIN(B, 10)
#define LCD_D5_PIN        GET_PIN(B, 11)
#define LCD_D6_PIN        GET_PIN(B, 12)
#define LCD_D7_PIN        GET_PIN(B, 13)
#define LCD_V0    		  GET_PIN(B, 4)
#define LCD_BL    		  GET_PIN(B, 5)

初始化LCD2002引脚

void LCD_GPIO_Init() 
{rt_pin_mode(LCD_V0, PIN_MODE_OUTPUT);rt_pin_mode(LCD_BL, PIN_MODE_OUTPUT);rt_pin_mode(LCD_RS_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_RW_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_E_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D0_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D1_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D2_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D3_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D4_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D5_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D6_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LCD_D7_PIN, PIN_MODE_OUTPUT);
}

写数据

void LCD_WriteData(uint8_t data) 
{rt_pin_write(LCD_RS_PIN, PIN_HIGH); rt_pin_write(LCD_RW_PIN, PIN_LOW);     rt_pin_write(LCD_E_PIN, PIN_LOW);    rt_pin_write(LCD_D0_PIN, (data & 0x01) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D1_PIN, (data & 0x02) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D2_PIN, (data & 0x04) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D3_PIN, (data & 0x08) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D4_PIN, (data & 0x10) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D5_PIN, (data & 0x20) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D6_PIN, (data & 0x40) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D7_PIN, (data & 0x80) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_E_PIN, PIN_HIGH);  rt_thread_mdelay(5); rt_pin_write(LCD_E_PIN, PIN_LOW); 
}

写命令

void LCD_WriteCommand(uint8_t command) 
{rt_pin_write(LCD_RS_PIN, PIN_LOW); rt_pin_write(LCD_RW_PIN, PIN_LOW);     rt_pin_write(LCD_E_PIN, PIN_LOW);   rt_pin_write(LCD_D0_PIN, (command & 0x01) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D1_PIN, (command & 0x02) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D2_PIN, (command & 0x04) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D3_PIN, (command & 0x08) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D4_PIN, (command & 0x10) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D5_PIN, (command & 0x20) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D6_PIN, (command & 0x40) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_D7_PIN, (command & 0x80) ? PIN_HIGH : PIN_LOW);rt_pin_write(LCD_E_PIN, PIN_HIGH);   rt_thread_mdelay(5);  rt_pin_write(LCD_E_PIN, PIN_LOW);  
}

设置光标位置

void LCD_SetCursor(uint8_t col, uint8_t row) 
{uint8_t address = col;if (row == 1) {address += 0x40;  }LCD_WriteCommand(0x80 | address); 
}

绘制字符,需要配合LCD_SetCursor接口使用

void LCD_Print(char* str) 
{while (*str) {LCD_WriteData(*str++);}
}

LCD初始化,设置清屏、光标位置自动累加等

void LCD_Init() {rt_pin_write(LCD_V0, PIN_HIGH);rt_pin_write(LCD_BL, PIN_HIGH);rt_thread_mdelay(15); LCD_WriteCommand(0x38);rt_thread_mdelay(5);LCD_WriteCommand(0x0c);rt_thread_mdelay(5);LCD_WriteCommand(0x06);rt_thread_mdelay(5);LCD_WriteCommand(0x01);rt_thread_mdelay(5);
}

测试用例,在屏幕第一行显示Levitation字样

static void lcd2002_entry(void* parameter) 
{LCD_GPIO_Init();LCD_Init();LCD_WriteCommand( 0x80 );	LCD_SetCursor(5, 0);LCD_Print("Levitation");while(1) {rt_thread_mdelay(500);}
}int main()
{// lcd2002rt_thread_t lcd2002_thread = rt_thread_create("lcd2002", lcd2002_entry, RT_NULL, 512, 21, 20);if (lcd2002_thread != RT_NULL) {rt_thread_startup(lcd2002_thread);}while (1){rt_pin_write(LED0_PIN, PIN_HIGH);rt_thread_mdelay(10);rt_pin_write(LED0_PIN, PIN_LOW);rt_thread_mdelay(10);}return RT_EOK;
}

显示效果

在这里插入图片描述

总结

买的是5V供电的LCD2002,但它的数据引脚是可以兼容3.3V的GPIO的,详细可参考数据手册关于芯片引脚电气特性的说明

在这里插入图片描述

立创上面汉昇的LCD2002背光引脚BLK、BLA的说明是错误的

在这里插入图片描述

延申

BLA背光和V0对比度通过使用1KHz方波改变占空比可以实现背光和对比度的调节,可以节约硬件Bom成本,减少电位器的使用
在这里插入图片描述

相关文章:

stm32移植LCD2002驱动

介绍 LCD2002支持20X2个字符串显示,引脚功能和读写时序跟LCD1602都很像 LCD类型:字符点阵 点 阵 数:202 外形尺寸:116.0mm37.0mm(长宽) 视域尺寸:83.0mm18.6mm 点 距 离:0.05mm…...

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…...

“此电脑”中删除WPS云盘方法(百度网盘通用)

📣此方法适用于卸载WPS云盘后,WPS云盘图标依然在此电脑中显示的问题。 原理:通过注册来进行删除 步骤: WIN键R,打开运行窗口,输入regedit命令,来打开【注册表编辑器】; 从左侧,依…...

Agent革命:Manus如何用工作流拆解掀起AI生产力革命

一、现象级产品的诞生背景 2025年3月6日,一款名为Manus的AI产品在技术圈引发地震式传播。其官方测试数据显示:在GAIA基准测试中,基础任务准确率达86.5%(接近人类水平),中高级任务完成率突破57%。这标志着A…...

四款GIS工具箱软件解析:满足企业多样化空间数据需求

概述 随着地理信息系统(GIS)在城市规划、环境监测、资源管理等领域的广泛应用,各种GIS工具箱软件不断涌现,为用户提供了强大的数据处理、空间分析和地图制图功能。本文将为大家介绍4款GIS工具箱软件,这些软件各具特色…...

nginx 配置403页面(已亲测)

问题:GET请求访问漏洞url即可看到泄露的内网ip 解决方式: 1.配置nginx 不显示真实Ip 2.限制接口只能是POST请求 具体配置: 编写一个403.html 在nginx的配置文件中,配置location参数: location /api/validationCode…...

After Effects的图钉与关键帧动画

姜 子 博 引言 在数字媒体时代,动态图形和视觉效果在信息传播和表达中扮演着越来越重要的角色。After Effects 作为行业领先的软件,提供了丰富的工具和功能,帮助用户创作出令人惊叹的视觉作品。图钉工具和关键帧动画是 AE 中实现复杂动画效…...

SAP DOI EXCEL宏的使用

OAOR里上传EXCEL模版 屏幕初始化PBO创建DOI EXCEL对象,并填充EXCEL内容 *&---------------------------------------------------------------------* *& Module INIT_DOI_DISPLAY_9100 OUTPUT *&--------------------------------------------…...

新编大学应用英语综合教程3 U校园全套参考答案

获取全套答案: 链接:https://pan.quark.cn/s/abaa0338724e...

高考數學。。。

2024上 具体来说,直线的参数方程可以写为: x1t y−t z1t 二、简答题(本大题共5小题,每小题7分,共35分。) 12.数学学习评价不仅要关注结果评价,也要关注过程评价。简要说明过程评价应关注哪几个方面。…...

STM32 子设备通过CAN发送数据到主设备

采集ADC、GPS经纬坐标、温湿度数据、大气压数据通过CAN方式发送给主设备端,帧ID按照如下定义: 我尼玛一个标准帧ID位数据是11位,扩展帧才是111829位,它说最开头的是四位是真类型,并给我如下解释: 它把帧的定…...

HCIA-IP路由动态-RIP

一、概念 动态路由是指路由器通过运行动态路由协议(RIP、OSPF等),自动学习和发现网络中的路由信息。路由器之间通过交换路由协议数据包,互相通告自己所知道的网络信息,从而构建和更新路由表。 二、RIP(路由信息协议)…...

CentOS7离线部署安装docker和docker-compose

CentOS7离线部署安装docker和docker-compose 安装包准备 docker下载地址、docker-compose下载地址 docker和docker-compose版本对应关系 注:本次安装部署选择的版本是 docker:docker-28.0.1.tgzdocker-compose:docker-compose-linux-x86_6…...

Sora与AGI的结合:从多模态模型到智能体推理的演进

全文目录: 开篇语前言前言:AGI的挑战与Sora的突破Sora的多模态学习架构:支撑智能体推理的基础1. **多模态学习的核心:信息融合与交叉理解**2. **智能体推理:从感知到决策** Sora如何推动AGI的发展:自主学习…...

Core Speech Kit(基础语音服务)

文章目录 一、Core Speech Kit简介场景介绍约束与限制二、文本转语音1. 场景介绍2. 约束与限制3. 开发步骤4. 设置播报策略设置数字播报策略插入静音停顿指定汉字发音5. 开发实例三、语音识别约束与限制开发步骤开发实例一、Core Speech Kit简介 Core Speech Kit(基础语音服务…...

VsCode 快捷键备忘

移动光标及选择文本 Ctrl ← / → :以单词为单位移动游标Home / End:光标移到行首/行位Ctrl Home / End:光标移到文件首和文件尾Ctrl Shift \:在匹配的分隔符之间跳转 配对的分隔符 是指分隔代码元素的字符,比如字…...

配置 Thunderbird 以使用 QQ 邮箱

配置 Thunderbird 以使用 QQ 邮箱 本片文章的操作系统为 windws 10 ,thunder bird 客户端版本为 128.7.1esr(64位)。注意到其他文章的图片中 thunder bird 的 ui 界面和我这个不一样,导致看起来不太方便,所以这里写一篇博客。不同版本的 thu…...

如何使用MyBatis进行多表查询

前言 在实际开发中,对数据库的操作通常会涉及多张表,MyBatis提供了关联映射,这些关联映射可以很好地处理表与表,对象与对象之间的的关联关系。 一对一查询 步骤: 先确定表的一对一关系确定好实体类,添加关…...

第六课:数据存储三剑客:CSV/JSON/MySQL

在Python的数据存储与处理领域,CSV、JSON和MySQL被广大开发者誉为“数据存储三剑客”。它们各自在不同的场景下发挥着重要作用,无论是简单的数据交换、轻量级的数据存储,还是复杂的关系型数据库管理,都能找到它们的身影。本文将详…...

Python通过SSH隧道访问数据库

本文介绍通过sshtunnel类库建立SSH隧道,使用paramiko通过SSH来访问数据库。 实现了两种建立SSH方式:公私钥验证、密码验证。 公私钥可读本地,也可读取Aws S3上的私钥文件。 本质上就是在本机建立SSH隧道,然后将访问DB转发到本地SS…...

Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查

AWS batch task使用了自定义镜像,在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…...

立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具

Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹,甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…...

quillEditor 禁用复制粘贴图片,以及class转style等问题

<template><div><div class"search-term"><el-form :inline"true" :model"searchInfo" class"demo-form-inline"><el-form-item label"案例标题"><el-input v-model"searchInfo.titl…...

快速掌握EasyOCR应用实战指南

EasyOCR 是一个开源的、支持多语言&#xff08;28种&#xff09;和多文档格式&#xff08;PDF/PNG/JPG/TIFF等&#xff09;的 OCR&#xff08;光学字符识别&#xff09;工具库&#xff0c;由 Hugging Face 团队维护。其目标是简化 OCR 的开发流程&#xff0c;提供易用、高性能的…...

ubuntu22.04本地部署OpenWebUI

一、简介 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离线运行。它支持各种 LLM 运行器&#xff0c;如 Ollama 和 OpenAI 兼容的 API&#xff0c;并内置了 RAG 推理引擎&#xff0c;使其成为强大的 AI 部署解决方案。 二、安装 方法 …...

JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1

在不同的编程语言中&#xff0c;表示数组中最后一个元素的方法略有不同&#xff0c;但基本思路都是利用数组的长度或索引来实现。 以下是一些常见编程语言中获取数组最后一个元素的方法&#xff1a; 1. JavaScript: 使用 array.length - 1 索引: 这是最常见和传统的方法。Java…...

【Leetcode 每日一题】2597. 美丽子集的数目

问题背景 给你一个由正整数组成的数组 n u m s nums nums 和一个 正 整数 k k k。 如果 n u m s nums nums 的子集中&#xff0c;任意两个整数的绝对差均不等于 k k k&#xff0c;则认为该子数组是一个 美丽 子集。 返回数组 n u m s nums nums 中 非空 且 美丽 的子集数…...

jupyter配置多个核心

CMD输入 先创建虚拟环境 "D:\Program Files\Python37\python.exe" -m venv myenv激活虚拟环境 myenv\Scripts\activate"D:\Program Files\Python37\python.exe" -m pip install ipykernel "D:\Program Files\Python37\python.exe" -m ipykern…...

【Linux系统编程】初识系统编程

目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理&#xff08;Process Management&#xff09;2. 内存管理&#xff08;Memory Management&#xff09;3. 文…...