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

一看就会的LCD1602的使用及自定义字符显示 相信通过该教程你已经学会了如何使用LCD1602的基础功能了。希望对你有所帮助,欢迎交流指正!工程文件链接:链接:https://pan.baidu.com/s/1e89qeOBmqtNZnGRnS1z1MQ提取码:d1gm。 阅读详情

 本文为博主 日月同辉,与我共生,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四位接口,亲爱的读者敬请期待,下一文更精彩!!!

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

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

LCD1602显示字符、字符串、十进制、十六进制、二进制 1.先定义端口,因为整个P0端口都是要传输的数据,这里用宏定义标识一下 2.LCD1602写指令,按照时序结构编写 3.LCD1602写数据,将字符显示在屏幕上 4.LCD1602初始化,在main函数中使用LCD时要先调用初始化函数 5.检测忙信号 6.LCD1602设置光标位置函数,因为每次要显示字符都要设置在屏幕的哪个位置显示,所以写成一个函数,供其他函数调用,先检测忙信号 6.LCD1602在指定的位置显示一个字符 7.LCD1602在指定位置上显示字符串 8.LCD1602在指定位置显示十进制数字 阅读详情

相关推荐

TFT-LCD屏幕显示ASCII字符和字符串

3.在写入24号字体时,因为字体宽度为12个像素点,而字模数组的数据都是8位的,所以12个像素点就只能先写8位,再写4位,写完一行的8位数据,ucPage+1,在字符的一维数组中找下一个8位的数据,但只循环4次,取低4位的数据,所以共写入了12位像素点数据,写完一行后屏幕会根据窗口宽度自动换行,所以下一行就再取数组中的两个字节写入,每次两个,直到48个字节都写完,就显示出了字符。写完8位是紧接着写4位的,并没有空格,图片为了区分8位和4位,加了空格。

weixin_46251230的博客 8040

10.lcd1602显示屏显示字符和字符串

LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)

黄色的拉拉的博客 2549

3. 51——LCD1602显示 字符、字符串、数字

51——LCD1602显示 字符 或 字符串LCD1602简介LCD1602相关引脚LCD1602写命令、写数据相关操作图写指令 代码写数据 代码LCD1602显示程序步骤及如何初始化显示开关控制指令进入模式设置指令功能设定指令清屏指令设置从(x,y)开始显示显示字符 或 字符串显示字符显示字符串接线图代码整合LCD1602.cLCD1602.hmain.c效果展示 LCD1602简介 LCD1602相关引脚 LCD1602写命令、写数据相关操作图 写指令 代码 void LCD_WriteComm

黄色的拉拉的博客 4万+

【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。

LCD1602显示字符和时间是最基本的实验,在综合前面所学知识并结合c语言程序设计,就可以通过独立按键,来对时间进行校准,计时等功能、或者通过矩阵键盘的按键进行输入,进而让LCD屏上显示的出我们想要的内容和效果。本实验采用的是12.000MHz晶振的51开发板. 代码1:(在LCD上显示“ Welcome to Baise University”-> (欢迎来到百色学院) ) 代码1:(LCD显示时间) 时间显示效果图 单纯的在LCD1602上面显示可变时间注:如果觉得时间不

yvge669的博客 2万+

基于FPGA的LCD1602显示屏驱动

一、LCD1602显示原理 1、引脚功能 其内部功能框图如下图所示: 一般来说,LCD1602有16条引脚,各个厂家的LCD1602可能略有不同,但基本上一样,其16个引脚功能如下: LCD1602引脚功能 引脚号 引脚名 电压等级 功能 1 VSS 0V 电源地 2 VDD +5V 电源正极 3 V0 0V 电压偏置 4 RS H/L 命令/数据 5 R/W H/L

phflovelt的博客 1万+

51单片机LCD1602液晶屏显示方法

51单片机LCD1602液晶屏显示方法 以显示hello,world! 2022.10.17 为例。

qq_64972872的博客 1万+

LCD1602字符串显示(STM32F103)

一、概述 基于STM32F103的LCD1602显示 1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不可以显示汉字,内置1128个字符的ASCII字符集,并行通信方式。本验是通过STM32F103C8T6最小系统驱动液晶滚动显示一串字符。 二、实验材料 1、STM32F103C8T6最小系统 2、LCD1602液晶 3、杜邦线若干 三、基本操作时序 状态 输入 输出 读状态 RS=L,RW=H,E=H D0-D7=状态 写指令 RS=L,RW=L,D0-D7=指令码,E

Me-Space的博客 1万+

