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

【51单片机】LCD1602液晶显示屏

学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp

开发板实图:
在这里插入图片描述

文章目录

  • LCD1602
  • 存储结构
    • 时序结构
  • 编码 —— 显示字符、数字

LCD1602

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其他的一些内置特殊字符,还可以有8个自定义字符

显示容量:16 × 2 个字符,每个字符为 5 × 7 点阵

在这里插入图片描述

引脚及应用电路

在这里插入图片描述

  • VSS:电源接地,相当于负极
  • VO:对比度调节电压,可通过该旋钮调节在这里插入图片描述
  • RS、RW、E 对应 I/O口如下在这里插入图片描述
  • D0 ~ D7 对应 I/O 口如下在这里插入图片描述
  • A、K:背光灯电源正负极在这里插入图片描述

存储结构

LCD1602能显示的字符在出厂时已经被固定好了,存储在一个字模库中。

该字模库由 CGRAM(可自定义字符) + CGROM(只读) 组成

在这里插入图片描述
红色部分为 CGROM,出厂时设置好了,不可修改
蓝色部分为 CGRAM,可由用户自定义字符

从上图可看出,“A” 字符对应的高位代码为 0100,对应左边低位代码为 0001,合起来就是 0100 0001,十六进制为 0x41。刚好与 ASCII 码相同,因此在向 LCD1602 显示字符时,可直接用 P0 = ‘A’

0x20 ~ 0x7F 为标准的 ASCII 码,0xA0 ~ 0xFF 为日文字符和希腊文字符,其余字符码(0x10 ~ 0x1F 及 0x80 ~ 0x9F)没有定义


LCD1602 的屏幕为 16 * 2,但其实 DDRAM(数据显示区) 为 40 * 2,超出范围的区域可以通过屏幕左移或右移显示。LCD1602 提供循环显示,即一直左移,超出范围后会自动衔接上最右侧的内容,形成移动横幅的效果

显示逻辑如下

在这里插入图片描述

  • AC(光标位置):控制写数据的位置

通过控制电路,确定 AC 位置,往 DDRAM 写入要显示的字符,通过字模库转化,最终显示在屏幕上

DDRAM地址如下

在这里插入图片描述

时序结构

  • RS:数据/指令选择,1为数据,0为命令
  • RW:读/写选择,1为读,0为写
  • E:使能标志。置1时,D0 ~ D7 的数据会被写入

指令集如下,标红的为较常用的
在这里插入图片描述

编码 —— 显示字符、数字

LCD1602 主要的两个操作就是 初始化显示字符,其他操作都是基于这两个操作

首先先封装 写数据 和 写命令 的方法

/*** @brief		延迟1ms* @parm		无* @retval		无*/
void LCD_Delay1ms()		//@11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}/*** @brief		写命令* @parm		Command:命令* @retval		无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS = 0;					//命令LCD_RW = 0;					//写LCD_DATAPORT = Command;		//写命令LCD_EN = 1;					//拉高使能LCD_Delay1ms();LCD_EN = 0;					//拉低使能LCD_Delay1ms();
}/*** @brief		写数据* @parm		Data:数据* @retval		无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS = 1;					//命令LCD_RW = 0;					//写LCD_DATAPORT = Data;		//写命令LCD_EN = 1;					//拉高使能LCD_Delay1ms();LCD_EN = 0;					//拉低使能LCD_Delay1ms();
}

初始化
常用的初始化如下:

  1. 八位数据接口,两行显示,5 * 7 点阵
  2. 显示开,光标关,闪烁关
  3. 数据读写操作后,光标自动加一,画面不动
  4. 清屏

通过上述指令集都可以找到对应的指令,调用LCD_WriteCommand即可

/*** @brief		初始化LCD1602* @parm		无* @retval		无*/
void LCD_Init()
{LCD_WriteCommand(0x38);		//八位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0C);		//显示开,光标关,闪烁关LCD_WriteCommand(0x06);		//数据读写操作后,光标自动加一,画面不动LCD_WriteCommand(0x01);		//清屏
}

显示字符

需要先确定光标位置,将数据写在 DDRAM 的什么位置,再发送数据

/*** @brief		设置光标位置* @parm		Row:行号,范围:1 ~ 2* @parm		Column:列号,范围:1 ~ 40* @retval		无*/
void LCD_SetCursor(unsigned char Row, unsigned char Column)
{if(Row == 1)	//第一行起始为0x00LCD_WriteCommand(0x80 | (Column - 1));else			//第二行起始为0x40LCD_WriteCommand(0x80 | (Column - 1) + 0x40);
}/*** @brief		显示一个字符* @parm		Row:行号,范围:1 ~ 2* @parm		Column:列号,范围:1 ~ 40* @parm		Char:字符* @retval		无*/
void LCD_ShowChar(unsigned char Row, Column, Char)
{LCD_SetCursor(Row, Column);LCD_WriteData(Char);
}

接下来就是一些扩展方法
显示字符串,十进制无符号和有符号数字,十六进制,二进制

