想要使用lcd1602这款液晶显示屏,首先要了解这款显示屏的工作原理和特点:

1. 了解:

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

下面是模块样件图片:

在上图中可以看到有 16 个管脚孔,从左至右管脚编号顺序是 1-16,其功能定义如下所示:

引脚说明:

3 脚:VL,液晶显示偏压信号,用于调整 LCD1602 的显示对比度(也就是屏幕亮的程度,目的是要能清晰的显示内容),一般会外接电位器用以调整偏压信号,注意此脚电压为 0 时可以得到最强的对比度。
4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对 1602 进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。(命令字节:也就是要怎么显示的配置);数据字节,即使用以在 1602 上显示的字节。值得一提的是,LCD1602 的数据是 8 位的。
5 脚:R/W,读写选择端。当此脚为高电平可对 LCD1602 进行读数据操作,反之进行写数据操作。
6 脚:E,使能信号,其实是 LCD1602 的数据控制时钟信号,利用该信号的上升沿实现对 LCD1602 的数据传输。低电平无效
7~14 脚:8 位并行数据口。

内部地址说明:

在 LCD1602 内部含有 80 个字节的 DDRAM(掉电丢失),它是用来寄存显示字符的。其地址和屏幕的对应关系如下表:

从上图可知,不是所有的地址都可以直接用来显示字符数据,只有第一行中的 00-0F,第二行中的 40-4F 才能显示,其他地址只能用于存储。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,因为写入显示地址时要求最高位 D7 恒定为高电平 1,所以在写入地址的时候是:写入点地址+0x80H

常用命令

(1)清屏指令:

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

(2)模式设置指令

功能:
设定每次写入 1 位数据后光标的移位方向,并且设定每次写入的一个字符是否移动(流水屏)。
I/D:0=写入新数据后光标左移 1=写入新数据后光标右移
S: 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移 1 个
(3)显示开关控制指令

功能:
控制显示器开/关、光标显示/关闭以及光标是否闪烁。
D:0=显示功能关 1=显示功能开
C:0=无光标 1=有光标
B:0=光标闪烁 1=光标不闪烁
(4)功能设定指令

功能:
设定数据总线位数、显示的行数及字型。
DL:0=数据总线为 4 位 1=数据总线为 8 位
N:0=显示 1 行 1=显示 2 行
F:0=5×7 点阵/每字符 1=5×10 点阵/每字符
(5)读忙指令

字符集

在单片机编程中还可以用字符型常量或变量赋值,如’B’。因为CGROM储存的字符代码与我们PC中的字符代码是基本一致的,因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='B’这样的方法。PC在编译时就把’B’先转换为42H代码了。
自定义字符:字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
标准字符:0x20~ 0x7F为标准的ASCII码,0xA0~ 0xFF为日文字符和希腊文字符,其余字符码(0x10 ~ 0x1F及0x80~0x9F)没有定义。

2. 使用

要使用 LCD1602,首先需要对其初始化,即通过写入一些特定的指令实现。然后选择要在 LCD1602 的哪个位置显示并将所要显示的数据发送到 LCD 的DDRAM。使用 LCD1602 通常都是用于写数据进去,很少使用读功能。LCD1602 操作步骤如下所示:
(1)初始化
(2)写命令(RS=L),设置显示坐标
(3)写数据(RS=H)

时序图分析:

在此我们看两个写时序和一个读时序:
①:当写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平 E置低电平,注意看是RS的状态先变化完成。而后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的高电平跳变,接着要维持时间最小值为tpw=150ns的E脉冲宽度(定义的时候时最好远达大于这个值)。而后E引脚低电平跳变RS电平变化,R/W电平变化。这样即是一个完整的LCD1602写命令的时序。

② 当要写入数据字,在 1602 上实现显示时:初始把 RS 置为高电平,RW 置为低电平、E使能为低电平,然后写入数据至 D0~D7,然后E拉高保持最小脉冲宽度,而后E置低电平等待下一次使用。与写命令区别在与一个RS,表示是命令还是数据

③ 读命令(这里我们用于读忙指令):初始把 RS 置为低电平,RW 置为高电平、E置低电平等待几个指令时间等待数据稳定,E置高电平,等待几个指令时间等待数据稳定,读端口D0-D7,E置低电平。

:进行忙检测的原因:等待lcd1602工作完成,1602的速度是跟不上单片机的,假设此时1602处于忙状态,那么你的写数据或命令操作是无效的。处理这种现象的一般有两种:一种是检测忙信号,一种是延时

2.1 代码部分

