电子项目中使用了许多类型的LCD。我们已经在许多项目中使用了16X2 LCD,并在Arduino上使用了TFT LCD。您可以通过以下链接找到我们整个与16X2 LCD相关的项目,包括 与8051,AVR,Arduino 等的接口。
该ST9720图形LCD不同于普通液晶显示器完全不同。普通LCD只能打印固定大小的简单文本或数字。但是在图形LCD中,我们有128 * 64,等于8192点或8192/8 = 1024像素,因此除字符外,我们还可以在此GLCD上显示任何图形图像。
我们已经将GLCD与8051进行了接口,今天我们将图形化LCD与Arduino进行接口以在其上显示文本和图像。
所需材料
- Arduino UNO
- 128 * 64图形LCD ST9720
- 电位器10k
- 连接线
- 面包板
电路原理图
128 * 64图形LCD
该图形LCD具有低功耗,也适用于电池供电的便携式设备。它具有2.2v至5.5v的宽工作电压范围,并支持串行和8/4位并行通信,并带有ST7290 LCD控制器/驱动器IC。可以使用PSB PIN 15在并行和串行之间切换接口通信模式。该图形LCD具有自动上电复位功能,并且可以由8051,AVR,ARM,Arduino和Raspberry Pi等MCU轻松控制。
您可以浏览数据表以获取有关ST7290 128 * 64图形LCD的详细信息
引脚配置
销号 |
引脚名称 |
描述 |
1个 |
nd |
接地端 |
2 |
Vcc |
输入电源电压(2.7v至5.5v) |
3 |
VO |
LCD对比度 |
4 |
RS |
注册选择 RS = 0:指令寄存器 RS = 1:数据寄存器 |
5 |
读/写 |
读/写控制 |
6 |
Ë |
启用 |
7,8,9,10,11,12,13,14 |
DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7 |
数据引脚(在并行8/4位通信模式下使用) |
15 |
公安局 |
界面选择: 低(0),用于串行通信模式 高(1)用于8/4位并行总线模式。 |
16 |
数控 |
未连接 |
17 |
RST |
复位销 |
18岁 |
Vout |
LCD倍压器输出。VOUT≤7V。 |
19 |
BLA |
背光正电源 |
20 |
黑色 |
背光源负电源 |
应用领域
- 工业设备
- 嵌入式系统
- 安全
- 医疗类
- 手持设备
将图像转换为十六进制代码:
要在图形LCD上显示任何图像,我们需要该图像的十六进制代码,因此这里有一些将图像转换为十六进制代码的步骤。在此之前,您必须确保图像尺寸不超过128 * 64。
第1步:将普通图像的尺寸减小到128 * 64或更小,您可以使用任何图像编辑软件(例如MS Paint)来做到这一点。
如上图所示,我们将图像的宽度和高度设置为128 * 64。
步骤2:然后,您需要以“ image_name .bmp ”格式保存图像。
选择上图所示的格式,然后保存文件以进行进一步处理。
步骤3:将其保存为“.bmp”格式后,您需要将图像转换为十六进制代码以进行打印。为此,我正在使用名为GIMP 2的软件,该软件将Bmp文件转换为十六进制代码。
如上图所示,我们在GIMP 2软件中打开了“.bmp”格式文件。
步骤4:下载软件后,打开要打印的BMP格式图像文件,然后 将 其 保存为 “ .xbm ”(X BitMap)格式。保存后,使用记事本打开该文件,您将获得图像的十六进制代码。
如下图所示,选择“导出”选项以 xbm 格式保存文件:
选择下图所示的格式,然后导出图像文件。
导出文件后,您将获得“.xbm”格式的文件。使用记事本打开 xbm 文件,您将获得如下图所示的十六进制代码。
Arduino代码和工作说明
要将图形LCD与Arduino接口,首先我们需要定义用于图形LCD的库。Arduino没有此库,您必须从此链接下载并安装此库。然后,您可以包含如下所示的库:
#include“ U8glib.h”
在这里,“ u8g(10) ”定义了图形LCD的RS(Register Select)引脚与Arduino UNO的第10引脚的连接。RS引脚分别在串行和并行模式下用作“片选”和“寄存器选择”。因此,我们使用串行模式,将RS引脚设置为高电平(1)启用芯片,并设置为低电平(0)禁用芯片。
U8GLIB_ST7920_128X64_4X u8g(10);
现在,为了打印图像,我们需要将图像的十六进制代码放在下面的代码中。您可以打印任何其他图像,只需粘贴图像的十六进制代码。
const uint8_t rook_bitmap U8G_PROGMEM = { 在此处粘贴图像的十六进制代码 };
在本文末尾查看完整的Arduino代码。
下面的函数用于打印图像,用于打印的命令是 “ u8g.drawXBMP(x,y,图像宽度,图像高度)” 。其中,X和Y是图像在LCD上的起始位置,我们还需要写出不超过128 * 64的图像尺寸,并且在最后一个参数中,我们调用了将图像的十六进制代码放入其中的函数。
无效图片(void){u8g.drawXBMP(0,0,128,64,rook_bitmap); }
我们制作了两个函数 “ draw” 和 “ next”, 其中使用命令 “ u8g.drawStr(x,y,” abcd”)” 编写用于打印内容的代码 。 此处,x和y是LCD上将要打印内容的位置,“ abcd ”是要打印的内容。
void draw(void){u8g.setFont(u8g_font_unifont); u8g.drawStr(07,35,“电路图摘要”); } void next(void){u8g.setFont(u8g_font_unifont); u8g.drawStr(0,15,“接口”); u8g.drawStr(0,35,“图形LCD”); u8g.drawStr(0,55,“使用Arduino”); }
clearLCD() 函数用于通过仅向该函数提供空值来清除LCD。
void clearLCD(){u8g.firstPage(); 做{} while(u8g.nextPage()); }
使用以下代码设置像素,颜色和强度
void setup(void){if(u8g.getMode()== U8G_MODE_R3G3B2){u8g.setColorIndex(255); // // white} else if(u8g.getMode()== U8G_MODE_GRAY2BIT){u8g.setColorIndex(3); //最大强度} else if(u8g.getMode()== U8G_MODE_BW){u8g.setColorIndex(1); //像素上的}否则if(u8g.getMode()== U8G_MODE_HICOLOR){u8g.setHiColorByRGB(255,255,255); }}
该 无效循环 继续打印文本和图像给定延迟后。首先,我们在2秒后使用 绘制 功能打印了 “电路摘要” 。对于延迟,我们使用 clearLCD 功能清除了屏幕,然后使用 下一个 功能打印了“ 使用Arduino接口图形LCD ” 。然后,我们使用 picture() 函数打印了图像,该图像将在屏幕上停留3秒钟。这将一直持续到打开电源为止。
void loop(void){u8g.firstPage(); 做{draw(); } while(u8g.nextPage()); delay(2000); clearLCD(); u8g.firstPage(); 做{next(); } while(u8g.nextPage()); delay(2000); clearLCD(); u8g.firstPage(); 做{picture(); } while(u8g.nextPage()); 延迟(3000); clearLCD(); 延迟(50); }
在使用给定的代码对Arduino进行编程后,按照电路图将图形LCD与Arduino连接,并使用适配器或USB为Arduino提供电源。您将在图形LCD上打印内容和图像,如下面的视频所示。
还要检查诺基亚5110图形LCD与Arduino的接口,