风筝
发表于: 2018-4-9 23:28:09 | 显示全部楼层

Interfacing-Graphical-LCD-with-Arduino.jpg


在项目中我们使用到的液晶显示屏种类繁多。我们已经在许多项目中使用了1602的LCD以及TFT LCD来连接Arduino开发板。您可以通过以下链接找到论坛中所有与LCD相关的项目。ST9720图形点阵显示屏与普通的LCD完全不同。普通LCD只能打印固定大小的简单文本或数字。但在图形点阵显示屏中,我们有128 * 64也就是8192个点或者说是8192/8 = 1024个像素,因此除了字符之外,我们可以在此图形LCD上显示任何图形图像。在本篇文章中我们将介绍如何将图形LCD与Arduino开发板进行连接,并在LCD上显示文本和图像。


所需的材料

●    Arduino UNO开发板

●    12864图形LCD(主控为ST9720

●    一个10K的电位器

●    连接导线

●    面包板


电路原理图

Interfacing-circuit-diagram-of-Graphical-LCD-with-Arduino.png

Interfacing-Graphical-LCD-with-Arduino-circuit-hardware.jpg


12864图形LCD简介

该图形液晶显示屏具有低功耗,并且适用于便携式设备的电池供电。它具有2.2v至5.5v的宽工作电压范围,并支持串行和8/4位并行通信,并采用LCD控制器/驱动器芯片ST7290 。接口通信模式可以使用PSB(15脚)在并行和串行之间切换。该图形LCD具有自动上电复位功能,可以通过MCU(如8051、AVR、ARM、Arduino和Raspberry Pi)轻松进行控制。

ST7290-Graphical-LCD.jpg

详细信息您可以通过查看数据手册进行了解:12864图形LCD(ST7290)


引脚配置

该图形点阵的引脚配置见下表:

引脚编号
引脚名称
描述
1 GND 接地
2 VCC电源电压(2.7v至5.5v)
3 VOLCD对比度调节
4 RS 寄存器选择
RS = 0:指令寄存器;RS = 1:数据寄存器
5 R / W 读/写控制
6 E
LCD使能
7、8、9、10、11、12、13、14 DB0、DB1、DB2、DB3、DB4、DB5、DB6、DB7 数据引脚(用于并行8/4位通信模式)
15 PSB 连接模式选择:低点平(0)用于串行通信模式;高电平(1)为8/4位并行总线模式。
16 NC 未连接
17 RST 复位
18 VOUT LCD倍压器输出。 VOUT≦7V。
19 BLA 背光正极
20 BLK 背光负极

常见的应用场所

◼    工业设备

◼    嵌入式系统

◼    安全设备

◼    医疗器械

◼    手持设备应用


将图像转换为十六进制代码

要在图形LCD上显示任何图像,我们需要该图像的HEX代码,因此这里有几个步骤将图像转换为HEX代码。在此之前,您必须确保图像的大小不应超过128 * 64。


第1步:将正常图像的大小减小到128 * 64或者更小,您可以使用任何图像编辑软件来执行此操作。

Decreasing-size-to-128-64.png

如上图所示,我们将图像的宽度和高度设置为128 * 64。


第2步:然后你需要将图像保存为“image_name.bmp”格式。

Saving-image-in-bmp-format.png

选择上图中显示的格式并保存该文件以进一步处理。


第3步:将其保存为“.bmp”格式后,您需要将图像转换为用于打印的十六进制代码。为此,我使用名为GIMP 2的软件,它将Bmp文件转换为十六进制代码。

Open-the-bmp-formatted-image-in-GIMP-2-software.png

如上图所示,我们在GIMP 2软件中打开了“.bmp”格式文件。


第4步:下载软件后,打开要打印的BMP格式图像文件,然后以“.xbm”(X BitMap)格式保存。保存后使用记事本打开该文件,您将得到图像的十六进制代码。

如下图所示,选择Export As...选项以xbm格式保存文件:

Export-image-using-GIMP-2-software.png

选择下图中显示的格式并导出图像文件。

Chosse-xbm-format-to-save-hex-code-of-image.png

导出文件后,您将得到一个“.xbm”格式的文件。使用记事本打开xbm文件,您将得到HEX代码,如下图所示。

Hex-code-of-IPL-image.png


Arduino代码和工作原理

Interfacing-Graphical-LCD-with-Arduino-in-action.jpg

为了将图形LCD与Arduino进行连接,首先我们需要定义用于图形LCD的库。 Arduino没有这个库,你必须从这个链接下载并安装这个库。然后你可以像下面那样包含这个库:

  1. #include "U8glib.h"
复制代码

这里,'u8g(0)'定义了图形LCD的RS(寄存器选择)引脚与Arduino UNO的第10引脚的连接。 RS引脚在串行和并行模式下分别用作'片选'和'寄存器选择'。我们使用的是串行模式,因此,RS引脚设置为High(1)用于芯片使能,Low(0)用于芯片禁用。

  1. U8GLIB_ST7920_128X64_4X u8g(10);
复制代码

现在,为了打印图像,我们需要将图像的十六进制代码放在下面的代码中。您可以打印任何其他图像,只需粘贴图像的十六进制代码即可。

  1. const uint8_t rook_bitmap[] U8G_PROGMEM = {
  2. Paste the Hex code of image here
  3. };
复制代码

查看本文最后的完整Arduino代码。


下列函数用于打印图像,用于打印的命令为“u8g.drawXBMP(x, y, width of image, height of image)”。其中,X和Y是LCD上图像的起始位置,我们还需要写出不应超过128 * 64的图像大小,并且在最后的参数中我们调用放置图像HEX代码的函数。

  1. void picture(void) {
  2.   u8g.drawXBMP( 0, 0, 128, 64, rook_bitmap);
  3. }
复制代码

我们编写了两个函数:“draw”和“next”,其中使用命令“u8g.drawStr(x,y,”abcd“)”写入打印内容的代码。这里,x和y是内容将被打印的LCD中的位置,'abcd'是要打印的内容。

  1. void draw(void) {
  2.   u8g.setFont(u8g_font_unifont);
  3.    u8g.drawStr( 07, 35, "CIRCUIT DIGEST");
  4. }
  5. void next(void) {
  6.   u8g.setFont(u8g_font_unifont);
  7.   u8g.drawStr( 0, 15, "Interfacing");
  8.   u8g.drawStr( 0, 35, "Graphical LCD");
  9.   u8g.drawStr( 0, 55, "with Arduino");
  10. }
复制代码

clearLCD()函数仅用于赋予函数空值来清空LCD。

  1. void clearLCD(){
  2.     u8g.firstPage();
  3.     do {
  4.     } while( u8g.nextPage() );
  5. }
复制代码

使用下面的代码设置像素,颜色和亮度。

  1. void setup(void) {
  2.   if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
  3.     u8g.setColorIndex(255);     // white
  4.   }
  5.   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
  6.     u8g.setColorIndex(3);         // max intensity
  7.   }
  8.   else if ( u8g.getMode() == U8G_MODE_BW ) {
  9.     u8g.setColorIndex(1);         // pixel on
  10.   }
  11.   else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
  12.     u8g.setHiColorByRGB(255,255,255);
  13.   }
  14. }
