LCD1602指定位置显示字符串-详细版

 本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!

> 发布人:@日月同辉,与我共生_单片机-CSDN博客

> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。

系列专栏: CSDN-单片机串口通信学习系列🎁

> 我的格言是:“尽最大努力,做最好的自己!💪

要转载,请提前告知!!!

版权声明:本文为CSDN博主「日月同辉,与我共生」的原创文章,CSDN独一份。

目录

一、前言

二、系统设计思路

2.1硬件设计

2.2软件设计

三、硬件设计接线

四、项目代码

4.1命令模块

4.2读忙指令

4.3写命令

4.4写数据

4.5初始化

4.6位置函数

4.7显示字符

五、结果展示

一、前言

LCD1602是一种常见的液晶显示模块,它能够显示两行字符。在实际应用中,我们经常需要使用LCD1602来显示一些信息,例如温度、湿度、时间等。为了实现这个功能,我们需要编写相应的程序来控制LCD1602的显示。本文将介绍如何控制LCD1602显示两行字符的方法。

二、系统设计思路

系统设计思路可以分为硬件设计和软件设计

LCD1602在指定位置显示字符串"hello world"

2.1硬件设计

主控芯片选择:选择STC89C51作为主控芯片,由于其较高的性能和稳定性,适合用于控制和数据处理。

显示屏选择LCD1602用于传输字符数据和控制信号。

2.2软件设计

(1)LCD1602初始化(可以在游览器中下载LCD1602数据手册,查看初始化步骤)。

(2)LCD1602读写时序,用于读写数据或数据。

(3)在LCD1602屏中显示字符。

三、硬件设计接线

RS接P2^5 口,用于选择数据/命令寄存器。RS=0时,使用命令寄存器;RS=1时,使用数据寄存器。

RW接P2^6 口,用于选择读写寄存器。RW=0时,使用写寄存器;RW=1时,使用读寄存器。

使能端E接P2^7口

传输数据/命令(8位二进制)DB0-DB7,接P0口。

Vss接+5电源,VDD接地GND,VEE先接变阻器后接到地。

四、项目代码

不懂如何看读写时序图的,可以看:LCD1602设计(3)-读写时序

4.1命令模块

LCD1602.h

对LCD1602引脚接的I/O口宏定义,并对LCD1602的所有指令进行宏定义。

#ifndef __LCD1602_H__
#define __LCD1602_H__#include <reg51.h>
#include "lcd1602.h"//IO口宏定义
sbit LCD1602_RS=P2^5;
sbit LCD1602_RW=P2^6;
sbit LCD1602_E=P2^7;
#define LCD1602_DB P1//命令宏定义
#define LCD_SCREEN_CLR 0x01  //清屏
#define LCD_CURSOR_RST 0x02  //光标复位//显示开关控制指令
#define LCD_OFF        0x08 //显示关,光标关,不闪烁
#define LCD_FLI        0x09 //显示关,光标关,闪烁开
#define LCD_CUR        0x0A //显示关,光标开,不闪烁
#define LCD_CUR_FLI    0x0B //显示关,光标开,闪烁开
#define LCD_BIS        0x0C //显示开,光标关,不闪烁
#define LCD_BIS_FLI    0x0D //显示开,光标关,闪烁开
#define LCD_BIS_CUR    0x0E //显示开,光标开,不闪烁
#define LCD_ON         0x0F //显示开,光标开,闪烁开//显示模式控制
#define LCD_AC_ADD_MOVE    0x07 //数据读写操作后,AC自动加1,画面平移
#define LCD_AC_ADD         0x06 //数据读写操作后,AC自动加1,画面不平移
#define LCD_AC_RED_MOVE    0x05 //数据读写操作后,AC自动减1,画面平移
#define LCD_AC_RED         0x04 //数据读写操作后,AC自动减1,画面不平移//光标移动指令
#define SUR_LEFT          0x10 //光标左移,画面显示不移动
#define SUR_RIGHT         0x14 //光标右移,画面显示不移动
#define LCD_DIS_FRA_LEFT  0x18 //光标不移动,画面显示左移,操作后AC自增
#define LCD_DIS_FRA_RIGHT 0x1C //光标不移动,画面显示右移,操作后AC自减//功能设置
#define EDI4_DISONE_57  0x20 //4位数据接口,1行显示,5*7点阵
#define EDI4_DISONE_510 0x24 //4位数据接口,1行显示,5*10点阵
#define EDI4_DISTWO_57  0x28 //4位数据接口,2行显示,5*7点阵
#define EDI4_DISTWO_510 0x2C //4位数据接口,2行显示,5*10点阵
#define EDI8_DISONE_57  0x30 //8位数据接口,1行显示,5*7点阵
#define EDI8_DISONE_510 0x34 //8位数据接口,1行显示,5*10点阵
#define EDI8_DISTWO_57  0x38 //8位数据接口,2行显示,5*7点阵
#define EDI8_DISTWO_510 0x3C //8位数据接口,2行显示,5*10点阵//函数声明
void LCDReadBF();//读忙检测
void LCDWriteCmd(unsigned char cmd);//写命令
void LCDWritedata(unsigned char dat);//写数据
void LCDInit();//初始化
void LCDSetPosition(unsigned char x,unsigned char y);//位置函数
void LCDShowStr(unsigned char x,unsigned char y,unsigned char *str);//字符串位置显示函数#endif

