文章目录

  • 前言
  • 一、LCD1602简单介绍
  • 二、LCD1602中各个引脚的作用
  • 四、LCD1602命令解析
    • 1.写命令
    • 2.写数据
    • 3.清屏指令
    • 4.光标归位指令
    • 5.进入模式设置指令
    • 6.显示开关控制指令
    • 7.设定显示屏或光标移动方向指令
  • 三、LCD1602代码编写
  • 四、代码测试
  • 总结

前言

本篇文章将为大家讲解LCD1602的使用方法。

一、LCD1602简单介绍

LCD1602是一种常用的液晶显示器,它的原理是通过液晶分子的振荡来控制显示内容的。液晶分子在电场的作用下,会发生振荡,从而改变液晶分子的极性,从而控制显示内容。液晶显示器的控制电路会根据输入的信号,控制电场的强度,从而控制液晶分子的振荡,从而控制显示内容。

二、LCD1602中各个引脚的作用

LCD1602的引脚有VSS、VDD、VO、RS、RW、E、D0-D7等。VSS和VDD分别为电源正负极;VO为显示屏的背光控制引脚;RS、RW、E分别为控制字符显示和数据读写的控制引脚;D0-D7为数据传输的引脚。

四、LCD1602命令解析

对于如何写命令我们直接看到数据手册就可以了。无论是写命令还是写数据我们只需要关注RS,R/W,E这几个引脚的电平即可。

1.写命令

当RS=0时代表输入指令。
R/W=0时代表向LCD写入指令或数据。
E是使能信号当E从1变为0时也就是下降沿会执行指令。

这里直接将要执行的命令写入LCD1602对应的数据端口即可。
写入后让E发生一个下降沿执行写入的指令。

void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}

2.写数据

当RS=1时代表输入指令。
R/W=0时代表向LCD写入指令或数据。
E是使能信号当E从1变为0时也就是下降沿会执行指令。
其实写数据和写命令的函数只是需要注意RS的电平即可,其他代码原理都是一样的。

void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}

3.清屏指令


根据手册可以知道只需要往数据端口写入0x01即可达到清屏效果。

void lcd1602_clear(void)
{lcd1602_write_cmd(0x01);
}

4.光标归位指令


光标归位指令写入0x02即可。

void lcd1602_CursorReset(void)
{lcd1602_write_cmd(0x02);
}

5.进入模式设置指令


将DB1设置为1每次写入一个字符后光标右移。
S=0写入数据后显示屏不移动。

void lcd1602_CursorReset(void)
{lcd1602_write_cmd(0x06);   //写入新数据后光标右移,显示屏不移动
}

6.显示开关控制指令


这里看自己的需求设置对应的指令。

7.设定显示屏或光标移动方向指令


字体左移

void lcd1602_LeftMove(void)
{lcd1602_write_cmd(0x18);
}

字体右移

void lcd1602_RightMove(void)
{lcd1602_write_cmd(0x1c);
}

三、LCD1602代码编写

lcd1602.c

这里使用普中的代码进行讲解。
这里使用的lcd1602是8位的,在lcd1602.h定义了一个宏来决定。

