单片机——LCD1602

这篇具有很好参考价值的文章主要介绍了单片机——LCD1602。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.基础知识介绍
1.1、为什么叫1602
因为可以显示两行,一行16个
1.2、LCD1602管脚认识
单片机——LCD1602

编号 符号 引脚说明
1 VSS 电源地
2 VDD 电源正极
3 VEE 液晶显示偏压信号
4 RS 数据/命令选择(H/L)
5 R/W 读/写选择(H/L)
6 E 使能端
7 D0 数据
8 D1 数据
9 D2 数据
10 D3 数据
11 D4 数据
12 D5 数据
13 D6 数据
14 D7 数据

1.3、LCD1602关键性指令设置
1.3.1、清屏指令

管脚 对应二进制
RS 0
R/W 0
DB7 0
DB6 0
DB5 0
DB4 0
DB3 0
DB2 0
DB1 0
DB0 1

功能:

<1> 清除液晶显示器,即将 DDRAM 的内容全部填入"空白"的 ASCII
码 20H;
<2> 光标归位,即将光标撤回液晶显示屏的左上方;
<3> 将地址计数器(AC)的值设为 0。

1.3.2、模式选择指令

管脚 对应二进制
RS 0
R/W 0
DB7 0
DB6 0
DB5 0
DB4 0
DB3 0
DB2 1
DB1 I/D
DB0 S

功能:
设定每次定入 1 位数据后光标的移位方向 , 并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:

位名 设置
I/D 0=写入新数据后光标左移
I/D 1=写入新数据后光标右移
S 0=写入新数据后显示屏不移动
S 1=写入新数据后显示屏整体右移 1 个字符

1.3.3、显示开关控制指令

管脚 对应二进制
RS 0
R/W 0
DB7 0
DB6 0
DB5 0
DB4 0
DB3 1
DB2 D
DB1 C
DB0 B

功能:
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:

位名 设置
D 0=显示功能关
D 1=显示功能开
C 0=无光标
C 1=有光标
B 0=光标闪烁
B 1=光标不闪烁

设置完成之后,要判断液晶模块是否处于忙状态。

1.3.4功能设置指令

管脚 对应二进制
RS 0
R/W 0
DB7 0
DB6 0
DB5 1
DB4 DL
DB3 N
DB2 F
DB1 X
DB0 X

功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:

位名 设置
DL 0=数据总线为 4 位
DL 1=数据总线为 8 位
N 0=显示 1 行
N 1=显示 2 行
F 0=5×7 点阵/每字符
F 1=5×10 点阵/每字符

0x38:00111000,就是数据总线8位,显示两行,以5×7 点阵/每字符 进行显示。

2、程序解释
2.1、宏定义
头文件,宏定义,根据连接定义端口
单片机——LCD1602

#include <reg52.h>
#include <intrins.h>


//定义端口
sbit duan=P2^6;
sbit wei=P2^7;

sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P2^5;

#define uchar unsigned char
#define uint unsigned int
#define Data P0 //	  数据接在P0

#define	  RS_commad	 RS=0 	//命令
#define	  RS_data	 RS=1 	//数据
#define	  RS_write	 RW=0	//写
#define	  RS_read	 RW=1	//读
#define	  E_close	 E=0	//使能关
#define	  E_open	 E=1	//使能开	

2.2 、延时部分(具体解释见之前的博客)

void delay(uint k)
{
 uint i,j;
 for(i=0;i<k;i++)
  {
	 for(j=0;j<113;j++)
	  {
	  ;
	  }
  }

}

2.3、数码管关闭程序
在1602程序中需要调用数码管的程序,是因为其中的cmg函数用于关闭数码管,在LCD控制时需要先关闭数码管,避免两者的干扰。

void cmg ()
{
duan=1;
wei=1;
P0=0x00;
duan=0;
wei=0;	  
}

2.4、写命令
2.4.1、程序里面用到了延时,原因是在写命令时,需要给液晶一定的响应时间。如果没有延时,液晶可能无法正确地接收到指令,从而无法正常显示。一般情况下,液晶的响应时间为几微秒至几毫秒不等,具体时间取决于液晶型号和工作状态。这里的5毫秒延时是为了确保液晶能够正确地接收到指令。
2.4.2、nop
nop(); 是汇编指令,表示“空操作(no operation)”,也就是不执行任何操作,只是占用一个CPU周期。在这个代码中,可能是为了等待指令执行完毕,延长执行时间,确保程序的正确性。

