stm32移植LCD2002驱动

news2025/3/12 1:11:47

介绍

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()
{
	// lcd2002
    rt_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成本,减少电位器的使用
在这里插入图片描述

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

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

相关文章

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工具箱软件,这些软件各具特色…

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…

Core Speech Kit(基础语音服务)

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

配置 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。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…

快速掌握EasyOCR应用实战指南

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

ubuntu22.04本地部署OpenWebUI

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