#include "lcd1602.h"/*******************************************************************************
* 函 数 名       : lcd1602_write_cmd
* 函数功能       : LCD1602写命令
* 输    入       : cmd:指令
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else   //4位LCD
void lcd1602_write_cmd(u8 cmd)
{LCD1602_RS=0;//选择命令LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=cmd;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入LCD1602_DATAPORT=cmd<<4;//准备命令delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif/*******************************************************************************
* 函 数 名       : lcd1602_write_data
* 函数功能       : LCD1602写数据
* 输    入       : dat:数据
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else
void lcd1602_write_data(u8 dat)
{LCD1602_RS=1;//选择数据LCD1602_RW=0;//选择写LCD1602_E=0;LCD1602_DATAPORT=dat;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入LCD1602_DATAPORT=dat<<4;//准备数据delay_ms(1);LCD1602_E=1;//使能脚E先上升沿写入delay_ms(1);LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif/*******************************************************************************
* 函 数 名       : lcd1602_init
* 函数功能       : LCD1602初始化
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动lcd1602_write_cmd(0x01);//清屏
}
#else
void lcd1602_init(void)
{lcd1602_write_cmd(0x28);//数据总线4位,显示2行,5*7点阵/字符lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动lcd1602_write_cmd(0x01);//清屏
}
#endif/*******************************************************************************
* 函 数 名       : lcd1602_clear
* 函数功能       : LCD1602清屏
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void lcd1602_clear(void)
{lcd1602_write_cmd(0x01);
}/*******************************************************************************
* 函 数 名       : lcd1602_show_string
* 函数功能       : LCD1602显示字符
* 输    入       : x,y:显示坐标,x=0~15,y=0~1;str:显示字符串
* 输    出         : 无
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{u8 i=0;if(y>1||x>15)return;//行列参数不对则强制退出if(y<1)  //第1行显示{    while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示{if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示{lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置 }else{lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置    }lcd1602_write_data(*str);//显示内容str++;//指针递增i++;    }   }else   //第2行显示{while(*str!='\0'){if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示{lcd1602_write_cmd(0x80+0x40+i+x);  }else{lcd1602_write_cmd(0x80+i+x-16); }lcd1602_write_data(*str);str++;i++;    }   }
}

lcd1602.h

#ifndef _lcd1602_H
#define _lcd1602_H#include "public.h"//LCD1602数据口4位和8位定义,若为1,则为LCD1602四位数据口驱动,反之为8位
#define LCD1602_4OR8_DATA_INTERFACE 0   //默认使用8位数据口LCD1602//管脚定义
sbit LCD1602_RS=P2^6;//数据命令选择
sbit LCD1602_RW=P2^5;//读写选择
sbit LCD1602_E=P2^7; //使能信号
#define LCD1602_DATAPORT P0 //宏定义LCD1602数据端口//函数声明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);#endif

四、代码测试

这里我们实现了LCD1602左移显示。

void main()
{   lcd1602_init();//LCD1602初始化while(1){lcd1602_show_string(0,0,"Hello World!");//第一行显示lcd1602_show_string(0,1,"0123456789");//第二行显示lcd1602_write_cmd(0x18);delay_ms(1000);}
}

总结

LCD1602是一种液晶显示器,可以用于显示文本和图形信息。它具有低功耗,高分辨率和易于使用的特点,可以用于多种应用,如计算机控制、液晶显示器、汽车仪表板等。它可以用于显示汉字、英文字符、图形和数字,可以实现更高的效率和速度。
使用LCD1602可以帮助我们实现非常多的功能,使用他我们可以制作电子时钟,密码锁等小项目,希望大家好好理解这个模块。

51单片机LCD1602的使用相关推荐

  1. 基于51单片机LCD1602电子时钟实物制作

    之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...

  2. 基于51单片机LCD1602显示

    基于51单片机LCD1602显示 要在1602上显示字符,要大概明白1602液晶显示屏工作原理. 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶 ...

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

    使用51单片机+lcd1602转接板-iic接口进行显示 某宝上有卖lcd1602与iic芯片pcf8574的整合,虽然lcd1602能直接用51单片机使用,不过经过整合之后只需要对SCL和SDA两个 ...

  4. Proteus8仿真:51单片机LCD1602显示

    51单片机LCD1602显示 元器件 原理图部分 代码 main.c 工程文件 元器件 元器件 名称 排阻 RESPACK-8 51单片机 AT89C51 LCD1602 LM016L 按键 BUTT ...

  5. 【Proteus仿真】51单片机+LCD1602驱动模板

    [Proteus仿真]51单片机+LCD1602驱动模板 Proteus仿真 主程序 /*51单片机LCD1602驱动模板 */ #include <REGX52.H> #include ...

  6. 【Proteus仿真】51单片机+LCD1602驱动显示模板程序

    [Proteus仿真]51单片机+LCD1602驱动显示模板程序 Proteus仿真 范例工程架构 LCD1602相关驱动显示函数 //函数或者变量声明 extern void LCD1602_del ...

  7. 51单片机——LCD1602液晶显示屏

    如下图:红框就是LCD1602液晶显示屏,他是可插拔的,插上去后数码管就会乱码无效了,因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD_D0~LC ...

  8. 51单片机LCD1602温度时钟万年历带闹钟DS18B20实践制作DIY- GC0046-出租车计价器

    一.功能说明: 基于51单片机设计-万年历带闹钟 功能介绍: STC89C52最小系统板. LCD1602 .DS1302.DS18B20.4个按键.蜂鸣器. 1.单片机获取DS1302的年月日时分秒 ...

  9. 51单片机LCD1602

    前言 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符.LCD1602主 ...

  10. 51单片机LCD1602 定时器时钟 实现年月日时分秒显示

    实现功能:利用51单片机的定时器原理制作时钟,显示使用LCD1602,可以显示时分秒年月日和星期 ,识别平年闰年,按键可调整时间日期,整点报时. 1.定时器中断实现时钟基本原理 若系统晶振为12MHZ ...

最新文章

  1. 肝!Python 100 例
  2. 大数据下的质量体系建设
  3. python类变量共享吗_第7.12节 可共享的Python类变量
  4. 大牛手把手教你!2021大厂Java面试经历
  5. Android项目导入时,出现的Could not write file 。。。.classpath错误的解决办法
  6. 20天掌握Pytorch文档链接
  7. linux知识点查阅
  8. LeetCode 516 最长回文子串
  9. webstorm中 scss或sass配置自动编译
  10. 大智慧705服务器文件夹,大智慧2文件目录结构.doc
  11. linux mbr 分区表修复,linux fdisk修复分区
  12. 电源完整性之Cadence Sigrity Power DC_电热协同仿真
  13. 案例——蚂蚁金服初探,唯一的金融互联网生态
  14. 华为云桌面远程办公,真香!
  15. 计算机管理中打开移动硬盘磁盘必须格式化,最佳解决方案:无法打开移动硬盘分区,并且未格式化解决方案。...
  16. 2011_STC_Minimizing Additive Distortion in Steganography using Syndrome-Trellis Codes Abstract
  17. NodeJS:redis 入门级使用示例 hgetall
  18. HDU--1010--Tempter of the Bone
  19. 一、slowfast 代码复现
  20. error: L6002U: Could not open file .\objects\xxx.o: No such file or directory

热门文章

  1. 计算机组成原理知识点2
  2. ORACLE 参数 O7_DICTIONARY_ACCESSIBILITY
  3. 互联网金融产品实战——安全开发篇
  4. ubuntu18使用preseed文件定制ISO镜像实现自动化安装
  5. php同子域单点登录,SSO 单点登录总结(PHP)(示例代码)
  6. 原生js video获取当前视频时间进度和视频总时长
  7. LeetCode_904 水果成篮
  8. 应用ceph对象存储(ceph-13.2.10)
  9. 关于EventBus使用总结
  10. idea读取文件时的路径问题