51单片机LCD1602的使用
文章目录
- 前言
- 一、LCD1602简单介绍
- 二、LCD1602中各个引脚的作用
- 四、LCD1602命令解析
- 1.写命令
- 2.写数据
- 3.清屏指令
- 4.光标归位指令
- 5.进入模式设置指令
- 6.显示开关控制指令
- 7.设定显示屏或光标移动方向指令
- 三、LCD1602代码编写
- 四、代码测试
- 总结
前言
本篇文章将为大家讲解LCD1602的使用方法。
一、LCD1602简单介绍
LCD1602是一种常用的液晶显示器,它的原理是通过液晶分子的振荡来控制显示内容的。液晶分子在电场的作用下,会发生振荡,从而改变液晶分子的极性,从而控制显示内容。液晶显示器的控制电路会根据输入的信号,控制电场的强度,从而控制液晶分子的振荡,从而控制显示内容。
二、LCD1602中各个引脚的作用
LCD1602的引脚有VSS、VDD、VO、RS、RW、E、D0-D7等。VSS和VDD分别为电源正负极;VO为显示屏的背光控制引脚;RS、RW、E分别为控制字符显示和数据读写的控制引脚;D0-D7为数据传输的引脚。
四、LCD1602命令解析
对于如何写命令我们直接看到数据手册就可以了。无论是写命令还是写数据我们只需要关注RS,R/W,E这几个引脚的电平即可。
1.写命令
当RS=0时代表输入指令。
R/W=0时代表向LCD写入指令或数据。
E是使能信号当E从1变为0时也就是下降沿会执行指令。
这里直接将要执行的命令写入LCD1602对应的数据端口即可。
写入后让E发生一个下降沿执行写入的指令。
void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
2.写数据
当RS=1时代表输入指令。
R/W=0时代表向LCD写入指令或数据。
E是使能信号当E从1变为0时也就是下降沿会执行指令。
其实写数据和写命令的函数只是需要注意RS的电平即可,其他代码原理都是一样的。
void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
3.清屏指令
根据手册可以知道只需要往数据端口写入0x01即可达到清屏效果。
void lcd1602_clear(void)
{lcd1602_write_cmd(0x01);
}
4.光标归位指令
光标归位指令写入0x02即可。
void lcd1602_CursorReset(void)
{lcd1602_write_cmd(0x02);
}
5.进入模式设置指令
将DB1设置为1每次写入一个字符后光标右移。
S=0写入数据后显示屏不移动。
void lcd1602_CursorReset(void)
{lcd1602_write_cmd(0x06); //写入新数据后光标右移,显示屏不移动
}
6.显示开关控制指令
这里看自己的需求设置对应的指令。
7.设定显示屏或光标移动方向指令
字体左移
void lcd1602_LeftMove(void)
{lcd1602_write_cmd(0x18);
}
字体右移
void lcd1602_RightMove(void)
{lcd1602_write_cmd(0x1c);
}
三、LCD1602代码编写
lcd1602.c
这里使用普中的代码进行讲解。
这里使用的lcd1602是8位的,在lcd1602.h定义了一个宏来决定。
#include "lcd1602.h"/*******************************************************************************
* 函 数 名 : lcd1602_write_cmd
* 函数功能 : LCD1602写命令
* 输 入 : cmd:指令
* 输 出 : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else //4位LCD
void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入LCD1602_DATAPORT=cmd<<4;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif/*******************************************************************************
* 函 数 名 : lcd1602_write_data
* 函数功能 : LCD1602写数据
* 输 入 : dat:数据
* 输 出 : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else
void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入LCD1602_DATAPORT=dat<<4;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif/*******************************************************************************
* 函 数 名 : lcd1602_init
* 函数功能 : LCD1602初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动lcd1602_write_cmd(0x01);//清屏
}
#else
void lcd1602_init(void)
{lcd1602_write_cmd(0x28);//数据总线4位,显示2行,5*7点阵/字符lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动lcd1602_write_cmd(0x01);//清屏
}
#endif/*******************************************************************************
* 函 数 名 : lcd1602_clear
* 函数功能 : LCD1602清屏
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void lcd1602_clear(void)
{lcd1602_write_cmd(0x01);
}/*******************************************************************************
* 函 数 名 : lcd1602_show_string
* 函数功能 : LCD1602显示字符
* 输 入 : x,y:显示坐标,x=0~15,y=0~1;str:显示字符串
* 输 出 : 无
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{u8 i=0;if(y>1||x>15)return;//行列参数不对则强制退出if(y<1) //第1行显示{ while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示{if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示{lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置 }else{lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置 }lcd1602_write_data(*str);//显示内容str++;//指针递增i++; } }else //第2行显示{while(*str!='\0'){if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示{lcd1602_write_cmd(0x80+0x40+i+x); }else{lcd1602_write_cmd(0x80+i+x-16); }lcd1602_write_data(*str);str++;i++; } }
}
lcd1602.h
#ifndef _lcd1602_H
#define _lcd1602_H#include "public.h"//LCD1602数据口4位和8位定义,若为1,则为LCD1602四位数据口驱动,反之为8位
#define LCD1602_4OR8_DATA_INTERFACE 0 //默认使用8位数据口LCD1602//管脚定义
sbit LCD1602_RS=P2^6;//数据命令选择
sbit LCD1602_RW=P2^5;//读写选择
sbit LCD1602_E=P2^7; //使能信号
#define LCD1602_DATAPORT P0 //宏定义LCD1602数据端口//函数声明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);#endif
四、代码测试
这里我们实现了LCD1602左移显示。
void main()
{ lcd1602_init();//LCD1602初始化while(1){lcd1602_show_string(0,0,"Hello World!");//第一行显示lcd1602_show_string(0,1,"0123456789");//第二行显示lcd1602_write_cmd(0x18);delay_ms(1000);}
}
总结
LCD1602是一种液晶显示器,可以用于显示文本和图形信息。它具有低功耗,高分辨率和易于使用的特点,可以用于多种应用,如计算机控制、液晶显示器、汽车仪表板等。它可以用于显示汉字、英文字符、图形和数字,可以实现更高的效率和速度。
使用LCD1602可以帮助我们实现非常多的功能,使用他我们可以制作电子时钟,密码锁等小项目,希望大家好好理解这个模块。
相关文章:

51单片机LCD1602的使用
文章目录前言一、LCD1602简单介绍二、LCD1602中各个引脚的作用四、LCD1602命令解析1.写命令2.写数据3.清屏指令4.光标归位指令5.进入模式设置指令6.显示开关控制指令7.设定显示屏或光标移动方向指令三、LCD1602代码编写四、代码测试总结前言 本篇文章将为大家讲解LCD1602的使用…...

[深入理解SSD系列综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
版权声明:付费作品,未经许可,不可转载前言SSD (Solid State Drive),即固态硬盘,通常是一种以半导体闪存(NAND Flash)作为介质的存储设备。SSD 以半导体作为介质存储数据&…...
zio1升级到zio2踩坑和总结
并不全,记录了一些流程和注意点。新项目建议直接用zio2! 首先,从1.0迁移到2.0,可以使用官方的scalefix规则完成一部分方法自动替换(迁移主要解决方法重命名,去掉Has)。 然后,添加依…...
【算法题】1834. 单线程 CPU
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个二维数组 tasks ÿ…...
Vue学习[2023]
笔记 一、Vue基础: 1.模板语法有2大类: 插值语法: 功能:用于解析标签体内容。 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 指令语法: 功能:用于…...

【Redis】Redis分片集群
【Redis】Redis分片集群 文章目录【Redis】Redis分片集群1. 搭建分片集群1.1 分片集群结构1.2 搭建分片集群1.2.1 集群结构1.2.2 准备实例和配置1.2.3 启动1.2.4 创建集群1.2.5 测试2. 散列插槽2.1 总结3. 集群伸缩4. 故障转移4.1 数据迁移5. RedisTemplate访问分片集群1. 搭建…...
【Android笔记81】Android之RxJava的介绍及其使用
这篇文章,主要介绍Android之RxJava及其使用。 目录 一、RxJava响应式编程 1.1、RxJava介绍 1.2、RxJava常用方法 (1)引入RxJava依赖...

Pr 定格拍照动画
哈喽,各位小伙伴!今天我们来学习一下如何制作定格拍照动画? 新建序列 新建一个1920*1080的序列,将视频拖入序列中 选择定格画面右键—插入帧定格分段中间部分就会变成一张图片(图片时长可伸缩) 复制素…...

放弃node-sass,启用sass
在下载一个新项目时运行:npm run install 发现报错 npm uninstall 异常 Error: Could not find any Visual Studio installation to use 或是 ------------------------- You need to install the latest version of Visual Studio npm ERR! gyp ERR! find VS incl…...

力扣旋转字符串
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍字符串旋转,左旋,右旋即旋转结果. 金句分享: ✨好好干&…...
Java 代码组织机制
包 使用任何语言进行编程都有一个相同的问题,就是命名冲突。 包类似于计算机中的文件夹,正如文件放在文件夹中,类和接口放在包中,为便于组织,文件夹一般是一个层次结构,包也类似。 包有包名,…...

【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务
作者:困了电视剧 专栏:《MySQL数据库》 文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正! 目录 索引 用法 底层逻辑…...

C++ 线程库
文章目录thread 创建mutexmutexrecursive_mutextimed_mutexlock_guard原子操作atomic条件变量condition_variable其他线程安全问题shared_ptr单例模式C 线程库是 C11 标准中引入的一个特性,它使得 C 在语言级别上支持多线程编程,不需要依赖第三方库或操作…...

python字典和集合——笔记
一、介绍 1、泛映射类型 collections.abc模块中有Mapping和MutableMapping这两个抽象基类,它们的作用是为dict和其他类似的类型定义形式接口(在Python 2.6到Python 3.2的版本中,这些类还不属于collections.abc模块,而是隶属于coll…...

TEX:显示文本
文章目录字体选择字体fontspec宏包根据字体形状控制字体为不同的字体形状选择不同的特征为不同的字体大小状选择不同的特征中文字体选择xeCJK宏包字体选择与设置XELATEX字体名查找字体集与符号居中与缩进居中单边调整两边缩进诗歌缩进列表itemize样例enumerate样例description样…...

SS-ELM-AE与S2-BLS相关论文阅读记录
Broad learning system for semi-supervised learning 摘要:本文认为,原始BLS采用的稀疏自编码器来生成特征节点是一种无监督学习方法,这意味着忽略了标注数据的一些信息,并且难以保证同类样本之间的相似性和相邻性,同…...

ESP32设备驱动-MAX6675冷端补偿K热电偶数字转换器
MAX6675冷端补偿K热电偶数字转换器 1、MAX6675介绍 MAX6675执行冷端补偿并将来自K型热电偶的信号数字化。 数据以 12 位分辨率、SPI™ 兼容的只读格式输出。 该转换器可将温度解析为 0.25C,读数高达 +1024C,并且在 0C 至 +700C 的温度范围内具有 8 LSB 的热电偶精度。 MAX…...
Python基础知识汇总(字符串四)
目录 字母的大小写转换 lower()方法 upper()方法 删除字符串中的空格和特殊字符 strip()方法...

C语言学习笔记——指针(初阶)
前言 指针可以说是C语言基础语法中最难的理解的知识之一,很多新手(包括我)刚接触指针时都觉得很难。在我之前发布的笔记中都穿插运用了指针,但是我一直没有专门出一期指针的笔记,这是因为我确实还有些细节至今还不太清…...

阿赵的MaxScript学习笔记分享十二《获取和导出各种数据》
大家好,我是阿赵,周日的早上继续分享MaxScript学习笔记,这是第十二篇,获取和导出各种数据 1、导出数据的目的 使用3DsMax建立3D模型后,很多时候需要输出模型到别的引擎去使用,常用的格式有Obj、FBX、SLT等…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...