在这个项目中,我将向您展示如何接口一个128X64图形LCD与Arduino UNO。这个特殊的LCD模块是基于ST7920 LCD控制器。所以,我们将首先看到一点关于图形LCD模块和它的LCD控制器ST7920。
然后我们将看到128×64图形LCD与Arduino UNO板的接口和显示一些位图图像的步骤。
简介
在之前的Arduino项目中,我使用了一个接口诺基亚5110 LCD模块与Arduino.它也是一种图形LCD,可以显示一些基本的位图图像和图形。但诺基亚5110 LCD模块的问题是它的分辨率。
在84 x 48像素,诺基亚5110 LCD可用于实现基于菜单的用户界面。由于它的尺寸小,产生的菜单将限制在每页3或4个项目。
如果我们想要一个更大的显示器和更多的空间来工作,那么明显的选择是去更大更好的128×64图形LCD模块。
作为演示,在完成所有硬件连接后,我将在图形LCD模块上显示位图图像。如果您对使用Arduino实现一个简单的16×2 Alpha-Numeric LCD感兴趣,那么请查看这教程。
关于128×64图形LCD的简要说明
乍一看,128×64图形LCD模块似乎是著名的16×2 LCD或20×4 LCD模块的哥哥,它们有着相似的结构和几乎相似的引脚布局。
但这两者之间有一个显著的区别。16×2或20×4 lcd本质上是字符显示。它们只能显示字母-数字字符和一些限制在5×8矩阵中的简单自定义字符。
来到128×64图形LCD,顾名思义,它是一个由128×64组成的图形显示,即8192个独立的可控点。
通过使用不同的像素组合,我们基本上可以显示各种大小的字符。但奇迹并没有就此结束。您还可以显示图像和图形(小动画)。在一个128×64液晶模块,有64行128列。
ST7920液晶控制器
在市场上有几个版本的图形LCD。尽管使用、应用和实现几乎相同,但主要的区别在于用于驱动点阵显示的内部LCD控制器。
一些常用的LCD控制器有KS0108, SSD1306, ST7920, SH1106, SSD1322等。最终LCD模块的引脚可能会根据使用的LCD控制器而变化。因此,请在购买前验证液晶控制器以及引脚。
我购买的图形LCD模块由ST7920控制器组成。它是由Sitronix制造的,支持三种类型的总线接口,即8位模式,4位模式和串行接口。
如果您以前使用过16×2 LCD Display,那么您可能熟悉4位和8位并行接口。串行接口是一个新的东西,我们将在这个项目中探索这个选项。
128×64 LCD引出线
正如我已经提到的,请与制造商仔细检查图形LCD模块的针孔。下表描述的是我所拥有的128×64液晶模块的插针。
密码 | 销的名字 | 销的描述 |
1 | 接地 | 地面 |
2 | VCC | 电源电压 |
3. | 签证官 | 对比度调整 |
4 | RS | 寄存器选择(串行中的CS) |
5 | RW | 读写控制(串行数据输入) |
6 | E | 启用(串行时钟) |
7 - 14 | D0, D7 | 数据 |
15 | 公安局 | 接口选择(0:串行,1:8位/4位并行) |
16 | 数控 | 没有连接 |
17 | RST | 重置 |
18 | 输出电压 | LCD电压加倍器输出 |
19 | BLA | 背光LED阳极 |
20. | 黑色 | 背光LED阴极 |
下面的图像显示了液晶显示器的后部与它的针孔印刷。
接口128×64图形LCD与Arduino
现在我们已经了解了图形LCD和它的控制器ST7920,现在让我们继续128×64图形LCD与Arduino的接口。我将实现一个简单的电路来演示使用很少的外部组件来连接LCD和Arduino是多么容易。
我将使用串行接口进行数据传输,并在图形LCD上显示位图图像。
线路图
下图是ST7920图形LCD与Arduino UNO接口的电路图。
组件的要求
- Arduino UNO
- 128×64图形显示模块
- 10 kΩ电位计
- 电路试验板
- 试验板电源
- 连接电线
硬件连接
如前所述,有三种不同的方法可以将图形LCD与Arduino连接起来。它们是:
- 4比特并行模式
- 8位并行模式
- 串行模式
在串行模式下,我们只需要三个引脚进行实际的数据传输。RS、RW和e是串行通信中的选片引脚。RW和E分别充当串行数据IN和串行CLK引脚。
因此,将LCD的RS, RW和E连接到Arduino UNO的数字IO引脚10,11和13。此外,为了选择串行接口模式,PCB引脚必须连接到GND。
其余的连接类似于传统的16×2 LCD。VCC、GND接电源5V接地。VO接10KΩ POT的雨刮器,POT的另外两个端子分别接5V和GND。
为了用背光照亮LCD,将BLA连接到5V,将BLK连接到GND。
我的液晶显示器的背光是蓝色的。但是白色和绿色也很常见。
为位图图像生成十六进制代码
我将直接以位图的形式显示图像,而不是显示不同字体的字符(是的,有一些库可以使用它们实现各种字体)。在编写代码之前,需要将位图图像转换为字节数组。
我使用了上面的“办公室”标志。记住,128×64 LCD的分辨率是128×64像素。因此,最大的图像大小应该是128×64。所以,使用Microsoft Paint,我把上面的图像的分辨率降低到128×64像素,并将其保存为Monochrome Bitmap image。
下一步是将这个位图图像转换为字节数组。我已经尝试了几个转换工具(在线和离线),但没有一个能够生成与我的设置兼容的代码。
所以,我使用了“GIMP”软件。可以从以下网站下载GIMP这链接并安装它。安装完成后,可以在GIMP软件中打开“128×64位图”,导出为“X位图图”。
将生成一个.xbm文件。它包含所选的128×64位图图像的HEX代码。用任何文本编辑器(如notepad++)打开它,并进行以下更改。数组应该是一个静态的const无符号字符,并在数组名后附加" programmem "。
静态const unsigned char myBitmap [] promem = {
0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.....
0xff, 0xff, 0xff, 0x7f};
代码
在编写代码之前,您需要下载一个名为“U8g2”的特殊库。在Arduino IDE中,进入Tools -> Manage Libraries…搜索“u8g2”并安装最新版本。它是一个复杂的库github页面包含所有必要的文档。
之前生成的HEX代码必须添加到我们的代码中。
结论
这里实现了一个简单的项目,将128×64图形LCD与Arduino连接起来。我没有显示纯字符,而是在LCD上显示了位图图像,以显示其功能。
在下一个项目中,我将向您展示如何使用旋转编码器在128×64图形LCD上设计一个简单的菜单显示。
4的反应
wire.h现在无法与Arduino一起工作。它已被wire_private.h所取代。
祝贺那些想开发Arduino的人,所以我想学习Arduino什么可以帮助我,但我有A2证书在数学、物理和计算机科学,因此非常感谢你,愿上帝保佑所有的成员,工作人员设计Arduino。
这一教程帮助我找到了自己所遗漏的大部分谜题。:)。很好的工作!
然而,我有一个关于连接LCD的问题,我想知道它是否可以像你在这里做的那样接口。因为我不确定它是否已经内置了控制器(它有3个水平驱动器和4个垂直驱动器)和几个简单的ic,它的连接是一根14针FFC带状电缆!
型号是:FH6-0635 MEDMMPU3W2F(单色显示从一个旧佳能复印机)。
谢谢你!
你好,Fisnik,你找到关于这个屏幕的信息了吗?