我在高职教STM32——LCD液晶显示(2)

        大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享出来,主要面向广大师生朋友,单片机老鸟就略过吧。欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢!


        前边我们讲解了LED、按键和蜂鸣器的应用,这三类器件本身工作原理十分简单,因此我们的重点是放在STM32的GPIO上面。这一章我们来学习一下开发板配套的那块厚厚的液晶屏——LCD1602,聚焦的是这个器件本身的特点和工作时序。因此,我们需要熟读它的数据手册,因为手册里告诉了编程的要点、参数、时序等。阅读器件手册是做单片机和嵌入式开发必备的基本能力,我们就从这一章开始锻炼起来吧。为了不让篇幅太长,本章打算分四个部分来讲解,本文是第二部分。

【学习目标】

  1. 了解LCD1602的工作原理
  2. 掌握LCD1602的工作时序
  3. 领悟软件模拟时序的思路和方法

二、深入内部理解LCD1602

2.1 显示地址与字符

        LCD1602内部带了80个字节的显示RAM,用来存储我们发送的数据,它的结构如图7所示。

图7 LCD1602内部RAM结构

        第一行的地址是0x00到0x27,第二行的地址从0x40到0x67,其中第一行0x00到0x0F是与液晶上第一行16个字符显示位置相对应的,第二行0x40到 0x4F是与第二行16个字符显示位置相对应的。而每行都多出来一部分,是为了显示移动字幕设置的。1602字符液晶是显示字符的,因此它跟ASCII字符表是对应的。比如我们给0x00这个地址写一个‘a’,也就是十进制的97,液晶的最左上方的那个小块就会显示一个字母a。此外,液晶内部有个数据指针,它指向哪里,我们写的那个数据就会送到相应的那个地址里。

2.2 状态字节

        LCD1602有一个状态字节,我们通过读取这个状态字的内容,就可以知道一些内部情况,这个状态字节含义如表3所示。

表3 LCD1602状态字节

        这个状态字节最高位表示了当前液晶是不是“忙”,如果这个位是1表示正“忙”,禁止我们读写数据或者命令;如果是0,则可以进行读写。而低7位就表示了当前数据地址指针的位置。

2.3 读写时序

        LCD1602的基本操作时序,一共有4个,这些大家都不需要记住,但是都需要理解,因为我们现在不是为了应付考试,所以不需要你把手册背熟,但是你写程序的时候,打开手册要能看懂如何操作。

2.3.1 读状态

        RS = L,R/W = H,E = H,读状态。这是个很简单的逻辑,我们对照手册上的读状态时序(如图8所示),编写的程序结构如代码清单2所示。

图8 读状态时序图
代码清单2 读液晶状态程序的基本结构

        这样就读到了当前液晶的状态位,我们可以通过该位的值来了解当前液晶是否处于“忙”状态。这里面有两个问题:第一,如果读到的状态是“不忙(0)”,那么程序可以进行读写操作;如果当前状态是“忙(1)”,那么还得继续等待重新判断液晶的状态;第二,读完了液晶状态继续保持使能E是高电平的话,LCD1602会继续输出它的状态值,输出的这个值会占据了数据总线,所以读完了状态,通常需要把这个引脚拉低(第7行)来释放总线。

        为了解决以上两个问题,我们把读液晶状态的函数放在while循环中,直到循环退出(即不忙),再执行后续的写液晶操作,程序结构如代码清单3所示。

代码清单3 写液晶之前反复读取是否“忙”

2.3.2 读数据

        如图9所示,这个时序跟读状态很像,把第一步改成拉高RS即可。但是,读数据不常用,大家了解一下就可以了,这里就不详细解释了。

图9 读数据时序图

2.3.3 写指令

        RS = L,R/W = L,D7~D0 = 指令码,E = 高脉冲,时序如图10所示。这个在逻辑上没什么难的,只是“E = 高脉冲”这个问题要解释一下。这个指令一共有4条语句,其中前三条语句顺序无所谓,但是“E = 高脉冲”这一句很关键。

图10 写指令时序

        实际上流程是这样的:因为我们现在是写指令,所以我们首先要保证E引脚是低电平状态,而前三句不管我们怎么写,LCD1602只要没有接收到E引脚的使能控制,它都不会来读总线上的信号的。当通过前三句准备好数据之后,E使能引脚从低电平到高电平变化,然后E使能引脚再从高电平到低电平出现一个下降沿,LCD1602内部一旦检测到这个下降沿后,并且检测到“RS = L,R/W = L”就马上来读取D7~D0 的数据,完成写指令过程。

        综上所述,我们写了个“E = 高脉冲”,意思就是:使能E先从低拉高,再从高拉低,形成一个高脉冲。

