大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞 关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##单片机#

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(1)

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

【学习目标】

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

四、字符跳动显示实验

我们在前面的液晶指令描述中可以看到,LCD1602还支持光标和屏幕移动,下面我们就通过两个实验来感受一下动态显示的效果。

4.1 任务描述

这个实验是让字符串里的每个字符逐个跳出来显示,我们将实验效果分解在图18中,中间部分做了一些省略,同时也通过视频进行了展现。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(2)

图18 字符跳动显示效果

4.2 工程源码剖析

对于底层的lcd1602.c和lcd1602.h驱动文件来说,我们尽量不去改动。控制字符跳出的代码在主程序里实现,见如下代码清单15。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(3)

代码清单15 字符跳动显示主程序源码

五、液晶滚动显示实验5.1 任务描述

这个实验是让整个屏幕画面整体向左或向右滚动显示,我们将实验效果分解在图19中,中间部分做了一些省略,同时也通过视频进行了展现。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(4)

图19 液晶滚动显示效果

5.2 工程源码剖析

同理,还是只修改主程序里的控制代码,见如下代码清单16。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(5)

代码清单16 液晶滚动显示主程序源码

六、液晶显示功能的扩展

在上面的实验中,我们通过Lcd1602_ShowStr()函数实现了字符串信息的显示。但不知你是否考虑过,倘若显示的内容不是字符的类型,比如传感器采集温湿度值、ADC采集的电压值等,这些数据都是浮点类型的,也想通过液晶显示出来,该如何处理呢?

针对以上问题,我们补充一个显示函数Lcd1602_printf(),来实现多种数据类型的显示,就像使用printf()函数那样,可以通过%d、%f、%s这样的形式来指定显示内容的数据类型。该函数用到了C语言中解决变参问题的操作方式,想详细了解这部分知识的同学请自行搜索查阅,这里不展开。源码见如下代码清单17。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(6)

代码清单17 Lcd1602_Printf()函数源码

有了这个函数,我们就可以在主程序中像使用printf()函数那样在液晶屏上“打印”需要的内容了,代码清单18给了一个简单示例。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(7)

代码清单18 使用带变参显示函数示例

可以看到,带变参的Lcd1602_Printf()函数更灵活通用,使我们不必再纠结显示内容究竟是什么数据类型,这是它的优势。那有没有劣势呢?当然有了,在显示同样内容的情况下,使用Lcd1602_Printf()函数比用Lcd1602_ShowStr()函数编译出来的代码量大了不是一点儿,如图20所示。

stm32驱动lcd电路(我在高职教STM32LCD液晶显示)(8)

图20 编译的代码量对比

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

,