|
在项目中我们使用到的液晶显示屏种类繁多。我们已经在许多项目中使用了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的电位器 ● 连接导线 ● 面包板
电路原理图
12864图形LCD简介 该图形液晶显示屏具有低功耗,并且适用于便携式设备的电池供电。它具有2.2v至5.5v的宽工作电压范围,并支持串行和8/4位并行通信,并采用LCD控制器/驱动器芯片ST7290 。接口通信模式可以使用PSB(15脚)在并行和串行之间切换。该图形LCD具有自动上电复位功能,可以通过MCU(如8051、AVR、ARM、Arduino和Raspberry Pi)轻松进行控制。
详细信息您可以通过查看数据手册进行了解:12864图形LCD(ST7290)。
引脚配置 该图形点阵的引脚配置见下表: 引脚编号 | 引脚名称 | 描述 | | 1 | GND | 接地 | | 2 | VCC | 电源电压(2.7v至5.5v)
| | 3 | VO | LCD对比度调节 | | 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或者更小,您可以使用任何图像编辑软件来执行此操作。
如上图所示,我们将图像的宽度和高度设置为128 * 64。
第2步:然后你需要将图像保存为“image_name.bmp”格式。
选择上图中显示的格式并保存该文件以进一步处理。
第3步:将其保存为“.bmp”格式后,您需要将图像转换为用于打印的十六进制代码。为此,我使用名为GIMP 2的软件,它将Bmp文件转换为十六进制代码。
如上图所示,我们在GIMP 2软件中打开了“.bmp”格式文件。
第4步:下载软件后,打开要打印的BMP格式图像文件,然后以“.xbm”(X BitMap)格式保存。保存后使用记事本打开该文件,您将得到图像的十六进制代码。 如下图所示,选择Export As...选项以xbm格式保存文件:
选择下图中显示的格式并导出图像文件。
导出文件后,您将得到一个“.xbm”格式的文件。使用记事本打开xbm文件,您将得到HEX代码,如下图所示。
Arduino代码和工作原理
为了将图形LCD与Arduino进行连接,首先我们需要定义用于图形LCD的库。 Arduino没有这个库,你必须从这个链接下载并安装这个库。然后你可以像下面那样包含这个库: 这里,'u8g(0)'定义了图形LCD的RS(寄存器选择)引脚与Arduino UNO的第10引脚的连接。 RS引脚在串行和并行模式下分别用作'片选'和'寄存器选择'。我们使用的是串行模式,因此,RS引脚设置为High(1)用于芯片使能,Low(0)用于芯片禁用。 - U8GLIB_ST7920_128X64_4X u8g(10);
复制代码
现在,为了打印图像,我们需要将图像的十六进制代码放在下面的代码中。您可以打印任何其他图像,只需粘贴图像的十六进制代码即可。 - const uint8_t rook_bitmap[] U8G_PROGMEM = {
- Paste the Hex code of image here
- };
复制代码查看本文最后的完整Arduino代码。
下列函数用于打印图像,用于打印的命令为“u8g.drawXBMP(x, y, width of image, height of image)”。其中,X和Y是LCD上图像的起始位置,我们还需要写出不应超过128 * 64的图像大小,并且在最后的参数中我们调用放置图像HEX代码的函数。 - void picture(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, "CIRCUIT DIGEST");
- }
- void next(void) {
- u8g.setFont(u8g_font_unifont);
- u8g.drawStr( 0, 15, "Interfacing");
- u8g.drawStr( 0, 35, "Graphical LCD");
- u8g.drawStr( 0, 55, "with Arduino");
- }
复制代码
clearLCD()函数仅用于赋予函数空值来清空LCD。 - void clearLCD(){
- u8g.firstPage();
- do {
- } 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); // max intensity
- }
- else if ( u8g.getMode() == U8G_MODE_BW ) {
- u8g.setColorIndex(1); // pixel on
- }
- else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
- u8g.setHiColorByRGB(255,255,255);
- }
- }
复制代码
在给定的延迟之后,void loop()函数继续打印文本和图像。首先,我们使用draw函数打印了“Circuit Digest”,2秒延迟后,我们使用clearLCD函数清除屏幕,然后使用next函数打印“Interfacing Graphical LCD using Arduino”。然后我们使用picture()函数打印图像,该图像将在屏幕上停留3秒钟。这将持续到电源断开。 - void loop(void) {
- u8g.firstPage();
- do {
- draw();
- } while( u8g.nextPage() );
- delay(2000);
- clearLCD();
- u8g.firstPage();
- do {
- next();
- } while( u8g.nextPage() );
- delay(2000);
- clearLCD();
- u8g.firstPage();
- do {
- picture();
- } while( u8g.nextPage() );
- delay(3000);
- clearLCD();
- delay(50);
- }
复制代码
使用上述的代码对Arduino进行编程,然后按照电路原理图将图形LCD与Arduino连接起来,并使用适配器或USB向Arduino供电。您将在图形LCD上看到显示的内容和图像。
代码 本文使用的全部代码如下:
main.txt
(7.9 KB, 下载次数: 87)
|