2.3.4 写数据

        RS = H,R/W = L,D7~D0 = 数据,E = 高脉冲,时序如图11所示。这个时序跟写指令很像,把第一步改成拉高RS即可。此时,写入的就是需要显示的字符编码了。

图11 写数据时序

2.4 指令介绍

        与单片机寄存器的用法类似,LCD1602在使用的时候,我们首先要进行初始的功能配置,有以下几个指令需要了解。

2.4.1 显示模式设置

        如表4所示,写指令0x38,设置16x2显示,5x7点阵,8位数据接口。这条指令对我们这个液晶来说是固定的,必须写0x38,大家仔细看会发现我们的液晶实际上内部点阵是5x8的,还有一些1602液晶还兼容串行通信,用2个IO口即可,但是速度慢,我们这个液晶就是固定的0x38模式。

表4 固定的显示模式设置指令

2.4.2 显示开/关与光标设置

        这里有两类指令,我们把数据手册里对它们的描述贴过来,如表5所示。

表5 显示开/关与光标设置指令

2.4.3 清屏显示

        固定的,写入0x01表示显示清屏,包含了数据指针清零,所有的显示清零。写入0x02则仅仅是数据指针清零,显示不清零。

2.4.4 RAM地址设置

        该指令码的最高位为1,低7位为RAM的地址,RAM地址与液晶上字符的关系已在图7中呈现。通常,我们在读写数据之前都要先设置好地址,然后再进行数据的读写操作。

2.4.5 光标、画面位移设置

        如表6所示,通过这个指令码我们可以实现屏幕上内容的整体左移(或右移)显示,就像生活中常见的那种滚动屏显。具体控制效果为:

  • S/C =0,R/L =0:光标左移 ,地址计数器减1(即显示内容和光标一起左移)
  • S/C =0,R/L =1:光标右移 ,地址计数器加1(即显示内容和光标一起右移)
  • S/C =1,R/L =0:显示内容左移 ,光标不移动
  • S/C =1,R/L =1:显示内容右移 ,光标不移动
表6 光标和画面移动指令

        这个指令效果也解释了图7中屏幕之外那些地址的意义,我们再把它复制过来并添加了一些标注(如图12所示),两排地址就像可以写两行字的纸带,写在前16个格子里字迹就会显示,而写在其他格子里字迹就隐身了(并没有消失)。因此,当屏幕内容移动时,纸带是不动的,动的是字迹,也就是手册上所说的“移动时不影响DDRAM”。 

图12 用纸带比喻RAM地址

(第二部分完,共四部分) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux源码学习笔记01-Linux内核源码结构

Linux内核特性 是一个类Unix操作系统,但不是简化的Unix;不仅继承了Unix的特征,还有其他特性。 Linux内核的组织形式:整体式的结构,方便每个领域的开发人员参与开发;Linux进程调度方式简单高效&#xff1a…

用智能插件(Fitten Code: Faster and Better AI Assistant)再次修改vue3 <script setup>留言板

<template><div><button class"openForm" click"openForm" v-if"!formVisible">编辑</button><button click"closeForm" v-if"formVisible">取消编辑</button><hr /><formv-i…

【权威发布】2024年环境科学、旅游与产业经济国际会议(ICESTIE 2024)

2024年环境科学、旅游与产业经济国际会议 2024 International Conference on Environmental Science, Tourism and Industrial Economics 会议简介 2024年环境科学、旅游与产业经济国际会议旨在汇聚全球该领域的专家学者&#xff0c;共同探讨环境科学与旅游产业的融合发展&…

SDK编译IO Domain电压选择

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙…

【iOS】#include、#import、@class、@import

文章目录 #include#importclassimport总结 #include #include是c\c中的预处理器指令&#xff0c;用于包含头文件的内容 但是使用#include可能会出现重复包含文件的问题&#xff0c;因此需要使用&#xff08;#ifndef/#define/#endif&#xff09;。 #import //导入系统头文件…

使用opencv合并两个图像

本节的目的 linear blending&#xff08;线性混合&#xff09;使用**addWeighted()**来添加两个图像 原理 (其实我也没太懂&#xff0c;留个坑&#xff0c;感觉本科的时候线代没学好。不对&#xff0c;我本科就没学线代。) 源码分析 源码链接 #include "opencv2/imgc…

西米支付:【风控升级】同一商户集中交易,将会限制正常用卡

支付公司风控策略再升级&#xff01;近日&#xff0c;有某支付公司代理透漏&#xff0c;客户反馈机器突然不能刷卡了&#xff0c;换卡也无法交易&#xff0c;交易均提示06-超出商户限额&#xff0c;然而该款机器刷卡限额为单日30万&#xff0c;单月300万&#xff0c;客户并未触…

Win11 设置本地管理员账户的几种方法总结