/*** @brief		显示字符串* @parm		Row:行号,范围:1 ~ 2* @parm		Column:列号,范围:1 ~ 40* @parm		String:字符串* @retval		无*/
void LCD_ShowString(unsigned char Row, unsigned char Column, unsigned char *String)
{unsigned char i = 0;LCD_SetCursor(Row, Column);for(i = 0; String[i] != '\0'; ++i)LCD_WriteData(String[i]);
}/*** @brief		X的Y次方* @parm		X:基数* @parm		Y:次方数* @retval		X^Y*/
unsigned long LCD_Pow(int X, int Y)
{unsigned long res = 1;while(Y--){res *= X;}return res;
}/*** @brief		在指定位置显示指定长度的无符号数字,从高位截取* @parm		Row: 行号,范围:1/2* @parm		Column: 列号,范围:1 ~ 40* @parm		Num: 显示的数字,范围:0 ~ 65535* @parm		Length: 长度,范围:1 ~ 40* @retval		无*/
void LCD_ShowNum(unsigned char Row, unsigned char Column, unsigned int Num, unsigned char Length)
{LCD_SetCursor(Row, Column);for(; Length > 0; --Length)LCD_WriteData((Num / LCD_Pow(10, Length - 1) % 10) + '0');
}/*** @brief		在指定位置显示指定长度的有符号数字,从高位截取* @parm		Row: 行号,范围:1/2* @parm		Column: 列号,范围:1 ~ 40* @parm		Num: 显示的数字,范围:-32768 ~ 32767。* @parm		Length: 长度,范围:1 ~ 40* @retval		无*/
void LCD_ShowSignedNum(unsigned char Row, unsigned char Column, int Num, unsigned char Length)
{//显示正负号unsigned int ShowNum;if(Num >= 0){LCD_ShowChar(Row, Column, '+');ShowNum = Num;}	else{LCD_ShowChar(Row, Column, '-');ShowNum = -Num;}LCD_ShowNum(Row, Column + 1, ShowNum, Length);
}/*** @brief		在指定位置显示指定长度的十六进制数字* @parm		Row: 行号,范围:1/2* @parm		Column: 列号,范围:1 ~ 40* @parm		Num: 显示的数字,范围:0 ~ 65535* @parm		Length: 长度,范围:1 ~ 40* @retval		无*/
void LCD_ShowHexNum(unsigned char Row, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char Temp;LCD_SetCursor(Row, Column);for(; Length > 0; --Length){Temp = Num / LCD_Pow(16, Length - 1) % 16;if(Temp >= 10)LCD_WriteData(Temp - 10 + 'A');elseLCD_WriteData(Temp + '0');}
}/*** @brief		在指定位置显示指定长度的二进制数字* @parm		Row: 行号,范围:1/2* @parm		Column: 列号,范围:1 ~ 40* @parm		Num: 显示的数字,范围:0 ~ 65535* @parm		Length: 长度,范围:1 ~ 40* @retval		无*/
void LCD_ShowBinNum(unsigned char Row, unsigned char Column, unsigned int Num, unsigned char Length)
{LCD_SetCursor(Row, Column);for(; Length > 0; --Length)LCD_WriteData(Num / LCD_Pow(2, Length - 1) % 2 + '0');
}

完整项目链接:【51单片机】LCD1602液晶显示屏


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

相关文章:

【51单片机】LCD1602液晶显示屏

学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602(Liquid Crystal Display)液晶显示屏是…...

理解 HTML5 Canvas 中逻辑像素与物理像素的关系

理解 HTML5 Canvas 中逻辑像素与物理像素的关系 在使用 HTML5 Canvas 时,开发者经常会遇到一个困惑:为什么鼠标的 offsetX 和 offsetY 和我绘制的图形坐标对不上?这通常是因为 Canvas 的逻辑像素大小和物理像素大小不一致。本文将详细解释这…...

7.揭秘C语言输入输出内幕:printf与scanf的深度剖析

揭秘C语言输入输出内幕:printf与scanf的深度剖析 C语言往期系列文章目录 往期回顾: VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础概念,动手实现首个C程序C语言概念之旅:解锁关…...

数据分析-系统认识数据分析

目录 数据分析的全貌 观测 实验 应用 数据分析的全貌 观测 实验 应用...

蓝桥杯介绍

赛事背景与历程 自2009年举办以来,蓝桥杯已经连续举行了多届,成为国内领先的信息技术赛事。2022年,蓝桥杯被教育部确定为2022—2025学年面向中小学生的全国性竞赛活动,并入选国家级A类学科竞赛。 参赛对象与组别 蓝桥杯的参赛对…...

鸿蒙加载网络图片并转换成PixelMap

鸿蒙加载网络图片并转换成PixelMap 参考文档 基于API12. 有一些图片功能需要使用 PixelMap 类型的参数,但是使用Image组件之类的时候无法获取到 PixelMap 类型数据。 因此只能是把图片下载下来然后加在并转换一下。 实现方式 一下封装了一个函数。使用的 rcp 模…...

hive搭建

