当前位置: 首页 > news >正文

单片机学习笔记---LCD1602

LCD1602介绍

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符(比如日文的片假名),还可以有8个自定义字符

显示容量:16×2个字符,每个字符为5*7点阵(其实是5*8的点阵,只不过字符只占了5*7)

引脚及应用电路

D0~D7口是数据口,代表一个字节的8位,是并行的传输接口

RS,RW,E控制数据是干什么的,或者控制什么时候改传输数据

我们开发板上的LCD1602的原理图

D0~D7接在单片机的P0口

内部结构框图

字模库就相当于数码管的段码表,其中CGRAM是可写的,是我们自定义字符的一个数据存储区。CGROM是不可写的,是内部固定的一个字模区。

我们想要它显示的数据实际上是写在DDRAM这一个存储单元里面去,然后再通过DDRAM里面的这个数据来向字模库找到相应字符的显示点阵的字模,然后再在屏幕的对应位置上显示我们的数据。DDRAM中虽然有40列,但是只有前16列才能映射到屏幕中。后面多出那么长可以利用内部指令向左移平,左边移出去的数据会重新回到右边来。如果我们循环使用移平指令的话就可以实现流动字幕的效果。

AC(光标位置)和我们前面将的AT24C02的这个地址计数器是一个东西,操作后会自动增加。我们可以把它想象成一个AT24C02,我们可以把光标位置设置在某个存储器的地址,然后写数据,那这个光标位置会自动加1向下,这样我们就可以连续写,就可以写一串数据了。

那这个AC的地址是怎么确定的呢?它也是我们的指令来确定的。

存储器结构

DDRAM(数据显示区)

CGRAM+CGROM(字模库)

它最多只能定义8个自定义字符。后面8个和前面8个地址是重复的地址,一样的。

后面都是ROM区,是固定的,不能改的字符,比如想要显示A,那它的索引码就是0100 0001,换成16进制就是0x41。

并且这个索引码和ASCII码值是一样的,所以我们在写索引码的时候可以直接用单引号把大写的A引出来’A’,就相当于写一个0x41

时序结构

写数据/指令

我们主要是给LCD1602写数据,所以读的时序就不管了。

LCD1602指令集

第一个指令(指令码0x01):清除AC就是光标复位,清除DDRAM就是清屏

第二个指令中*号是代表无关位

第三个指令(输入方式设置):我们常用的是0x06那个指令码

第四个指令(显示开关控制):我们常用的是0x0C那个指令码

第五个指令中的0x18指令码可以用来做流动字幕

第六个指令我们常用的是0x38那个指令码

第七个指令是可以用来设置自定义字符

第八个指令是很关键的一条指令,1固定在最高位。PS:比如如果想要把光标设置在第一行第一列,我们应该发的指令是0x80,因为最高位表示设置光标位置,剩下7个0就代表它的实际地址;如果想要设置在第二行第一列,那我们就设置成1100 0000=0xC0

我们一般不用读所以先不管第九条指令

LCD1602操作流程

初始化:

发送指令0x38 //八位数据接口,两行显示,5*7点阵

发送指令0x0C //显示开,光标关,闪烁关

发送指令0x06 //数据读写操作后,光标自动加一,画面不动

发送指令0x01 //清屏

显示字符:

发送指令0x80|AC //设置光标位置(原因请看前面第八条指令的举的例子就明白了)

发送数据 //发送要显示的字符数据

发送数据 //发送要显示的字符数据

……

以上就是本节的内容,下一节开始代码演示!

http://www.lryc.cn/news/300201.html

相关文章:

  • django中实现适配器模式
  • 题记(42)--EXCEL排序
  • 【学网攻】 第(28)节 -- OSPF虚链路
  • 百面嵌入式专栏(面试题)驱动开发面试题汇总1.0
  • Starknet 的 JavaScript 库:Starknet.js、get-starknet和starknet-react
  • debian11 安装 k8s,containerd ,阿里云镜像(已成功)
  • Spring Task定时任务
  • 【设计模式】23中设计模式笔记
  • 类加载过程介绍
  • pytorch创建模型方式
  • MySQL 基础知识(五)之数据增删改
  • 紫微斗数双星组合:廉贞天府在辰戌
  • 人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统
  • 使用 C++23 从零实现 RISC-V 模拟器(1):最简CPU
  • 顺序表、链表(ArrayList、LinkedList)
  • 第11讲投票创建后端实现
  • SNMP 简单网络管理协议、网络管理
  • 计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv
  • OpenCV-36 多边形逼近与凸包
  • transformer中的QKV是如何得到的?
  • console.log导致内存泄露 打包时自动去掉console.log方法
  • 《合成孔径雷达成像算法与实现》FIgure6.20
  • Spring Boot 笔记 015 创建接口_更新文章分类
  • 【Java基础题型】判断是否是回文数
  • Linux paste命令教程:并行合并文件的利器(附案例详解和注意事项)
  • 用163邮箱或者outlook接收国科大邮箱的邮件
  • VitePress-15- 配置- description 的作用详解
  • 寒假学习记录17:包管理器(包管理工具)
  • 【AIGC】Stable Diffusion的常见错误
  • 线段树解决-----P1161 开灯 P1047 [NOIP2005 普及组] 校门外的树 python解法