对于任何微控制器项目,将显示单元与其连接将使该项目更加容易并且吸引用户进行交互。微控制器最常用的显示单元是16×2 Alpha数字显示器。这些类型的显示不仅对向用户显示重要信息很有用,而且在项目的初始开发阶段还可以充当调试工具。因此,在本教程中,我们将学习如何将16×2 LCD显示器与STM32F103C8T6 STM32开发板连接,以及如何使用Arduino IDE对其进行编程。对于熟悉Arduino的人来说,本教程非常简单,因为它们非常相似。同样要了解有关STM32 Blue Pill Board的更多信息,请遵循我们的入门教程。
所需材料
- STM32 Blue Pill开发板
- 16×2液晶显示器
- FTDI程序员
- 连接线
- 液晶屏
16×2点矩阵LCD显示屏简介
如前所述,Energia IDE提供了一个漂亮的库,该库使接口工作变得轻而易举,因此不必一定要了解显示模块。但是,显示我们正在使用的内容不是很有趣!!
名称16×2表示显示器具有16列和2行,它们一起(16 * 2)组成32个框。下图是一个盒子的样子
一个盒子有40个像素(点),矩阵顺序为5行8列,这40个像素一起形成一个字符。同样,可以使用所有框显示32个字符。现在让我们看一下引脚排列。
LCD共有16个引脚,如上所示,它们可以分为四类,如下所示
源引脚(1、2和3): 这些引脚为显示器提供电源和对比度
控制引脚(4、5和6): 这些引脚设置/控制LCD接口IC中的寄存器(更多信息请参见下面的链接)
数据/命令引脚(7至14): 这些引脚提供应在LCD上显示哪些信息的数据。
LED引脚(15和16): 如果需要,这些引脚用于使LCD的背光发光(可选)。
如果您想了解有关这些LCD显示屏的更多信息,请在这16x2 LCD文章中,在所有这16个引脚中,只有10个必须用于LCD的正常工作。
电路图和连接
连接STM32F103C8T6 STM32 Blue Pill板的16 * 2点矩阵LCD的电路图如下所示。它是使用Fritzing软件制作的。
如您所见,完整的连接是通过面包板进行的。我们需要一个FTDI板来对STM32微控制器进行编程。因此,与之前的教程类似,我们已将FTDI板连接至STM32,FDTI编程器的Vcc和接地引脚分别连接到STM32的5V引脚和接地引脚。由于这两者都可以接受+ 5V电压,因此可用于为STM32板和LCD供电。FTDI板的Rx和Tx引脚连接到STM32的A9和A10引脚,因此我们可以在没有引导加载程序的情况下直接对板进行编程。
接下来,LCD必须连接到STM32板上。我们将以4位模式使用LCD,因此我们必须将4个数据位引脚(DB4至DB7)和两个控制引脚(RS和EN)连接至STM32板上,如STM32F103C8T6 LCD接口电路所示。上图。此外,下表将帮助您进行连接。
LCD引脚号 |
LCD引脚名称 |
STM32引脚名称 |
1个 |
地面(地) |
地线(G) |
2 |
VCC |
5伏 |
3 |
VEE |
地线(G) |
4 |
寄存器选择(RS) |
PB11 |
5 |
读/写(RW) |
地线(G) |
6 |
启用(EN) |
PB10 |
7 |
数据位0(DB0) |
无连接(NC) |
8 |
数据位1(DB1) |
无连接(NC) |
9 |
数据位2(DB2) |
无连接(NC) |
10 |
数据位3(DB3) |
无连接(NC) |
11 |
数据位4(DB4) |
PB0 |
12 |
数据位5(DB5) |
PB1 |
13 |
数据位6(DB6) |
PC13 |
14 |
数据位7(DB7) |
PC14 |
15 |
LED正极 |
5伏 |
16 |
LED负极 |
地线(G) |
连接完成后,我们可以打开Arduino IDE并开始对其进行编程。
使用Arduino为LCD编程STM32
如本教程所述,我们将使用Arduino IDE对STM32微控制器进行编程。但是,默认情况下,Arduino IDE不会安装STM32板,因此我们必须下载一个软件包并为此准备Arduino IDE。这正是我们在上一个教程中使用Arduino IDE入门STM32F103C8T6所做的工作。因此,如果尚未安装所需的软件包,请先退回到本教程并继续操作。
将STM32开发板安装在Arduino IDE中后,我们就可以开始编程了。该程序与Arduino开发板非常相似,唯一会改变的是引脚名称,因为STM32和Arduino的符号不同。完整的程序在本页的结尾给出,但是为了说明该程序,我将其分成了一些有意义的小片段,如下所示。
使用Arduino对我们的微控制器进行编程的一个显着优势是,Arduino几乎为每个著名的传感器和执行器提供了现成的库。因此,这里我们通过包含LCD库来开始我们的程序,这使编程变得容易得多。
#包括
在下一行中,我们必须指定将LCD显示控制和数据线连接到STM32的GPIO引脚。为此,我们必须检查硬件,为简便起见,您还可以参考顶部给出的表格,该表格列出了LCD的引脚名称和STM32的GPIO引脚。提到引脚后,我们可以使用 LiquidCrystal 功能初始化LCD 。我们还将LCD命名为“ lcd ”,如下所示。
const int rs = PB11,en = PB10,d4 = PB0,d5 = PB1,d6 = PC13,d7 = PC14;//用LCD提到引脚名称连接到 LiquidCrystal LCD (rs,en,d4,d5,d6,d7); //初始化LCD
接下来,我们进入 设置 功能。在这里,首先我们要提到我们正在使用哪种类型的LCD。由于它是16 * 2的LCD,因此我们使用 lcd.begin(16,2)行。 void setup 函数中的代码仅执行一次。因此,我们使用它来显示介绍文字,该介绍文字在屏幕上显示2秒钟,然后被清除。更何况,其中的文本有出现,我们使用功能的位置 lcd.setcursor 并打印我们用文字 lcd.print 功能。例如, lcd.setCursor(0,0) 会将光标设置在我们打印“ 接口LCD ”的第一行和第一列以及函数 lcd.setCursor(0,1) 将光标移动到第二行第一列,在此处打印“ CircuitDigest ”行。
void setup(){lcd.begin(16,2); //我们正在使用16 * 2 LCD lcd.setCursor(0,0); //在第一行的第一列lcd.print(“ Interface LCD”); //打印此lcd.setCursor(0,1); //在第二行的第一列lcd.print(“-CircuitDigest”); //打印这个延迟(2000); //等待两个秒数lcd.clear(); //清除屏幕}
显示介绍性文字后,我们通过创建延迟使程序保持2秒钟,以便用户可以阅读介绍性信息。此延迟是由line delay(2000) 创建的,其中2000是延迟值(以毫秒为单位)。延迟之后,我们使用 lcd.clear() 函数清除LCD,该函数通过删除LCD上的所有文本来清除LCD。
最后,在 void循环内, 我们在第一行显示“ STM32 – Blue Pill”,在第二行显示秒数。秒的值可以从 millis() 函数获得。所述 米利斯() 是一个计时器,其从所述MCU被供电的时间变递增右。该值以毫秒为单位,因此我们将其除以1000后再在LCD上显示。
void loop(){ lcd.setCursor(0,0); //在第一行的第一列 lcd.print(“ STM32 -Blue Pill”); //打印此 lcd.setCursor(0,1); //在第二行的第一列 lcd.print(millis()/ 1000); //打印秒值 }
将程序上传到STM32F103C8T6
如上一段所述,您应该能够在代码上传后立即注意到输出。但是,由于该板仍处于编程模式,因此下次启动该板时该程序将无法工作。因此,一旦上载程序,引导0上的跳线应更改回0位置,如下所示。另外,由于该程序已经上传到STM32板上,因此我们不需要FTDI板,整个设置可以通过STM32板的micro-USB端口供电,如下所示。
这只是一个简单的接口项目,可帮助将LCD显示屏与STM32板一起使用,但是您还可以使用它来构建出色的项目。希望您理解该教程并从中学到了一些有用的东西。如果您在使用它时遇到任何问题,请使用评论部分来发布问题,或使用论坛来解决其他技术问题。可以通过下面的视频找到使用STM32进行LCD显示器的完整工作。