复制代码

在给定的延迟之后,void loop()函数继续打印文本和图像。首先,我们使用draw函数打印了“Circuit Digest”,2秒延迟后,我们使用clearLCD函数清除屏幕,然后使用next函数打印“Interfacing Graphical LCD using Arduino”。然后我们使用picture()函数打印图像,该图像将在屏幕上停留3秒钟。这将持续到电源断开。

  1. void loop(void) {
  2.   u8g.firstPage();
  3.   do {
  4.     draw();
  5.   } while( u8g.nextPage() );
  6.   delay(2000);
  7.   clearLCD();

  8.   u8g.firstPage();
  9.   do {
  10.     next();
  11.   } while( u8g.nextPage() );
  12.     delay(2000);
  13.   clearLCD();

  14.   u8g.firstPage();
  15.   do {
  16.      picture();
  17.   } while( u8g.nextPage() );
  18.   delay(3000);
  19. clearLCD();
  20. delay(50);
  21. }
复制代码

使用上述的代码对Arduino进行编程,然后按照电路原理图将图形LCD与Arduino连接起来,并使用适配器或USB向Arduino供电。您将在图形LCD上看到显示的内容和图像。


代码

本文使用的全部代码如下: main.txt (7.9 KB, 下载次数: 82)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-8 09:41 , Processed in 0.045075 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表