void writecom (uchar command)
{
 delay(10)
 RS_command;	 
 RW_write;
 E_open;
 Data=data;
 _nop_();
  E_close; 	 
}

2.5、写数据
与上面写命令逻辑是相同的

void writedata (uchar da)
{
  delay(10);
 RS_data;	 
 RW_write;
 E_open;
 Data=da;
 _nop_();
  E_close;
 	 
}

2.6、写字符
先进行写命令,让它写在哪一行,之后写入数据。x,y代表横纵坐标

void writechar(uchar x,uchar y,uchar c)
{
 if (y==0)
 {
   writecom(0x80+x);//10000000,写在第一行
 }
 else
 {
  writecom(0xc0+x);
 }

  writedata(c);

}

2.7、写字符串
与写字符的区别在于,字符串是很多构成的所以说要进行循环,不断写,直到写完,跳出循环。

void writestring(uchar x,uchar y,uchar *s)
{
 if (y==0)
 {
   writecom(0x80+x);//10000000,写在第一行
 }
 else
 {
  writecom(0xc0+x);
 }
  
  while(*s)
  {
   writedata(*s);
   s++;
  }

}

2.8、初始化
主要参照我上面列出的表格,确定LCD的显示模式,例如设置光标,以及光标移不移动,等等。
设置显示模式需要发送三次指令0x38,每次发送可以确保指令被正确接收。0x38表示设置显示模式为8位数据总线,2行显示,5x7点阵字符,这是一种常用的基本显示模式。

void Init()
{
 cmg();
 delay(10);
 writecom(0x38);  //设置显示模式
 writecom(0x38);
 writecom(0x38);

 writecom(0x0e);	//显示开关控制,显示功能开,有光标,	光标不闪烁
 writecom(0x06);   // 写入数据光标右移,显示屏不移动
 writecom(0x01);  //清屏

}

2.9、主函数
进行初始化,调用写字符和字符串进行写入显示

void main()
{
Init();
while(1)
{
 writechar(1,0,'d');	//第一行1位置上写字符d
 writechar(2,0,'a');	// 第一行位2置上写字符a

  writestring(3,0,"npianji");
  writestring(1,1,"tainanle");

}

}

3、完整代码

#include <reg52.h>
#include <intrins.h>


//定义端口
sbit duan=P2^6;
sbit wei=P2^7;

sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P2^5;

#define uchar unsigned char
#define uint unsigned int
#define Data P0 //	  数据接在P0

#define	  RS_command	 RS=0 	//命令
#define	  RS_data	 RS=1 	//数据
#define	  RW_write	 RW=0	//写
#define	  RW_read	 RW=1	//读
#define	  E_close	 E=0	//使能关
#define	  E_open	 E=1	//使能开	


//延时部分
void delay(uint k)
{
 uint i,j;
 for(i=0;i<k;i++)
  {
	 for(j=0;j<113;j++)
	  {
	  ;
	  }
  }

}

//数码管部分,注意是关数码管
void cmg ()
{
duan=1;		  //段开启
wei=1;
P0=0x00;
duan=0;
wei=0;	  
}

//写命令
void writecom (uchar command)
{
 delay(10);
 RS_command;	 
 RW_write;
 E_open;
 Data=command;
 _nop_();
  E_close;	 
}

//写数据
void writedata (uchar da)
{
  delay(10);
 RS_data;	 
 RW_write;
 E_open;
 Data=da;
 _nop_();
  E_close;
 	 
}

//写字符  (确定坐标)
void writechar(uchar x,uchar y,uchar c)
{
 if (y==0)
 {
   writecom(0x80+x);//10000000,写在第一行
 }
 else
 {
  writecom(0xc0+x);
 }

  writedata(c);

}

//写字符串
void writestring(uchar x,uchar y,uchar *s)
{
 if (y==0)
 {
   writecom(0x80 + x);//10000000,写在第一行
 }
 else
 {
  writecom(0xc0+x);
 }
  
  while(*s)
  {
   writedata(*s);
   s ++;
  }

}

