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给LCD1602
	LCD1602_E=1;
	LCD1602_E=0;
}

4.4写数据

写时序图:

void LCDWritedata(unsigned char dat) //写数据
{
	LCDReadBF();//读忙检测,确保LCD1602此刻不在工作
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_DB=dat;//将数据dat给LCD1602
	LCD1602_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-15
	if(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业智能网关:工业物联网智慧连接

工业智能网关是工业互联网的核心设备之一&#xff0c;它承担着连接设备、搜集数据、分析数据、设备控制和实现设备智能化管理的重要任务。随着工业互联网的快速发展&#xff0c;工业智能网关的作用变得越来越重要。 计讯物联5G/4G工业智能网关是一种连接工厂设备与互联网的关键…

考虑区域多能源系统集群协同优化的联合需求侧响应模型(matlab代码)

该程序复现《考虑区域多能源系统集群协同优化的联合需求侧响应模型》文献模型&#xff0c;程序的核心是对多个区域级多能源系统互联系统进行多目标优化&#xff0c;并且考虑联合需求侧响应&#xff0c;以多个区域多能源系统运行总成本最小、碳排放最小为目标&#xff0c;建立多…

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

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

【问题处理】WPS提示不能启动此对象的源应用程序如何处理?

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近在用WPS打开word文件中&#xff0c;插入的Excel附件时&#xff0c;无法打开&#xff0c;提示&#xff1a;“不能启动此对象的源应用程序”。 经过上网查找处理办法&#xff0c;尝试解决&#xff0c;现将解决过程记…

python科研绘图:圆环图

圆环图是一种特殊的图形&#xff0c;它可以显示各个部分与整体之间的关系。圆环图由两个或多个大小不一的饼图叠加而成&#xff0c;中间被挖空&#xff0c;看起来像一个甜甜圈。因此&#xff0c;圆环图也被称为“甜甜圈”图。 与饼图相比&#xff0c;圆环图的空间利用率更高&a…

腾讯云新客户优惠服务器88元/年,540元/3年,另有5年优惠服务器

在选择云服务器时&#xff0c;首先需要考虑的是性能与配置是否与自己的需求相匹配。对于小型网站或者个人博客&#xff0c;轻量应用服务器是一个不错的选择。腾讯云双十一活动中&#xff0c;2核2G轻量应用服务器的活动优惠价为88元/年&#xff0c;2核4G轻量应用服务器的活动优惠…

【软件安装】Centos系统中安装docker容器(华为云HECS云耀服务器)

这篇文章&#xff0c;主要介绍Centos系统中安装docker容器&#xff08;华为云HECS云耀服务器&#xff09;。 目录 一、安装docker 1.1、卸载旧版本docker 1.2、更新repo镜像 1.3、安装依赖包 1.4、添加docker-ce镜像 1.5、安装docker-ce 1.6、查看docker安装版本 1.7、…

深度学习之基于Yolov5的车流或人流量密度统计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 YOLOv5 DeepSort 车流/人流量密度统计介绍YOLOv5DeepSort车流/人流量密度统计 二、功能三、系统四. 总结 一项目简介 YOLOv5 DeepSort 车流/人流量密度统计…

保驾“双十一” 博睿数据助力电商零售迎高峰无烦忧

如果说“双十一”大战的A面是由天猫、京东、拼多多、唯品会等电商平台&#xff0c;以及一些MCN机构、头部主播拉动的一系列购物狂潮&#xff0c;那么B面则是零售、物流、制造、银行保险等全产业链面对海量流量之下&#xff0c;以强大的心力、脑力与体力应对流量增加和交易陡增的…

1116中信笔试

1116中信笔试 int, Integer的区别&#xff0c;相等如何判断结果Java的异常处理数据库的事务操作Redis的基本数据类型问了HashMap底层实现TCP协议MySQL的隔离级别创建线程的几种方式双亲委派机制 &#xff0c;它的优点linux命令&#xff08;查看线程&#xff09; java和数据库ha…

【云原生-Kurbernets篇】Kurbernets集群的调度策略

调度 一、Kurbernetes的list-watch机制1.1 list-watch机制简介1.2 创建pod的流程&#xff08;结合list-watch机制&#xff09; 二、Scheduler的调度策略2.1 简介2.2 预选策略&#xff08;predicate&#xff09;2.3 优选策略&#xff08;priorities&#xff09; 三、标签管理3.1…

【C语言 | 指针】指针和数关系——剪不断,理还乱

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

云ES高级监控告警

一、高级监控告警配置 1.1 操作入口 1.2 配置告警模块 1.2.1 新建联系人 添加联系人后,需要进行激活 1.2.2 新建联系人组 1.2.3 创建报警组 1.2.4 新建报警规则

超市管理系统

闲着无聊写了个超市管理系统&#xff0c;包括商品管理、进销存、角色权限管理&#xff0c;很不错的项目分享给大家 1 商品管理 1.1 分类管理 分类信息主要包括名称、描述&#xff0c;可以进行停用、启用 1.2 商品信息 1.3 积分商品 1.4 销售统计 2 库存管理 2.1 仓库管理…

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

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

【AI视野·今日Robot 机器人论文速览 第六十五期】Mon, 30 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 30 Oct 2023 Totally 18 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Gen2Sim: Scaling up Robot Learning in Simulation with Generative Models Authors Pushkal Katara, Zhou Xian, Katerina F…

9.程序的机器级代码表示,CISC和RISC

目录 一. x86汇遍语言基础&#xff08;Intel格式&#xff09; 二. AT&T格式汇编语言 三. 程序的机器级代码表示 &#xff08;1&#xff09;选择语句 &#xff08;2&#xff09;循环语句 &#xff08;3&#xff09;函数调用 1.函数调用命令 2.栈帧及其访问 3.栈帧的…

Backblaze 2023 Q3硬盘故障质量报告解读

作为一家在2021年在美国纳斯达克上市的云端备份公司&#xff0c;Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告&#xff0c;给大家提供了一份真实应用场景下的稳定性分析参考数据。2023年度之前发布的两次报告&#xff0c;请参考&#xff1a; Backblaze发布2…

为什么LDO一般不用在大电流场景?

首先了解一下LDO是什么&#xff1f; LDO&#xff08;low dropout regulator&#xff0c;低压差线性稳压器&#xff09;或者低压降稳压器&#xff0c;它的典型特性就是压降。 那么什么是压降&#xff1f; 压降电压 VDO 是指为实现正常稳压&#xff0c;输入电压 VIN 必须高出 所…

C语言指针强制的本质

今天看到这样一段项目代码&#xff0c;某个函数传入了一个void类型的指针&#xff0c;并在函数内部将其强转为了某结构体类型指针&#xff0c;利用该指针获取结构体中变量之后&#xff0c;又将指针转换为char类型并偏移结构体大小的长度获取数据。代码如下 void recv_omu_data(…