文章目录

  • 硬件模块
  • 驱动程序
    • 实物模块驱动程序
    • Proteus仿真驱动程序(LM016L)
  • 总结

硬件模块

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。下图即是该模块:

点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。


Lcd1602A有16个引脚,两组电源引脚(1,2;15,16号引脚),8跟数据线(D0~D7),3跟控制引脚(4,5,6号引脚),3号引脚VL是辅助显示用的,一般在PCB板上接电位器,通过该引脚调节背光亮度。从数据线就可以知道,该模块与单片机并行通信,同时还要额外占用3根控制线。Lcd1602的指令主要有以下几种:

驱动程序

实物模块驱动程序

根据这些指令,我们可以选择性地往LCD1602A的寄存器内写控制命令控制命令、读取状态或者显示内容,下面是基于51单片机的部分必要的C程序:

/*******************IO引脚定义*********************************************/
sbit LCD_RS=P1^0;//定义引脚
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
/********宏定义***********************************************************/
#define LCD_Data P0
#define Busy  0x80 //用于检测LCD状态字中的Busy标识

上面代码是反映了单片机与LCD1602硬件连接的逻辑,最后一行应特别注意,最后一行定义了一个字节的数据,用于辅助判断LCD是否处于忙状态(检测这一状态十分重要,因为LCD处于忙的状态是无法再响应别的单片机的要求的,所以基本上上面指令表的每一个操作进行前都要先检测LCD是否处于空闲状态),其具体实现代码如下:

/***********写数据********************************************************/
void WriteDataLCD(unsigned char WDLCD)
{ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0;        //若晶振速度太高可以在这后加小的延时LCD_E = 0;      //延时LCD_E = 1;
}/***********写指令********************************************************/
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0; LCD_E = 0;LCD_E = 0;LCD_E = 1;
}/***********读数据********************************************************/
unsigned char ReadDataLCD(void)
{LCD_RS = 1; LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;return(LCD_Data);
}/***********读状态*******************************************************/
unsigned char ReadStatusLCD(void)
{LCD_Data = 0xFF; LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);
}/***********初始化********************************************************/
void LCDInit(void)
{LCD_Data = 0;WriteCommandLCD(0x38,0);     //三次模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0); Delay5Ms();WriteCommandLCD(0x38,1);    //显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1);    //关闭显示WriteCommandLCD(0x01,1);  //显示清屏WriteCommandLCD(0x06,1);  //显示光标移动设置WriteCommandLCD(0x0C,1);  //显示开及光标设置
}/***********按指定位置显示一个字符*******************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{Y &= 0x1;X &= 0xF;               //限制X不能大于15,Y不能大于1if (Y) X |= 0x40;         //当要显示第二行时地址码+0x40;X |= 0x80;             //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);
}

Proteus仿真驱动程序(LM016L)

#include "lcd.h"
#include <string.h>void sleep(int i)
{int x;while(i--){for(x=0;x<123;x++);}
}void LCD_Init(void)
{unsigned char x;
//    char c[]={0x38,0x0c,0x06,0x01,0x80};char c[] = {0x38,0x08,0x01,0x06,0x0c};for(x=0;x<5;x++){e = 0;rw = 0;rs = 0;LCD_DATA =c [x];e = 1;sleep(1);e = 0;}
}void DisplayOneChar(unsigned char x,unsigned char y,char val)
{x &= 0xf;y &= 0x1;if(y) x |= 0x40;x |= 0x80;e = 0;rw = 0;rs = 0;           LCD_DATA = x;e=1;sleep(1);e=0;e = 0;rw = 0;rs = 1;           LCD_DATA = val;e=1;sleep(1);e=0;
}void DisplayListChar(unsigned char x_s, unsigned char y_s, char xs[])
{unsigned char x,length;x_s &= 0xf;y_s &= 0x1;if(y_s) x_s |= 0x40;x_s |= 0x80;e = 0;rw = 0;rs = 0;           LCD_DATA = x_s;e=1;sleep(1);e=0;  length = strlen(xs);for(x = 0; x < length; x++){e = 0;rw = 0;rs = 1;           LCD_DATA = xs[x];e=1;sleep(1);e=0;}
}

总结

关注微信公众号“24K纯学渣”回复“lcd1602”获取程序文件。

LCD1602A模块的应用相关推荐

  1. 树莓派 使用 i2c 连接 LCD1602/LCD1602A 模块

    成品 准备 LCD1602/LCD1602A 模块 IIC LCD1602 拓展板 配置 raspi-config >>> Interfacing Options >>& ...

  2. Arduino DHT11温湿度模块 LCD1602A

    arduino 实现环境温湿度检测 涉及模块:DHT11模块,LCD1602A 接线图 LCD参考前面设计 实验代码 #include <dht11.h> #include <Liq ...

  3. 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  4. Arduino 超声波测距 LCD1602A

    arduino 实现超声波测距 涉及模块:四线超声波测距模块,LCD1602A LCD1602连接 实验代码: #include <LiquidCrystal.h> LiquidCryst ...

  5. Arduino 光敏传感器 LCD1602A

    arduino 实现光控灯,光控开关 涉及模块:光敏传感器,LCD1602A 接线图 实验代码: #include <LiquidCrystal.h> LiquidCrystal lcd( ...

  6. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  7. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

  8. Python 多线程总结(1)- thread 模块

    thread 模块 1. 单线程 首先看下单线程程序运行的例子,如下所示, import timedef loop0():print 'start loop0 begin', time.ctime() ...

  9. 关于python导入模块和package的一些深度思考

    背景 在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考. 首先什么是模块?什么是package? 模块:用来从逻辑上组织python代码(变量,函 ...

  10. Python Re 模块超全解读!详细

    内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...

最新文章

  1. First Chapter--Getting Started With Testing
  2. 成功解决pandas\core\frame.py:2754: SettingWithCopyWarning: A value is trying to be set on a copy of a s
  3. 【杂谈】有三AI季划成员的4大专属权益,你是否已经利用好了?
  4. 338. Counting Bits_比特位计数_简单动态规划
  5. 新增方法java_Java8_map新增方法
  6. python装饰器使用多吗_对于Python装饰器使用的一些建议
  7. Oracle打开虚拟机闪退,虚拟机上启动Oracle服务为什么自动停止,怎么处理?
  8. 本行没有输入值结余隐藏_仓库库存管理系统,内含逻辑公式,自动结余库存!操作简单易上手...
  9. KDD Cup 2020多模态召回比赛亚军方案与搜索推荐业务的业务应用
  10. linux开发板调试,用arm-gdb和gdbserver调试开发板的方法
  11. php之图片上传到服务器的原理
  12. Fleaphp函数用法举例
  13. s7200cpu224xp手册_S7-200 PLC DC224XP DC DC DC的接线图说明
  14. 计算机综合布线基本知识,综合布线系统基础知识学习
  15. 如何把动态硬盘转换为基本硬盘
  16. Java 应用压测性能问题定位经验分享
  17. bootstrap专栏 03.图文处理 02.图文排版
  18. Spring Boot面试必问:启动流程
  19. 【spark】一文(10分钟)入门spark
  20. 华为k662c的虚拟服务器,华为k662c光猫怎么样? 华为K662c拆机技巧

热门文章

  1. Oracle常用函数解析运用整理
  2. c# rar解压大小_C# 利用WinRAR (加密)压缩及解压缩
  3. 实验四 JSP内置对象的应用
  4. 数字电子技术第二章--逻辑代数与逻辑函数化简
  5. spss之数据处理(离散化)
  6. ADS(Advanced Design system)仿真对电路进行阻抗匹配
  7. 证书科普 | 国内主流BIM证书,原来差距这么大
  8. 高通9008刷机大法,避坑指南,救砖前提
  9. python实现ftp_python实现ftp(客户端)
  10. boss直聘一句话介绍优势_第一批被安永淘汰的00后实习生,就因为自我介绍说了这一句话!...