1.准备环境 三台节点主机已安装hadoopmysql数据库 2.环境 2.1修改三台节点上hadoop的core-site.xml <!-- 配置 HDFS 允许代理任何主机和组 --> <property><name>hadoop.proxyuser.hadoop.hosts</name><value>*</value> </property&…...

51c扩散模型~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11541675 #Diffusion Forcing 无限生成视频&#xff0c;还能规划决策&#xff0c;扩散强制整合下一token预测与全序列扩散 当前&#xff0c;采用下一 token 预测范式的自回归大型语言模型已经风靡全球&#xff0c;同时互联…...

从零开始深度学习:全连接层、损失函数与梯度下降的详尽指南

引言 在深度学习的领域&#xff0c;全连接层、损失函数与梯度下降是三块重要的基石。如果你正在踏上深度学习的旅程&#xff0c;理解它们是迈向成功的第一步。这篇文章将从概念到代码、从基础到进阶&#xff0c;详细剖析这三个主题&#xff0c;帮助你从小白成长为能够解决实际…...

Liebherr利勃海尔 EDI 需求分析

Liebherr 使用 EDI 技术来提高业务流程的效率、降低错误率、加快数据交换速度&#xff0c;并优化与供应商、客户和其他合作伙伴之间的业务沟通。通过 EDI&#xff0c;Liebherr 实现了与全球交易伙伴的自动化数据交换&#xff0c;提升了供应链管理和订单处理的透明度。 Liebher…...

java小练习

小练1.用while语句计算11/2!1/3!1/4!...1/20!的和 public class test_11_17_2 {public static void main(String[] args) {double sum 0;double item 1;int n 20;int i 1;while(i<n){sum item;i i1;item item*(1.0/i);}System.out.println(sum);} } 小练2.计算88888…...

go语言中的占位符有哪些

在Go语言中&#xff0c;占位符主要用于格式化字符串输出&#xff0c;特别是在使用fmt包中的Printf系列函数时。以下是Go语言中常用的占位符&#xff1a; %v&#xff1a;代表值的默认格式&#xff0c;对于字符串是直接输出&#xff0c;对于整型是十进制形式。%v&#xff1a;扩展…...

基于Windows安装opus python库

项目中需要用到一些opus格式的编解码功能&#xff0c;找到网上有opus的开源库。网址&#xff1a;Opus Codec 想着人生苦短&#xff0c;没想到遇上了错误&#xff01;在这里记录一下过程 过程 安装python库 pip3 install opuslib验证 >>> import opuslib Tracebac…...

【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入

《设计模式之行为型模式》系列&#xff0c;共包含以下文章&#xff1a; 行为型模式&#xff08;一&#xff09;&#xff1a;模板方法模式、观察者模式行为型模式&#xff08;二&#xff09;&#xff1a;策略模式、命令模式行为型模式&#xff08;三&#xff09;&#xff1a;责…...

使用nossl模式连接MySQL数据库详解

使用nossl模式连接MySQL数据库详解 摘要一、引言二、nossl模式概述2.1 SSL与nossl模式的区别2.2 选择nossl模式的场景三、在nossl模式下连接MySQL数据库3.1 准备工作3.2 C++代码示例3.3 代码详解3.3.1 初始化MySQL连接对象3.3.2 连接到MySQL数据库3.3.3 执行查询操作3.3.4 处理…...

【MySQL】ubantu 系统 MySQL的安装与免密码登录的配置

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;MySQL初阶探索&#xff1a;构建数据库基础 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f4da;mysql的安装&#x1f4d5;MySQL的登录&#x1f30f;MySQL配置免密码登录 &#x1f4da;mysql的…...

高级 SQL 技巧讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; SQL&#xff08;结构化查询语言&#xff09;是管理和操作数据库的核心工具。从基本的查询语句到复杂的数据处理&#xff0c;掌握高级 SQL 技巧不仅能显著提高数据分析的效率&#xff0c;还能解决业务中的复…...

浅论AI大模型在电商行业的发展未来

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI大模型在电商行业中扮演着越来越重要的角色。本文旨在探讨AI大模型如何赋能电商行业&#xff0c;包括提升销售效率、优化用户体验、增强供应链管理等方面。通过分析AI大模型在电商领域的应用案例和技术进展…...

【python笔记03】《类》

文章目录 面向对象基本概念对象的概念类的概念 类的定义类的创建&#xff08;实例的模板&#xff09;类的实例化--获取对象对象方法中的self关键字面试题请描述什么是对象&#xff0c;什么是类。请观阅读如下代码&#xff0c;判断是否能正常运行&#xff0c;如果不能正常运行&a…...

Flutter 应用在真机上调试的流程

在真机上调试 Flutter 应用的方法有很多&#xff0c;可以使用 USB 数据线连接设备到电脑进行调试&#xff0c;也可以通过无线方式进行 Flutter 真机调试。 1. 有线调试 设备准备 启用开发者模式&#xff1a; Android&#xff1a;进入 设置 > 关于手机&#xff0c;连续点击…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...