在我们的日常生活中,我们看到了许多用于显示文本,图像和图形的设备。LCD是电子产品中最流行的显示设备之一,并且几乎在所有显示某种信息的项目中使用。电子项目中使用了许多类型的LCD。我们已经在许多项目中使用了16X2 LCD,并在Arduino上使用了TFT LCD。您可以通过以下链接找到我们所有与16X2 LCD相关的项目,包括与8051,AVR,Arduino等的接口。
在本教程中,我们将与8051微控制器进行 图形LCD接口。在这个项目中,我们将展示如何在图形LCD(GLCD)上显示图像。
所需组件:
- 图形LCD
- AT89c52 8051单片机
- 7805稳压器
- 1000uf电容器
- 10 uF电容器
- 10K电阻
- 10K锅
- 晶体振荡器12 MH
- 连接线
- 面包板
- 防盗条男
- 电源供应
- LED
- 220欧姆电阻
- 1K电阻
图形LCD:
一个简单的16x2 LCD有16针,而图形LCD有20针。下面根据其数据手册给出了引脚说明:
销号 | 引脚名称 | 描述 | 功能 |
1个 | VSS | 地面 | 0伏 |
2 | VDD | 电源供应 | 5伏 |
3 | V0 | LCD对比度调整 | |
4 | RS | 命令/数据寄存器选择 | RS = 0:命令选择,RS = 1:数据选择 |
5 | 读/写 | 读/写寄存器 | R / W = 0:写选择,R / W = 1:读选择 |
6 | Ë | 启用信号 | |
7 | DB0 | 数据输入/输出引脚(DB0-DB7) | 8位(DB0-DB7) |
8 | DB1 | ||
9 | DB2 | ||
10 | DB3 | ||
11 | DB4 | ||
12 | DB5 | ||
13 | DB6 | ||
14 | DB7 | ||
15 | CS1 | 片选 | CS1 = 1,IC1的片选信号 |
16 | CS2 | 片选 | CS2 = 1,IC2的片选信号 |
17 | RST | 重启 | 重置GLCD |
18岁 | VEE | LCD驱动器的负电压 | |
19 | 一种 | 背光LED | 5伏 |
20 | ķ | 背光LED | 地面 |
使用8051在图形LCD上显示图像:
为了在图形LCD上显示图像,首先我们需要将该图像转换为汇编代码,以便8051微控制器可以理解和读取它。因此,我们需要按照以下步骤将图像转换为十六进制代码:
步骤1:首先,我们需要下载一个将Image(BMP格式)转换为汇编代码的应用程序。因此,从此链接下载BMP2ASM图像转换应用程序,只需右键单击该链接,然后单击“将链接另存为”即可。
第2步:然后,选择要显示的图像图形LCD和它转换成BMP使用,如MS画图时,Photoshop等任何应用程序,(如果它不是以BMP格式的话)或者,你可以找到很多在线网站用于图像格式转换。我们下面有BMP图片,尺寸为128x64:
步骤3:现在解压缩我们在步骤1中下载的BMP2ASM.zip文件,并在其中打开Bmp2asm.exe,然后选择BMP映像。
步骤4:现在在BMP2ASM应用程序窗口中按“转换”。
步骤5:然后复制生成的代码并将其粘贴到Keil uVision中的8051程序中。进行一些更改并编译代码。
现在,您的代码可以在8051微控制器中上传了。
电路说明:
用于将图形LCD连接到8051微控制器的电路连接非常简单,几乎就像将16x2 LCD连接到8051一样。但是16x2 LCD有16针,GLCD有20针。
10K电位器用于设置GLCD的对比度。GLCD RS,R / W和E的控制引脚直接连接到89C52引脚编号P1.0,P1.1和P1.2。LCD的片选引脚CS1和CS2分别连接到引脚P1.3和P1.4。数据引脚DB0-DB7直接连接到PORT P2。7805稳压器用于常规5伏电源。在演示视频中,我使用了Arduino电源。
编程说明:
首先,我们在程序中包含必需的头文件,并为GLCD的控制和数据引脚定义位。
#包括
之后,我们创建了一个延迟函数。
void delay(int itime){int i,j; 对于(i = 0; i
函数 void lcd_disp_on() 用于打开显示器。
创建函数 void setCursorY(int y) 来设置GLCD中的列,并创建函数 void setCursorX(int x) 来设置GLCD上的页面。完整的代码文件在下面的代码部分中给出。
设置“列”和“页面”后,我们编写了一个向GLCD发送命令和数据的功能。
void lcdprint(char dat,int size){unsigned int i; 对于(i = 0; i
在 void main() 函数中,我们清除了GLCD,然后设置了Column和Page。之后,使用 void lcdprint(char dat,int size) 函数将数据发送到LCD 。
void main(){int x,y; P3 = 0xff; while(1){lcdclear(); for(y = 0; y <8; y ++){for(x = 0; x <128; x ++){lcd_disp_on(); setCursorX(y); setCursorY(x); lcdprint(image,x); }}…………………..
代码流:
- 首先,当我们打开系统电源时,程序将清除GLCD并打开显示器。
- 然后将光标设置为Column,从此处写入数据。
- 然后将光标设置到Page,我们要从中写入数据的位置。
- 现在程序将数据一一发送到所选位置,直到128X8次。因为GLCD具有8页和128列。