4.2读忙指令

读时序图:

void LCDReadBF() //读忙检测(读命令)
{unsigned char i;unsigned char state;LCD1602_DB=0XFF;LCD1602_RS=0;LCD1602_RW=1;do{LCD1602_E=1;state=LCD1602_DB;//将LCD1602的数据给主机(单片机)LCD1602_E=0;i++;if(i>200)break;//防止忙过头,卡死}while(state&0x80); //判断忙不忙
}

4.3写命令

写时序图:

void LCDWriteCmd(unsigned char cmd) //写命令
{LCDReadBF();//读忙检测,确保LCD1602此刻不在工作LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;//将命令dat给LCD1602LCD1602_E=1;LCD1602_E=0;
}

4.4写数据

写时序图:

void LCDWritedata(unsigned char dat) //写数据
{LCDReadBF();//读忙检测,确保LCD1602此刻不在工作LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;//将数据dat给LCD1602LCD1602_E=1;LCD1602_E=0;
}

4.5初始化

初始化步骤:功能设置==>显示开关控制指令==>光标移动指令/显示模式控制

功能设置:接口位数(4位/8位)、显示多少行(1行/2行)、点阵类型(5*7点阵/5*10点阵)。

显示开关控制指令:是否显示字符、光标是否关闭、光标是否闪烁。

光标移动指令:光标不动/左移/右移、画面不动/左移/右移。

显示模式控制:光标左移/右移、画面左移/右移。

光标移动指令和显示模式控制有和区别?请关注我,下回出解析。

void LCDInit()
{LCDWriteCmd(EDI8_DISTWO_57);//8位数据接口,2行显示,5*7点阵LCDWriteCmd(LCD_BIS);//显示开,光标关,不闪烁LCDWriteCmd(SUR_RIGHT);//光标右移,画面显示不移动
}

4.6位置函数

每个位置对应一个DDRAM地址,LCD1602两行显示,1行最大显示16字符

第一行DDRAM地址为00H~0FH,第二行DDRAM地址为40H~4FH。

字符要在某个位置显示,并不是直接调用DDRAM地址,而是用通过写命令的方式完成。

通过LCD1602命令表格,可以看出位置显示命令:DDRAM的8个二进制的最高位为1,其他位不变。

void LCDSetPosition(unsigned char x,unsigned char y) //位置函数  y:行  0-1
{                                                    //          x:列  0-15if(y==0){LCDWriteCmd(0x80|x);}else{LCDWriteCmd(0x80|(x+0x40));}
}

4.7显示字符

显示"hello world":

#include "lcd1602.h"void main()
{unsigned char str[]="hello world";LCDInit();//初始化while(1){LCDShowStr(0,0,str);//在第0行第0列显示"hello world"//LCDShowStr(0,1,"hello world");}
}

五、结果展示

在第0行第0列开始显示字符串"hello world",显示一切正确。

下一文将着重 LCD1602四位接口,亲爱的读者敬请期待,下一文更精彩!!!

一日不读书,胸臆无佳想。我叫不白吃,喜欢我的,可以支持我,博主名叫@日月同辉,与我共生

@日月同辉,与我共生_单片机基础,单片机串口通信-CSDN博客@日月同辉,与我共生擅长单片机基础,单片机串口通信,等方面的知识,@日月同辉,与我共生关注stm32,c语言,51单片机,proteus,单片机领域.https://blog.csdn.net/LIN___IT?spm=1000.2115.3001.5343

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

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

相关文章

Django模板层

模板之变量 所有的数据类型都可以在模板中使用 render(request, index.html, context{}) render(request, index.html, contextlocals()) """在模板中使用变量的时候&#xff0c;用的是字典的key值&#xff0c;key值value值一般保持一致"""详细…

Linux安装RabbitMQ详细教程

一、下载安装包 下载erlang-21.3-1.el7.x86_64.rpm、rabbitmq-server-3.8.8-1.el7.noarch.rpm 二、安装过程 1、解压erlang-21.3-1.el7.x86_64.rpm rpm -ivh erlang-21.3-1.el7.x86_64.rpm2、安装erlang yum install -y erlang3、查看erlang版本号 erl -v4、安装socat …

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

初学者向导:Sketch设计软件自学教程大全

Sketch软件是Mac平台上流行的矢量图形编辑软件&#xff0c;旨在帮助用户创建各种设计原型&#xff0c;如网站、移动应用程序、图标等。Sketch软件的设计风格简单明了&#xff0c;界面操作简单易用&#xff0c;非常适合UI/UX设计师、平面设计师等数字创意人员。本文作为软件自学…

技巧篇:在Pycharm中配置集成Git

一、在Pycharm中配置集成Git 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0c;下载后一路直接安装即可&#xff1a; https://git-for-windows.github.io/ 0. git中的一些常用词释义 Repository name&#xff1a; 仓库名称 Description(可选)&#xff1a;…

基于 React 的 HT for Web ,由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互

本心、输入输出、结果 文章目录 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互前言什么是 HT for WebHT for Web 的特点如何使用 HT for Web相关链接弘扬爱国精神 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维…

这款开源神器,让聚类算法从此变得简单易用

Scikit-Learn 以其提供的多个经过验证的聚类算法而著称。尽管如此&#xff0c;其中大多数都是参数化的&#xff0c;并需要设置集群的数量&#xff0c;这是聚类中最大的挑战之一。 通常&#xff0c;使用迭代方法来决定数据的最佳聚类数量&#xff0c;这意味着你需要多次进行聚类…

Netty入门指南之NIO Selector监管

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题解…

YOLOv5项目实战(3)— 如何批量命名数据集中的图片

前言:Hello大家好,我是小哥谈。本节课就教大家如何去批量命名数据集中的图片,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目实战(2࿰

【L2GD】: 无环局部梯度下降

文章链接&#xff1a;Federated Learning of a Mixture of Global and Local Models 发表期刊&#xff08;会议&#xff09;: ICLR 2021 Conference&#xff08;机器学习顶会&#xff09; 往期博客&#xff1a;FLMix: 联邦学习新范式——局部和全局的结合 目录 1.背景介绍2. …

【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)

目录 0x00 便签存储器&#xff08;Scratchpad memory&#xff09; 0x01 缓存锁定&#xff08;Cache lockdown&#xff09; 0x02 读取 DRAM 内存 0x03 DREM Banking 0x04 DRAM 猝发&#xff08;DRAM Burst&#xff09; 0x00 便签存储器&#xff08;Scratchpad memory&#…

golang 解析oracle 数据文件头

package mainimport ("encoding/binary""fmt""io""os" ) // Powered by 黄林杰 15658655447 // Usered for parser oracle datafile header block 1 .... // oracle 数据文件头块解析 // KCBlockStruct represents the structure of t…

如何在聊天记录中实时查找大量的微信群二维码

10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码&#xff0c;那本文非常适合你阅读&#xff0c;因为本文的教程&#xff0c;可以让你在海量的微信消息中&#xff0c;实时地把二维码自动挑出来&#xff0c;并且帮你分类保存。 如果你是做网推的&#…

Reids集群

目录 一、集群的概念 1.为什么要搭建集群&#xff1f; 2.Redis搭建集群是否需要考虑状态同步的问题&#xff1f; 二、Redis集群的模式 1.redis集群--主从模式 1.1什么是Redis的主从模式&#xff1f; 1.2.主从模式它们之间的数据是怎么实现一个同步的&#xff1f; 1.3.主…

图形学 -- Geometry几何

隐式 implicit 基于给点归类&#xff0c;满足某些关系的点 缺点&#xff1a;不规则表面难以描述&#xff01; algebraic surface 直接用数学公式表示&#xff1a;不直观&#xff01; Constructive Solid Geometry&#xff08;CSG&#xff09; 用简单形状进行加减 distance …

腾讯云轻量服务器购买优惠,腾讯云轻量应用服务器优惠购买方法

你是否曾经为如何选择合适的服务器而苦恼&#xff1f;在互联网的海洋中&#xff0c;如何找到一个性价比高&#xff0c;性能稳定&#xff0c;价格合理的服务器供应商&#xff0c;确实是一个让人头疼的问题。今天&#xff0c;我要向你介绍的&#xff0c;是腾讯云轻量应用服务器的…

Perl爬虫程序的框架

Perl爬虫程序的框架&#xff0c;这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …

Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)

众所周知&#xff0c;在所有的编程语言中&#xff0c;C语言是一门颇具学习难度&#xff0c;需要很长学习周期的编程语言。甚至很多人经常听到一句调侃的话语——“C&#xff0c;从入门到放弃”。 C界的知名书籍特别多&#xff0c;从简单到高端书籍&#xff0c;许多书籍都是C之…

Java 反射设置List属性

使用 Java 反射可以动态地设置对象的属性值&#xff0c;包括 List 类型的属性。以下是一个示例代码&#xff0c;演示如何通过反射设置 List 类型的属性&#xff1a; 假设有一个类 Person&#xff0c;包含一个 List 类型的属性 names&#xff1a; java public class Person { …

SpringBoot--中间件技术-2:整合redis,redis实战小案例,springboot cache,cache简化redis的实现,含代码

SpringBoot整合Redis 实现步骤 导pom文件坐标 <!--redis依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>yaml主配置文件&#xff0c;配置…