无论是家用电器还是工业机器,显示器都是机器的必要组成部分。显示屏不仅显示用于操作机器的控制选项,还显示该机器执行的任务的状态和输出。电子产品中使用的显示器类型很多,例如7段显示器,LCD显示器,TFT触摸屏显示器,LED显示器等。16x2 LCD显示器是最基本的显示器,并且还用于某些小型电子设备中的显示器,我们已经做了很多工作。使用16x2 LCD的项目,包括与其他微控制器的基本接口:
- LCD与8051单片机的接口
- LCD与ATmega32单片机的接口
- 与PIC单片机的LCD接口
- 将16x2 LCD与Arduino接口
- 使用Python与Raspberry Pi进行16x2 LCD接口
在本教程中,我们将看到如何将16x2 LCD与ARM7-LPC2148微控制器接口并显示一条简单的欢迎消息。如果您不熟悉ARM7,请从ARM7 LPC2148的基础知识入手,了解如何使用Keil uVision对其进行编程
所需材料
硬件
- ARM7-LPC2148微控制器板
- 液晶屏(16X2)
- 电位器
- 5V稳压器IC
- 面包板
- 连接线
- 9V电池
- 微型USB电缆
软件
- Keil uVision 5
- 魔术闪光工具
在进入项目之前,我们必须几乎不了解LCD的操作模式和LCD十六进制代码。
16X2 LCD显示模块
16X2 LCD表示有16列和2行。该液晶显示器有16个引脚。下图和表格显示了LCD显示器的引脚名称及其功能。
名称 |
功能 |
VSS |
接地脚 |
VDD |
+ 5V输入引脚 |
VEE |
对比度调节销 |
RS |
注册选择 |
读/写 |
读/写引脚 |
Ë |
使能引脚 |
D0-D7 |
数据引脚(8引脚) |
LED灯 |
阳极引脚(+ 5V) |
发光二极管 |
阴极引脚(GND) |
LCD可以在两种不同的模式下工作,即4位模式和8位模式。在4位模式下, 我们先将数据半字节发送,首先是高半字节,然后是低半字节。对于那些不知道什么是半字节的人:半字节是一组四位,因此字节的低四位(D0-D3)形成低四位,而高四位(D4-D7)字节的形式从较高的半字节开始。这使我们能够发送8位数据。
而在8位模式下, 由于我们使用了全部8条数据线,因此可以一键直接发送8位数据。
在此项目中,我们将使用最常用的模式,即4位模式。在四位模式下,我们可以节省4个微控制器引脚,还可以减少布线开销。
16x2还使用HEX代码执行任何命令,LCD有很多十六进制命令,例如移动光标,选择模式,将控件移至第二行等。要了解有关16X2 LCD显示模块和十六进制命令的更多信息,请单击链接。
电路图和连接
下表显示了LCD与ARM7-LPC2148之间的电路连接。
ARM7-LPC2148 |
液晶屏(16x2) |
P0.4 |
RS(寄存器选择) |
P0.6 |
E(启用) |
P0.12 |
D4(数据引脚4) |
P0.13 |
D5(数据引脚5) |
P0.14 |
D6(数据引脚6) |
P0.15 |
D7(数据引脚7) |
LCD和ARM7 Stick的稳压器连接
下表显示了带稳压器的ARM7和LCD之间的连接。
稳压器IC |
引脚功能 |
LCD和ARM-7 LPC2148 |
1.左销 |
+ Ve来自电池9V输入 |
数控 |
2.中心销 |
-来自电池的Ve |
LCD的VSS,R / W,K ARM7的GND |
3.右销 |
稳压+ 5V输出 |
LCD的VDD,A + 5V的ARM7 |
液晶电位器
电位计用于改变LCD显示的对比度。一个电位计具有三个引脚,左引脚(1)连接到+ 5V,而中心(2)连接到LCD模块的VEE或V0,右引脚(3)连接到GND。我们可以通过旋转旋钮来调整对比度。
跳线设置
ARM7-Stick中有一个跳线引脚,因此我们可以使用USB或仅使用5V DC输入供电来上电并上传代码。您可以看到以下图像。
下图显示了跳线处于DC位置。这意味着我们必须通过外部5V电源为电路板供电。
此图显示跳线已在USB模式下连接。这里的电源和代码是通过微型USB端口提供的。
注意:在本教程中,我们已通过使用USB来上传代码,方法是将跳线设置为USB,然后将跳线更改为DC模式,以通过5v稳压器输入为LPC2148供电。您可以在末尾的视频中查看。
将16x2 LCD与ARM7微处理器接口的最终电路如下所示:
编程ARM7-LPC2148
要编程ARM7-LPC2148,我们需要keil uVision和Flash Magic工具。我们正在使用USB电缆通过微型USB端口对ARM7 Stick进行编程。我们使用Keil编写代码并创建一个十六进制文件,然后使用Flash Magic将HEX文件闪存到ARM7 Stick。要了解有关安装keil uVision和Flash Magic以及如何使用它们的更多信息,请单击链接ARM7 LPC2148微控制器入门并使用Keil uVision对其进行编程。
本教程的结尾给出了LCD与ARM 7接口的完整代码,在这里我们解释其中的一些部分。
首先,我们需要包含所需的头文件
#包括
初始化LCD模块是非常重要的一步。在这里,我们使用某些实际上是命令的十六进制代码来告诉LCD操作模式(4位),LCD类型(16x2),起始行等。
void LCD_INITILIZE(void)//准备LCD的功能 { IO0DIR = 0x0000FFF0; //将引脚P0.4,P0.6,P0.12,P0.13,P0.14,P0.15设置为OUTPUT delay_ms (20); LCD_SEND(0x02); //以4位工作模式初始化LCD LCD_SEND(0x28); // 2行(16X2) LCD_SEND(0x0C); //在光标旁边显示 LCD_SEND(0x06); //自动递增光标 LCD_SEND(0x01); //显示清晰的 LCD_SEND(0x80); //第一行第一位置 }
对于4位模式,我们对引脚有不同类型的写入功能,即使用上下半字节。让我们看看如何完成
void LCD_SEND(char命令)//通过半字节发送十六进制命令的函数 { IO0PIN =((IO0PIN&0xFFFF00FF)-((command&0xF0)<< 8)); //发送命令 IO0SET的 高位半字节= 0x00000040; //使能HIGH IO0CLR = 0x00000030; //使RS&RW LOW delay_ms(5); IO0CLR = 0x00000040; //启用LOW delay_ms (5); IO0PIN =((IO0PIN&0xFFFF00FF)-((命令&0x0F)<< 12)); //发送命令 IO0SET的 低位半字节= 0x00000040; // ENABLE HIGH IO0CLR = 0x00000030; // RS&RW LOW delay_ms(5); IO0CLR = 0x00000040; // ENABLE LOW delay_ms(5); }
半字节发送逻辑
IO0PIN =((IO0PIN&0xFFFF00FF)-((命令&0x0F)<< 12)); //发送命令 IO0PIN的下半字节=((IO0PIN&0xFFFF00FF)-((command&0xF0)<< 8)); //发送命令的上半字节
以上两个语句在此程序中起着重要作用。第一个命令发送较低的半字节,第二个命令发送较高的半字节。这不会影响我们所做的其他工作。让我们先看看它是如何发生的
ORing-(A-0 = A),(A-1 = 1) ANDing-(A&0 = 0),(A&1 = A)
因此,我们使用屏蔽概念和逻辑移位操作而不影响其他引脚。表示仅使用引脚(P0.12-P0.15),而其他引脚(例如P0.4,P0.6)不受影响。通过将数据移位四位并用上半字节代替下半字节并屏蔽上半字节来完成此操作。然后,使低位为零(0XF0),并与半字节数据进行或运算,以在输出中获得高半字节数据。
类似的过程也用于较低的半字节数据,但是这里我们不需要移动数据。
在将数据写入输出时,即在命令模式下, RS应该为低电平,执行使能必须为高;在数据模式下, RS应该为高电平,并且执行使能必须为高。
现在,为了发送要在输出中打印的字符串数据,逐字节地使用相同的原理。此处的重要步骤是,对于数据模式,REGISTER SELECT(RS)必须为HIGH。
void LCD_DISPLAY(char * msg)//打印一一发送的字符的功能 { uint8_t i = 0; while(msg!= 0) { IO0PIN =((IO0PIN&0xFFFF00FF)-(((msg&0xF0)<< 8));; //发送高位半字节 IO0SET = 0x00000050; // RS HIGH&ENABLE HIGH以打印数据 IO0CLR = 0x00000020; // RW LOW写模式 延迟ms(2); IO0CLR = 0x00000040; // EN = 0,RS和RW不变(即RS = 1,RW = 0), 延迟ms(5); IO0PIN =((IO0PIN和0xFFFF00FF)-((msg&0x0F)<< 12)); //发送低位半字节 IO0SET = 0x00000050; // RS&EN HIGH IO0CLR = 0x00000020; 延迟ms(2); IO0CLR = 0x00000040; 延迟ms(5); i ++; }
完整的编码和演示视频如下。