从设置界面创建 Win11 设置本地管理员账户我们可以在设置界面来进行设置&#xff0c;下面是具体的操作步骤&#xff1a; 首先我们需要打开设置界面&#xff0c;然后点击“账户”选项&#xff0c;进入之后点击“其他用户”。 然后在用户界面中我们找到“其他用户”模块下的添加…

AMD vs NVIDIA:渲染领域的显卡之争

在数字创意与设计的世界里&#xff0c;显卡作为图形处理的核心&#xff0c;其性能与兼容性直接关系到创作者的工作效率与作品质量。AMD与NVIDIA&#xff0c;作为两大显卡巨头&#xff0c;各自在渲染领域拥有独特的技术与优势。那么&#xff0c;针对渲染而言&#xff0c;哪种显卡…

四川古力未来科技有限公司抖音小店解锁电商新机遇

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度蓬勃发展。四川古力未来科技有限公司紧跟时代步伐&#xff0c;积极拥抱变革&#xff0c;在抖音平台上开设小店&#xff0c;为品牌发展注入了新的活力。那么&#xff0c;四川古力未来科技有限公司抖音小店究竟…

C#和python端通信之使用共享内存

一、前言 本篇主要实验通过使用共享内存实现C#端代码和python端代码之间的通信&#xff0c;主要目的是相较于直接传输较大的数据&#xff08;例如图像数据&#xff09;&#xff0c;该方式更节省时间。 二、代码 C#端&#xff1a; 创建了一个大小为1的共享内存&#xff0c;名为…

Js-w3school(2024(1)

10.访问 HTML 元素 使用“不整洁的” HTML 样式的后果&#xff0c;也许是导致 JavaScript 错误。请在 HTML 中使用相同的命名约定&#xff08;就像 JavaScript 那样&#xff09; 11. 请使用正确的文档类型 请始终在文档的首行声明文档类型&#xff1a; 如果您一贯坚持小写标…

神经网络学习-池化层

池化层方法 池化一般是用来对卷积层进行降维 空洞卷积&#xff0c;通过在卷积核的元素之间插入“空洞”&#xff08;即零&#xff09;&#xff0c;可以在不增加参数量和计算量的情况下扩大卷积核的感受野。这对于捕捉图像中的多尺度信息特别有用。 池化的默认步长是池化核的大…

vscode插件开发之 - 消息通信

在开发vscode插件过程中&#xff0c;有一个典型场景是webview与extension.ts进行通信&#xff0c;例如&#xff0c;webview上的某些信息发送改变时&#xff0c;需要发送消息传递给extension.ts. 如果使用react框架构建vscode插件的webview&#xff0c;如何实现webview与extensi…

工厂ESOP系统促进工厂快速响应和工艺改进

在当今追求可持续发展和创新的时代&#xff0c;新能源产业正以惊人的速度崛起。新能源工厂作为这一领域的核心生产环节&#xff0c;面临着不断提高效率、优化工艺和快速应用新技术的巨大挑战。为了应对这些挑战&#xff0c;越来越多的新能源工厂开始引入 ESOP 系统&#xff08;…

为什么企业需要数据挖掘平台?哪个比较好呢?

什么是数据挖掘&#xff1f; 数据挖掘就是从大量的数据中去发现有用的信息&#xff0c;然后根据这些信息来辅助决策。听起来是不是跟传统的数据分析很像呢&#xff1f;实际上&#xff0c;数据挖掘就是智能化的数据分析&#xff0c;它们的目标都是一样的。但是&#xff0c…

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、重要信息 大会官网&#xff1a;www…

盘点海外大带宽服务器:哪家值得选?

针对外贸业务遭遇大流量访问时的巨大带宽需求&#xff0c;我们可能有很多人会选择寻找一些海外大带宽服务器提供商来提升网站的访问效率。所以&#xff0c;本文整理了五个海外大带宽服务器的产品商家&#xff0c;如果有需要可以选择参考。 亚马逊 AWS(Amazon Web Services) 亚马…

《深入理解Spark RDD缓存机制》(第4天)

文章目录 前言一、小试牛刀&#xff1a;解剖RDD缓存机制&#xff1f;1. 什么是Spark RDD缓存策略1.1 为什幺RDD要做缓存1.2 缓存相关API&#xff1a;1.3 缓存案例解析:1.4 图解缓存效果: 2. 什么是checkpoint缓存2.1 为什么要做checkpoint缓存2.2 checkpoint相关API:2.3 checkp…

七彩影视双端新版本源码 支持PC+WAP+APP三端 对接苹果CMS后台

下载地址&#xff1a;七彩影视双端新版本源码 支持PCWAPAPP三端 对接苹果CMS后台 适合做影视类&#xff0c;高端大气