延时函数的构建
根据上述特点我们了解到,想要控制这个模块首先需要准确的时钟来保证高低电平时间的准确性,所以无论你使用哪一款单片机,首先搞清楚你使用的这款单片机的时钟的当前工作频率是多少,然后根据时钟来构建好准确的延时函数,我就因为时钟问题导致现象未出。

//stm8951单片机: 晶振12MHz  机器周期 1us,指令周期是 1-4 个机器周期
void Delayms(uint c) //一个简单的延时函数
{uchar i,j;for(;c>0;c--)for(i=199;i>0;i--)for(j=1;j>0;j--);
}

检测忙函数构建

void Lcd1602_ReadBusy()   //判断lcd1602是否处于忙的状态,即读忙{uchar temp=0x80;while(temp&0x80) //当D7读出来为0时,为不忙,跳出循环{RS = 0;RW = 1;E  = 0;_nop_(); _nop_(); //一个空指令,即让单片机空跑一个指令周期E=1;_nop_();temp=P0;   //读取D0-D7端口E=0;_nop_();}}

使用忙检测方式构建的初始化、数据、命令写函数

    void Lcd1602_WriteCom(uchar com)  //写命令{Lcd1602_ReadBusy();  //判忙RS=0;   //命令RW=0;   //写_nop_();P0=com;   //准备发送命令 这里可以吧P0写成宏,代码迁移修改宏就可以_nop_();E=1;      //由时序图知,使能端为高电平时才允许数据交换_nop_(); _nop_();E=0;      //由时序图知,使能端在完成数据交换后要拉低_nop_(); _nop_();   }void Lcd1602_WriteData(uchar dat)  //写数据{Lcd1602_ReadBusy();   //判忙RS=1;   //数据RW=0;   //写_nop_();P0=dat;_nop_();E=1;_nop_(); _nop_();E=0;_nop_();_nop_();   }void Lcd1602_init()   //初始化函数{Delayms(10); //等待1602工作稳定Lcd1602_WriteCom(0x38);   //显示模式设置 8位两行 5*7点阵Lcd1602_WriteCom(0x0c);  //显示开Lcd1602_WriteCom(0x01);  //显示清屏Lcd1602_WriteCom(0x06);  //显示光标,写一个字符数据后,地址指针后移Lcd1602_WriteCom(0x80);  //设置显示起始地址}

采用的延时方式构建的初始化、数据、命令写函数

void LcdWriteCom(uchar com) //写入命令
{E = 0; //使能RS = 0; //选择发送命令RW = 0; //选择写入P0 = com; //放入命令Delayms(1); //等待数据稳定E = 1; //写入时序Delayms(5); //保持时间E = 0;
}
void LcdWriteData(uchar dat) //写入数据
{E = 0; //使能清零RS = 1; //选择输入数据RW = 0; //选择写入P0 = dat; //写入数据Delayms(1);E = 1; //写入时序Delayms(5); //保持时间E = 0;
}
void LcdInit() //LCD 初始化子程序
{Delayms(10); //等待1602工作稳定LcdWriteCom(0x38); //开显示LcdWriteCom(0x0c); //开显示不显示光标LcdWriteCom(0x06); //写一个指针加 1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //设置数据指针起点
}

4.第四步 具体使用实例:

void main(){uchar i,j;uchar text1[]="   Bao Li Yu    ";   //第一行要显示的字符uchar text2[]="   2022.05.03   ";   //第二行要显示的字符Lcd1602_init();Lcd1602_WriteCom(0x80);   //设置显示起始地址  0x80是第一行的第一个字符的地址//下面的显示函数也可以封装起来for(i=0;i<10;i++) //第一行显示内容显示写入 {Lcd1602_WriteData(text1[i]);}Lcd1602_WriteCom(0x80+0x40);  // 第二行显示起始地址 0x80+0x40是第二行第一个字符地址/*表示的方法有很多,可以用0xc0,0x80+0x40,0x80|0x40等等*/for(j=0;j<10;j++){Lcd1602_WriteData(text2[j]);}  }

文末总结:lcd1602的使用其实是比较简单的,你只要需要看懂时序图,然后按照时序图进行命令数据的读写操作就可以实现,看懂时序图真的很重要,这是迈入单片机领域非常关键的一步,因为你看懂以后,你可以非常轻松的操作各种外设模块来实现你想要的功能,下次我换一块难一点的显示屏来写给大家看。上文若错误的地方可以指出,毕竟我会的也不全面,会尽快进行改正的。

关于LCD1602液显的使用细则相关推荐

  1. PM2.5环境检测系统的设计与分析

    PM2.5环境检测系统的设计与分析   摘要: 大气颗粒物污染对人类健康和生态环境造成了很大的影响,这让人们逐渐重视起对细颗粒物PM2.5检测技术的研究.本文阐述了PM2.5浓度检测的五种方法,在对上 ...

  2. LCD1602 液晶显示实验

    LCD1602 简介 LCD1602是一种用来显示字母.数字.符号的点阵型液晶模块,可显示 2 行字符信息,每行又能显示 16 个字符,每个字符由若干个( 5x7 或 5x10) 的点阵字符位组成, ...

  3. 智能窗帘定时程序c语言,基于单片机智能窗帘控制系统设计

    解启松 聂志刚 摘要:该文阐述了自动光控起闭窗帘的整个设计流程,具体描述了在整个制作过程中硬件电路的设计以及它们实现的功能和软件语言的驱动.这套系统可分为电子自动控制和机械传动两部分,前者使用STC8 ...

  4. 七天入门linux,一个Linux新手的七天

    一个Linux新手的七天 发布时间:2007-02-08 21:17:27来源:红联作者:Message 星期一:下载一个RED 9.0. 可以装上去,认液晶显示器,不知道自己显示器具体常数的人不能正 ...

  5. html大学生活主题班会,我的大学生活主题班会策划书

    我的大学生活主题班会策划书 为了帮助同学们更加的了解大学生活的多样性,更加明确大学生活的意义与目的,进一步为自己将来的生活方式做好充分的考虑和选择,同时为了增进我班同学与兄弟班级同学之间的相互了解,加 ...

  6. java中的类方法和实例方法_下面关于Java语言中实例方法和类方法的说法,哪几项是对的?...

    下面关于Java语言中实例方法和类方法的说法,哪几项是对的? 答:类方法可以直接通过类名调用. 实例方法可以操作实例变量也可以操作类变量. 当前我国银行同业拆借利率属于 答:市场利率 创业训练项目是学 ...

  7. 手把手教你煮一锅水米分明的潮汕砂锅粥

    卤味.手打牛肉丸.牛肉火锅.粿条.粿肉--潮汕人长时间钻研美食文化,形成一套南北通吃的美食系统.潮汕朋友说起家乡美食,让他们怀念与推崇的首位--就是潮汕砂锅粥. 粥--潮汕人最爱的早餐 中国人食粥的历 ...

  8. war3骚招之剑牛拆家流

    因为昨天晚上没有看小说玩游戏,所以今天一大清早就醒了 平时都是躺在床上玩到凌晨4~5点才睡觉,昨天想了下这样对身体不好,于是不到1点便睡觉了 这只是一个开始,今后会尽量在晚上11点前睡觉,人早睡早起身 ...

  9. RS-169系列产品说明书

    RS-169系列产品说明书 一.产品简介 RS-169系列是新一代考勤门禁系统产品,灵活的排班.刷卡.人工签卡.加班申请.人员到岗查询.极速考勤计算.报表.数据导出导入,大容量存储等性能,不仅可作为功 ...

最新文章

  1. [转]HOWTO do Linux kernel development - take 3 (中文版)
  2. linux shell sed d删除指定行并更换分隔符为#
  3. Bootstrap框架系列 - 初识
  4. C语言试题七十之请编写函数判断年份是否为闰年
  5. C++中虚函数、纯虚函数、普通函数三者的区别
  6. 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
  7. wikioi 1306 机智Trie树
  8. 网络基石 —— ADSL
  9. python 爬取阳光电影资源
  10. html怎么加入页面登录背景,HTML+CSS实现动态背景登录页面
  11. 大数据、云计算将催生IT产业大革命
  12. python中eval函数的用法
  13. Android licenses not accepted
  14. 聚合支付机构备案情况分析(截至22年1月27日)
  15. 2021年起重机司机(限桥式起重机)考试及起重机司机(限桥式起重机)考试报名
  16. 浅谈下载access数据库的攻与防
  17. 第四章 数据结构与算法之算法基础(时间复杂度、空间复杂度、稳定性详述)
  18. Linux下 rsync远程同步带密码
  19. C++中的结构体内的函数
  20. 嵌入式操作系统µCOS-II及应用编程

热门文章

  1. appstore上架所需截屏的制作方法
  2. 使用反射生成 JDK 动态代理
  3. 借款必须先买商品再折旧,分期易和通联支付联合收割借款人,年化利率高达240%
  4. HbuilderX 小程序转快应用
  5. mysql最左前缀概念_mysql查询优化之目录类型、最左前缀
  6. July大神交大读书会子atoi
  7. 网页中加入最新款百度天气预报样式代码
  8. Python 屏幕亮度的调节与息屏
  9. OpenOCD学习笔记 5-stm32f0x配置文件解析
  10. [附源码]Nodejs计算机毕业设计基于java学科竞赛管理系统Express(程序+LW)