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

news2024/11/25 15:25:21

 本文为博主 日月同辉,与我共生,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

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

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

相关文章

Hive数据表操作--学习笔记

1&#xff0c;Hive数据表操作 1&#xff0c;建表语句和内外部表 ①创建内部表 create [external] table [if not exists] 表名( 字段名 字段类型 [comment 注释], 字段名 字段类型 [comment 注释], ... ) [row format delimited fields terminated by 指定分隔符];&#xff0…

深度学习之基于YoloV5血红细胞检测识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习已经在许多领域中得到了广泛的应用&#xff0c;包括医疗健康领域。其中&#xff0c;YOLO&#xff08;You O…

App加固中的代码混淆功能,让逆向工程师很头疼

App加固中的代码混淆功能&#xff0c;让逆向工程师很头疼 “我想离开浪浪山。” 在数次尝试破解某个App 时&#xff0c;某个逆向工程师无奈感慨道。 逆向工程师顾名思义就是把一个个完整的软件逆推&#xff0c;还原成一段段代码&#xff0c;方便破解。 比如给他们一个手机Ap…

行内样式、内部样式、外部样式

行内样式&#xff1a; 该元素的所在本行中使用style标记来写样式 内部样式&#xff1a; 在head标签中使用style标记来写样式 外部样式&#xff1a; 在head标签中使用link标记引用外部样式 注意优先级&#xff1a; 行内样式&#xff1e;内部样式&#xff1e;外部样式 代码…

ChatGPT简介及基本概念

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC &#x1f449;关于作者 专…

传输层——— UDP协议

文章目录 一.传输层1.再谈端口号2.端口号范围划分3.认识知名端口号4.两个问题5.netstat与iostat6.pidof 二.UDP协议1.UDP协议格式2.UDP协议的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 一.传输层 在学习HTTP等应用层协议时&#xff0c;为了便于理…

JMeter JDBC请求---操作MySql数据库

准备&#xff1a; 1、MySql的驱动jar包&#xff1a;mysql-connector-java-5.1.28.jar&#xff0c; 2、jmeter安装目录中修改编码格式&#xff1a;\bin\jmeter.properties &#xff1a;sampleresult.default.encodingUTF-8 3、连接数据库的连接地址、用户名、密码以及操作s…

在test用户下创建test1表并插入数据,然后将tes1t表的查询权限授予test2用户

文章目录 1、以 test 用户登录2、创建 test1 表3、插入数据4、查看数据5、授予权限创建用户test2以 test 用户登录并授予权限&#xff1a;使用test2用户登录查询&#xff0c;测试结果 1、以 test 用户登录 首先&#xff0c;您需要以 test 用户登录到数据库 sqlplus test/1232…

RocketMQ 分布式事务消息实战指南:确保数据一致性的关键设计

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

【数据结构】树与二叉树(十七):二叉树的基础操作:删除指定结点及其左右子树(算法DST)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

【软考篇】中级软件设计师 第四部分(三)

中级软件设计师 第四部分&#xff08;三&#xff09; 三十四. 结构化开发方法34.1 内聚34.2 耦合 三十五. 测试基础知识三十六. 面向对象36.1 UML图36.2 设计模式36.3 数据流图 读前须知&#xff1a; 【软考篇】中级软件设计师 学前须知 上一章节&#xff1a; 【软考篇】中级软…

在rt-thread中使用iperf触发断言卡死

问题触发 最近在适配sdio device驱动&#xff0c;CP芯片与AP芯片对接&#xff08;RK3399&#xff09;&#xff0c;准备使用iperf测试下能否AP与CP能否正常通信。CP芯片跑的是rt-thread系统&#xff0c;在使用sdio_eth_dev_init命令初始化后&#xff0c;使用iperf -c 192.168.1…

Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)

目录 前言&#xff1a; 一、什么是iBeacon技术 二、Uniapp连接iBeacon设备的准备工作 硬件设备&#xff1a; 三、Uniapp连接iBeacon设备的实现步骤 创建Uniapp项目&#xff1a; 四、Uniapp连接iBeacon设备的应用场景 室内导航&#xff1a; 五、Uniapp连接iBeacon设备的未来…

MQTT协议详解及在Android上的应用

MQTT协议详解及在Android上的应用 一、MQTT协议简介二、MQTT工作原理三、MQTT协议特点四、MQTT在Android上的应用4.1 准备工作4.2 示例代码 五、结论 本博客将全面介绍MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的基本概念、工作原理、特点以及在An…

网工内推 | 国企、上市公司售前,CISP/CISSP认证,最高18K*14薪

01 中电福富信息科技有限公司 招聘岗位&#xff1a;售前工程师&#xff08;安全&#xff09; 职责描述&#xff1a; 1、对行业、用户需求、竞争对手等方面提出分析报告&#xff0c;为公司市场方向、产品研发和软件开发提供建议&#xff1b; 2、负责项目售前跟踪、技术支持、需…

01Urllib

1.什么是互联网爬虫&#xff1f; 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那一台计算机上的数据便是蜘蛛网上的一个猎物&#xff0c;而爬虫程序就是一只小蜘蛛&#xff0c;沿着蜘蛛网抓取自己想要的数据 解释1&#xff1a;通过一个程序&#xff0c;根据Url(http://www.…

基于边缘智能网关的冬季管网智能监测应用

随着我国北方全面进入到冬季&#xff0c;多日以来严寒、降雪天气频发&#xff0c;民生基础设施也迎来冬季考验。尤其是民众生活仰赖的水、电、气管网&#xff0c;面临极端冰雪天气时易存在各种风险&#xff0c;包括管道水/气泄露损耗、低温冻裂、积雪压塌压损、冻结受阻等。 针…

广州华锐互动VRAR:VR教学楼地震模拟体验增强学生防震减灾意识

在当今社会&#xff0c;地震作为一种自然灾害&#xff0c;给人们的生活带来了巨大的威胁。特别是在学校这样的集体场所&#xff0c;一旦发生地震&#xff0c;后果将不堪设想。因此&#xff0c;加强校园安全教育&#xff0c;提高师生的防震减灾意识和能力&#xff0c;已经成为了…

Ubuntu22.04离线安装uwsgi问题记录

GCC4.8安装 1、报错信息1&#xff1a; 由于缺少gcc4.8环境导致的无法安装uwsgi 解决方案&#xff1a; 离线安装GCC4.8环境, GCC4.8.5离线安装步骤如下&#xff1a; 1、下载gcc的离线安装包及其依赖包&#xff0c;链接如下&#xff1a; https://download.csdn.net/download/…

vue源码分析(八)—— update分析(首次渲染)

文章目录 前言一、update首次渲染的核心方法__path__二、__path__方法详解1. 文件路径2. inBrowser的解析&#xff08;1&#xff09;noop 的空函数定义&#xff1a;&#xff08;2&#xff09;patch 的含义 3. createPatchFunction 的解析4. path 方法解析&#xff08;1&#xf…