大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享出来,主要面向广大师生朋友,单片机老鸟就略过吧。欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢!
前边我们讲解了LED、按键和蜂鸣器的应用,这三类器件本身工作原理十分简单,因此我们的重点是放在STM32的GPIO上面。这一章我们来学习一下开发板配套的那块厚厚的液晶屏——LCD1602,聚焦的是这个器件本身的特点和工作时序。因此,我们需要熟读它的数据手册,因为手册里告诉了编程的要点、参数、时序等。阅读器件手册是做单片机和嵌入式开发必备的基本能力,我们就从这一章开始锻炼起来吧。为了不让篇幅太长,本章打算分四个部分来讲解,本文是第一部分。
【学习目标】
- 了解LCD1602的工作原理
- 掌握LCD1602的工作时序
- 领悟软件模拟时序的思路和方法
一、观察外部认识LCD1602
大家学习这些电子器件,头脑中要逐渐形成一种意识,不管是强大复杂的STM32,还是简单的LED、三极管等等,都是有数据手册的。不管是设计电路还是编写程序,器件的数据手册是我们最好的参考资料。LCD1602的数据手册大家可以在网上很方便的找到,这里我们只挑手册的重点讲。
1.1 产品外观
图1所示的就是LCD1602的正面和背面,从它的名字我们就可以看出它的显示容量,就是可以显示2行,每行16个字符的液晶。至于它为什么那么厚,因为它不单纯是块屏,屏下还集成了驱动电路、背光电路以及显示RAM。
1.2 电气参数
接着来看它主要的技术参数,如下表所示。表中有两个地方需要解释一下:第一,LCD1602最佳工作电压是5.0V,而STM32的工作电压是3.3V,这就意味着它们不能共用一组电源。第二,在5V工作电压下测量它的工作电流是2mA,这仅仅是指液晶消耗的电流,而它的背光是用LED做的,所以功耗不会太小,一二十毫安还是有的。基于这两方面的需求,当连接LCD1602时,我们需要使用配套的电源适配器,并接到开发板DC5V的插座上,如图2所示。
1.3 硬件接口
LCD1602一共16个引脚(编号已在图1中标出),每个引脚的功能,我们都可以在它的数据手册上找到。而这些基本的信息,在我们设计电路和编写代码之前,必须先看明白,如表2所示。
1.3.1 电源和背光
电源1脚2脚以及背光电源15脚16脚,不用多说,正常接就可以了,1脚和16脚接地,2脚和15脚接5V电源。
1.3.2 显示偏压
3脚叫做显示偏压信号。大家注意到屏里的小黑块没有,如图3所示,当我们要显示一个字符的时候,有的黑点显示,有的黑点就不能显示,这样就可以实现我们想要的字符了。
3脚就是用来调整显示的黑点和不显示的之间的对比度,调整好了对比度,就可以让我们的显示更加清晰一些。在进行电路设计实验的时候,通常的办法是在这个引脚上接个电位器。通过调整电位器的分压值,来调整3脚的电压。而当产品批量生产的时候,我们可以把调好的阻值直接用简单电路来实现。观察我们开发板上LCD1602部分的原理图4,就直接使用了一个4.7K的定值电阻。
1.3.3 数据/命令选择端口
4脚是数据/命令选择端。对于液晶,有时候我们要发送一些命令,让它实现我们想要的一些状态,有时候我们要发给它一些数据,让它显示出来,液晶就通过这个引脚来判断接收到的是命令还是数据。大家注意学会读手册,看到这个引脚描述里:数据/命令选择端,而后跟了(H/L)。它的意思就是当这个引脚是H(High)高电平时,是数据;当这个引脚是L(Low)低电平的时候,是命令。
1.3.4 读/写选择端
5脚和4脚用法类似,功能是读/写选择端。我们既可以写给液晶数据或者命令,也可以读取液晶内部的数据或状态,就是控制这个引脚。因为液晶本身内部有RAM,实际上我们送给液晶的命令或者数据,液晶需要先保存在缓存里,然后再写到内部的寄存器或者RAM中,这个就需要一定的时间。所以我们进行读写操作之前,首先要读一下液晶当前状态,是不是在“忙”,如果不忙,我们可以读写数据,如果在“忙”,我们就需要等待液晶忙完了,再进行操作。读状态是常用的,不过读液晶数据很少用,大家了解这个功能即可。
1.3.5 使能信号
6脚是使能信号,很关键,液晶的读写命令和数据,都要靠它才能正常读写,我们后边结合时序再详细讲这个引脚怎么用。
1.3.6 数据端口
7到14脚就是8个数据引脚了,我们就是通过这8个引脚读写数据和命令的。最后来看一下LCD1602与STM32引脚连接的原理图和实物图,分别如图5和6所示。
关于LCD1602与STM32连接的端口,需要注意以下三个问题:
第一,RS接的是PC6,RW接的是PA11,使能E接的是PC3,8位数据端口由高到低依次连接的是PC2 ~ PC0、PB9 ~ PB5,也就是说我们在做端口初始化的时候需要分别对GPIOA、GPIOB、GPIOC进行初始化配置。
第二,由于8位数据端口占了GPIOC的3位和GPIOB的5位,因此我们在读写数据的时候需要分别读写这两组I/O口指定位上的数据,再把两组数据组合起来。在编程时涉及了多处C语言的位操作,请大家后面阅读代码时注意。
第三,使能E连接的是PB4,而STM32在复位时,PA13/14/15 & PB3/4这些引脚默认配置为JTAG功能。这里我们只是把PB4当做普通I/O口来用,即禁用JTAG功能。因此,我们在对GPIO进行初始化的时候,需要额外再做两项配置,如代码清单1所示。
(第一部分完,共四部分)