LCD1602液晶显示屏使用方法

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:16×2个字符,每个字符为5*7点阵LCD1602背面的两个黑色的块是芯片,是自带扫描功能的,只需将字符传给LCD1602,芯片便会自己扫描显示可以看到,8位的数据都接到了单片机的P0口,控制位EN、RS、WR分别接到了P2.7、P2.6、P2.5口,后续编写代码时,初始化这几个引脚即可编写代码往DDRAM中写入指令或者数

weixin_46251230的博客 1万+

51汇编——LCD1602显示

这一小节写一个比较简单的显示屏LCD1602的驱动方法。 电压一般接5V。 简单说一下LCD的驱动流程:主要分为两部分,1、写指令,2.写数据。 写指令的作用主要是设置LCD的工作模式和指定显示的位置。写数据就是在指定的位置显示字符 那么如何写呢? LCD就是通过这些引脚的状态来判断你写入的那一串数字是指令还是数据的。 因为我们一般是用LCD来显示,所以基本上不会去读状态、读数据。所以只要看写指令输入和写数据输入就行了。 ----------------------...

DIJIANG321的博客 8664

【51单片机】LCD1602(江科大)

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符· 显示容量:16×2个字符,每个字符为5*7点阵。

2302_80796399的博客 8155

使用51单片机+lcd1602转接板-iic接口进行显示

使用51单片机+lcd1602转接板-iic接口进行显示~

linxinloningg的博客 1万+

Arduino基础入门篇31—LCD1602液晶显示

LCD1602也叫1602字符型液晶,是一种专门用来显示字母、数字、符号的点阵型液晶模块,能同时显示16X2即32个字符。本篇我们来认识LCD1602,驱动它显示「Hello World」。

Tonyの博客 4万+

51单片机用lcd1602显示两行字符串

本人打算写一个完整的万年历:这是开始的第一步 完整电路图: 完整代码: #include <reg51.h> #include <intrins.h> //包含_nop_( )空函数指令的头文件 #define uchar unsigned char #define uint unsigned int #define out P2 sbit RS=P3^0; sbit RW=P3^1; sbit E=P3^2; void lcd1.

fw1035的博客 1万+

LCD1602液晶显示模块

翻阅LCD1602说明书数据线占8根,有点像串口的SBUF(8位数据缓冲寄存器),单片机和LCD之间的数据交互也需要类似于SBUF的东西,但是不幸的是LCD1602没有串口,所以我们用一组I/O口(D0~D7)表示。:翻阅LCD1602说明书。

lzh201864031的博客 1万+

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

unique_sir的博客 1万+

OASIS协议标准文档的解读_第一部分

OASIS标准协议的文档的解读。完整原协议的中文翻译和解读。

洋葱的专栏 4903

使用LCD1602显示温度或切换显示时间

LCD1602显示

m0_62281625的博客 1万+

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 605

基于Proteus的LCD1602液晶显示学习

1.LCD1602简介 1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02即32个字符。 它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。 实物图如下: 2.LCD1602工作原理 LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,1602原理图如下: 各引脚接口说明如下

qq_47705694的博客 2万+

SRCNN超分辨率Pytorch实现,代码逐行讲解,附源码

超分辨率,就是把低分辨率(LR, Low Resolution)图片放大为高分辨率(HR, High Resolution)的过程。通过CNN将图像Y 的特征提取出来存到向量中。用一层的CNN以及ReLU去将图像Y 变成一堆堆向量,即feature map。把提取到的特征进一步做非线性映射,加大网络深度,提高网络复杂性。结合了前面得到的补丁来产生最终的高分辨率图像。实验步骤。

weixin_52261094的博客 3万+

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

【mcuclub】LCD1602显示屏

LCD1602显示屏

weixin_61121477的博客 7590

基于UCD3138的数字控制硬开关全桥DC-DC电源设计实战解析

在开关电源设计中,数字控制技术正逐步取代传统模拟方案,以其卓越的灵活性、可编程性和强大的数据处理能力,成为应对复杂动态响应与智能化需求的关键。其核心原理在于通过高精度模数转换器(ADC)实时采样电压、电流信号,经由数字信号处理器(如ARM内核)运行PID等控制算法,动态调整数字脉宽调制(DPWM)输出,从而实现对功率级的精确控制。这种技术价值体现在能够轻松实现高级算法(如输入电压前馈、非线性补偿)、灵活配置保护参数,并通过PMBus等接口实现智能化监控与管理。其典型应用场景包括通信基站、服务器电源以及工业设

1311

51单片机之LCD1602驱动

1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

weixin_44453694的博客 2595

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

SFT看这一篇就够了!万字长文:监督微调(Supervised Fine-Tuning, SFT)技术全解析【从理论到实战】

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。欢迎关注,一起探索技术的无限可能!

大F子的智能小课 711
上一篇: LCD1602命令代码整合
下一篇: LCD1602文章合集一
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值