//初始化
void Init()
{
 cmg();
 delay(15);
 writecom(0x38);  //设置显示模式
 writecom(0x38);
 writecom(0x38);

 writecom(0x0e);	//显示开关控制,显示功能开,有光标,	光标不闪烁
 writecom(0x06);   // 写入数据光标右移,显示屏不移动
 writecom(0x01);  //清屏

}

//主函数
void main()
{
Init();
while(1)
{
  writestring(1,0,"danpianji");
  writestring(1,1,"tainanle");

}

}

4、运行结果
猜猜运行结果是什么
单片机——LCD1602文章来源地址https://www.toymoban.com/news/detail-468800.html

到了这里,关于单片机——LCD1602的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 五一单片机之LCD1602

    👻1.LCD1602的介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模板,是一种字符型液晶显示模板,可以显示ASCll码的标准字符和其他的一些内置特殊字符还可以有8个自定义字符 显示容量:16*2个字符,每一个字符是5*7的点阵 (对于字符,其实每一个像素点是有

    2024年02月04日
    浏览(46)
  • 【【51单片机LCD1602模块介绍】】

    显示容量16x2 每个字符是5x7的点阵 VDD 是电源正极 4.5-5.5v VO 是对比度调节电压 RS 数据/指令 选择 1为数据0为指令 RW 读写选择1是读 0为写 E 使能 1为数据有效 下降沿执行命令 D0-D7 数据输入输出 A 背光电源正极 K 背光电源负极 LCD1602的操作流程 1.初始化: 发送0x38//八位数据接口,

    2024年02月15日
    浏览(35)
  • 51单片机LCD1602调试工具

    参考视频:江协科技51单片机 LCD1602头文件代码 LCD1602 C语言文件 LCD1602主函数文件

    2024年01月24日
    浏览(54)
  • 51单片机矩阵键盘——LCD1602显示

    本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86404949 使用矩阵键盘随意按下按键,LCD1602第二行前两位就会显示对应按键按下的数字。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用

    2023年04月09日
    浏览(42)
  • 51单片机(五)LCD1602调试工具

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月27日
    浏览(57)
  • MCU-51:单片机LCD1602详解

    LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:16×2个字符,每个字符为5*7点阵 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应

    2023年04月09日
    浏览(85)
  • 51单片机 | LCD1602 液晶显示实验

      在前面章节,我们已经学习过几种显示装置,例如静态数码管、动态数码管、 8*8LED 点阵、串口通信。使用它们可以直观显示一些字符数据,但是它们也有各种局限性,比如显示字符数据太少,硬件设计复杂、代码编写难度大等。这一章就来介绍一种非常简单且常用的显

    2023年04月11日
    浏览(60)
  • 单片机学习笔记---LCD1602功能函数代码

    目录 LCD1602.c 模拟写指令的时序 模拟写数据的时序 初始化 显示字符 显示字符串 显示数字 显示有符号的数字 显示16进制数字 显示二进制数 LCD1602.h main.c 上一篇讲了LCD1602的工作原理,这一节开始代码演示! 新创建工程:LCD1602功能函数代码 新创建main.c,LCD1602.c和LCD1602.h文件

    2024年02月19日
    浏览(57)
  • 【单片机】16-LCD1602和12864和LCD9648显示器

    (1)显示器,常见显示器:电视,电脑 (2)LCD(Liquid Crystal Display),液晶显示器,原理介绍 (3)LCD应用领域:手机,电脑 (4)将来取代LCD:LED,OLED【全面屏---软性】 1.像素(分辨率) 显示单元【液晶分子】 但是实际上: 像素!=分辨率 比如:出厂时电脑的像素已经确

    2024年02月08日
    浏览(58)
  • 51单片机外设系列:LCD1602 的详细编程

    前言,LCD1602是一个比较常用的单片机显示外设,下面我们从它的显示原理,来分析用51单片机编程的思路。另外结尾还提供了完成的程序代码参考。 一、LCD1602的外观、结构和基本参数 引脚功能解析: 第1引脚:GND为电源地脚。 第2引脚:VCC接5V电源正极。 第3引脚:VL为液晶显

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包