将16x2 LCD与ARM7-LPC2148连接并显示文字

发布时间:2023-02-15  

在本教程中,我们将了解如何将 16x2 LCD 与 ARM7-LPC2148 微控制器连接,并显示简单的欢迎消息。如果您是 ARM7 的新手,请从 ARM7 LPC2148 的基础知识开始,并了解如何使用 Keil uVision 对其进行编程


所需材料

硬件

ARM7-LPC2148 微控制器板

液晶屏 (16X2)

电位计

5V 稳压器 IC

试验板

连接线

9V电池

微型 USB 连接线

软件

凯尔乌维森 5

魔术闪光工具

在进入项目之前,我们必须对LCD操作模式和LCD十六进制代码知之甚少。

16X2液晶显示模块

16X2 LCD表示它有16列和2行。此液晶屏有 16 个引脚。下图显示了LCD显示器的引脚名称及其功能。

pYYBAGNbnPaALpgqAAApmrSZMRU935.png


poYBAGNbnGKAAUhsAABw4z1oS6U392.png

LCD可以在两种不同的模式下工作,即4位模式和8位模式。在 4 位模式下,我们逐个半字节发送数据,首先是上半字节,然后是下半字节。对于那些不知道什么是半字节的人:半字节是一组四位,所以字节的下四位(D0-D3)形成下半字节,而字节的上四位(D4-D7)形成较高的半字节。这使我们能够发送8位数据。

而在8位模式下,我们可以一次直接发送8位数据,因为我们使用了所有8条数据线。

在本项目中,我们将使用最常用的模式,即4位模式。在四位模式下,我们可以节省4个引脚的微控制器,并减少布线开销。

16x2还使用十六进制代码来接受任何命令,LCD有许多十六进制命令,例如移动光标,选择模式,将控件移动到第二行等。

电路图和连接

poYBAGNbnHuAbeLwAAGsU8No_UU228.png

下表显示了液晶屏与 ARM7-LPC2148 之间的电路连接。

pYYBAGNbnI2AX96gAABb2XK9euc985.png

稳压器与液晶屏的连接 / ARM7 棒

下表显示了 ARM7 和 LCD 与稳压器之间的连接。

poYBAGNbnJyAVKAkAABw2-7SGp0776.png

带液晶屏的电位计

电位计用于改变LCD显示器的对比度。电位器有三个引脚,左引脚(1)连接到+5V,中心(2)连接到LCD模块的VEE或V0,右引脚(3)连接到GND。我们可以通过转动旋钮来调整对比度。

跳线设置

ARM7-Stick中存在跳线引脚,因此我们可以通过使用USB或使用5V DC输入来供电和上传代码。您可以看到下面的图像。

下图显示了跳线处于直流位置。这意味着我们必须从外部5V电源为电路板供电。

poYBAGNbnPiAUVFVAACD63yUcbA985.jpg

这张图片显示跳线是在USB模式下连接的。在这里,电源和代码通过微型USB端口提供。

pYYBAGNbnPqAPVJsAACCdxs_dcA071.jpg

注意:在本教程中,我们通过使用USB上传代码,将跳线设置为USB,然后将跳线更改为直流模式,以从稳压器的5v输入为LPC2148供电。您可以在最后给出的视频中查看。

将16x2 LCD 与 ARM7 微控制器连接的最终电路如下所示:

pYYBAGNbnPyAcleXAADLYMJhBUQ265.jpg

编程 ARM7-液化板 2148

要对ARM7-LPC2148进行编程,我们需要可视化和闪存魔术工具。我们正在使用USB电缆通过微型USB端口对ARM7记忆棒进行编程。我们使用Keil编写代码并创建一个十六进制文件,然后使用闪存魔术将HEX文件闪存到ARM7棒。

本教程末尾给出了将 LCD 与 ARM 7 连接的完整代码,下面我们将介绍其中的一些部分。

首先,我们需要包含所需的头文件

#include -Header File to include LPC214x libraries

#include -Header File for using integer type with specified widths

#include - Header File for include standard library

#include - Header File for include standard input output library

初始化LCD模块是一个非常重要的步骤。在这里,我们使用某些十六进制代码,这些代码实际上是命令,以告诉LCD有关操作模式(4位),LCD类型(16x2),起始行等的信息。

void LCD_INITILIZE(void) //Function to get ready the LCD

{

IO0DIR = 0x0000FFF0; //Sets pin P0.4,P0.6 ,P0.12,P0.13,P0.14,P0.15as OUTPUT

delay_ms(20);

LCD_SEND(0x02); // Initialize lcd in 4-bit mode of operation

LCD_SEND(0x28); // 2 lines (16X2)

LCD_SEND(0x0C); // Display on cursor off

LCD_SEND(0x06); // Auto increment cursor

LCD_SEND(0x01); // Display clear

LCD_SEND(0x80); // First line first position

}

对于4位模式,我们对引脚有不同类型的写入功能,即使用上下半字节。让我们看看,它是如何完成的

void LCD_SEND(char command) //Function to send hex commands nibble by nibble

{

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0xF0)<<8) ); //Send upper nibble of command 

IO0SET = 0x00000040; //Making Enable HIGH

IO0CLR = 0x00000030; //Making RS & RW LOW

delay_ms(5);

IO0CLR = 0x00000040; //Makeing Enable LOW

delay_ms(5);

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0x0F)<<12) ); //Send Lower nibble of command 

IO0SET = 0x00000040; //ENABLE HIGH

IO0CLR = 0x00000030; //RS & RW LOW

delay_ms(5);

IO0CLR = 0x00000040; //ENABLE LOW

delay_ms(5);

}

蚕食发送逻辑

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0x0F)<<12) ); //Send Lower nibble of command 

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0xF0)<<8) ); //Send upper nibble of command 

以上两种说法在本方案中起着重要作用。第一个命令发送下半字节,第二个命令发送上半字节。这不会影响我们所做的其他引脚。让我们先看看它是如何发生的,然后再了解这个逻辑

ORing- (A|0=A),(A|1=1)

ANDing-(A&0=0),(A&1=A)

因此,我们使用屏蔽概念和逻辑移位操作,而不会影响其他引脚。表示仅使用引脚 (P0.12-P0.15),不影响 P0.4、P0.6 等其他引脚。它将通过将数据移入四位并使上半字节代替下半字节并掩盖上半字节来完成。然后,我们将下位设为零(0XF0),并使用半字节数据进行ORed,以获得输出端的上半字节数据。

类似的过程用于较低的蚕食数据,但在这里我们不需要移动数据。

在将数据写入输出时,即在命令模式下,RS 应为 LOW,执行使能必须为高电平,而在数据模式下,RS 应为高电平,执行使能必须为高电平。

现在,为了发送要在输出端打印的字符串数据,相同的原理是逐个半字节地使用。这里的重要步骤是寄存器选择(RS)对于数据模式必须为高电平。

void LCD_DISPLAY (char* msg) //Function to print the characters sent one by one

{

uint8_t i=0;

while(msg[i]!=0)

{

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((msg[i] & 0xF0)<<8) ); //Sends Upper nibble 

IO0SET = 0x00000050; //RS HIGH & ENABLE HIGH to print data

IO0CLR = 0x00000020; //RW LOW Write mode

delay ms(2);

IO0CLR = 0x00000040; // EN = 0, RS and RW unchanged(i.e. RS = 1, RW = 0)

delay ms(5);

IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((msg[i] & 0x0F)<<12) ); //Sends Lower nibble

IO0SET = 0x00000050; //RS & EN HIGH

IO0CLR = 0x00000020;

delay ms(2);

IO0CLR = 0x00000040;

delay ms(5);

i++;

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>