在本教程中,我們將了解如何將 16x2 LCD 與 ARM7-LPC2148 微控制器連接,并顯示簡(jiǎn)單的歡迎消息。如果您是 ARM7 的新手,請(qǐng)從 ARM7 LPC2148 的基礎(chǔ)知識(shí)開始,并了解如何使用 Keil uVision 對(duì)其進(jìn)行編程
所需材料
硬件
ARM7-LPC2148 微控制器板
液晶屏 (16X2)
電位計(jì)
5V 穩(wěn)壓器 IC
試驗(yàn)板
連接線
9V電池
微型 USB 連接線
軟件
凱爾烏維森 5
魔術(shù)閃光工具
在進(jìn)入項(xiàng)目之前,我們必須對(duì)LCD操作模式和LCD十六進(jìn)制代碼知之甚少。
16X2液晶顯示模塊
16X2 LCD表示它有16列和2行。此液晶屏有 16 個(gè)引腳。下圖顯示了LCD顯示器的引腳名稱及其功能。
LCD可以在兩種不同的模式下工作,即4位模式和8位模式。在 4 位模式下,我們逐個(gè)半字節(jié)發(fā)送數(shù)據(jù),首先是上半字節(jié),然后是下半字節(jié)。對(duì)于那些不知道什么是半字節(jié)的人:半字節(jié)是一組四位,所以字節(jié)的下四位(D0-D3)形成下半字節(jié),而字節(jié)的上四位(D4-D7)形成較高的半字節(jié)。這使我們能夠發(fā)送8位數(shù)據(jù)。
而在8位模式下,我們可以一次直接發(fā)送8位數(shù)據(jù),因?yàn)槲覀兪褂昧怂?條數(shù)據(jù)線。
在本項(xiàng)目中,我們將使用最常用的模式,即4位模式。在四位模式下,我們可以節(jié)省4個(gè)引腳的微控制器,并減少布線開銷。
16x2還使用十六進(jìn)制代碼來接受任何命令,LCD有許多十六進(jìn)制命令,例如移動(dòng)光標(biāo),選擇模式,將控件移動(dòng)到第二行等。
電路圖和連接
下表顯示了液晶屏與 ARM7-LPC2148 之間的電路連接。
穩(wěn)壓器與液晶屏的連接 / ARM7 棒
下表顯示了 ARM7 和 LCD 與穩(wěn)壓器之間的連接。
帶液晶屏的電位計(jì)
電位計(jì)用于改變LCD顯示器的對(duì)比度。電位器有三個(gè)引腳,左引腳(1)連接到+5V,中心(2)連接到LCD模塊的VEE或V0,右引腳(3)連接到GND。我們可以通過轉(zhuǎn)動(dòng)旋鈕來調(diào)整對(duì)比度。
跳線設(shè)置
ARM7-Stick中存在跳線引腳,因此我們可以通過使用USB或使用5V DC輸入來供電和上傳代碼。您可以看到下面的圖像。
下圖顯示了跳線處于直流位置。這意味著我們必須從外部5V電源為電路板供電。
這張圖片顯示跳線是在USB模式下連接的。在這里,電源和代碼通過微型USB端口提供。
注意:在本教程中,我們通過使用USB上傳代碼,將跳線設(shè)置為USB,然后將跳線更改為直流模式,以從穩(wěn)壓器的5v輸入為L(zhǎng)PC2148供電。您可以在最后給出的視頻中查看。
將16x2 LCD 與 ARM7 微控制器連接的最終電路如下所示:
編程 ARM7-液化板 2148
要對(duì)ARM7-LPC2148進(jìn)行編程,我們需要可視化和閃存魔術(shù)工具。我們正在使用USB電纜通過微型USB端口對(duì)ARM7記憶棒進(jìn)行編程。我們使用Keil編寫代碼并創(chuàng)建一個(gè)十六進(jìn)制文件,然后使用閃存魔術(shù)將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模塊是一個(gè)非常重要的步驟。在這里,我們使用某些十六進(jìn)制代碼,這些代碼實(shí)際上是命令,以告訴LCD有關(guān)操作模式(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
}
對(duì)于4位模式,我們對(duì)引腳有不同類型的寫入功能,即使用上下半字節(jié)。讓我們看看,它是如何完成的
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);
}
蠶食發(fā)送邏輯
IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0x0F)<<12) ); //Send Lower nibble of command?
IO0PIN = ( (IO0PIN & 0xFFFF00FF) | ((command & 0xF0)<<8) ); //Send upper nibble of command?
以上兩種說法在本方案中起著重要作用。第一個(gè)命令發(fā)送下半字節(jié),第二個(gè)命令發(fā)送上半字節(jié)。這不會(huì)影響我們所做的其他引腳。讓我們先看看它是如何發(fā)生的,然后再了解這個(gè)邏輯
ORing- (A|0=A),(A|1=1)
ANDing-(A&0=0),(A&1=A)
因此,我們使用屏蔽概念和邏輯移位操作,而不會(huì)影響其他引腳。表示僅使用引腳 (P0.12-P0.15),不影響 P0.4、P0.6 等其他引腳。它將通過將數(shù)據(jù)移入四位并使上半字節(jié)代替下半字節(jié)并掩蓋上半字節(jié)來完成。然后,我們將下位設(shè)為零(0XF0),并使用半字節(jié)數(shù)據(jù)進(jìn)行ORed,以獲得輸出端的上半字節(jié)數(shù)據(jù)。
類似的過程用于較低的蠶食數(shù)據(jù),但在這里我們不需要移動(dòng)數(shù)據(jù)。
在將數(shù)據(jù)寫入輸出時(shí),即在命令模式下,RS 應(yīng)為 LOW,執(zhí)行使能必須為高電平,而在數(shù)據(jù)模式下,RS 應(yīng)為高電平,執(zhí)行使能必須為高電平。
現(xiàn)在,為了發(fā)送要在輸出端打印的字符串?dāng)?shù)據(jù),相同的原理是逐個(gè)半字節(jié)地使用。這里的重要步驟是寄存器選擇(RS)對(duì)于數(shù)據(jù)模式必須為高電平。
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++;
}
-
微控制器
+關(guān)注
關(guān)注
48文章
7658瀏覽量
152173 -
lcd
+關(guān)注
關(guān)注
34文章
4438瀏覽量
168446 -
LPC2148
+關(guān)注
關(guān)注
0文章
25瀏覽量
14953
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用ESP8266和LPC2148遠(yuǎn)程控制設(shè)備的方式
![使用ESP8266和<b class='flag-5'>LPC2148</b>遠(yuǎn)程控制設(shè)備的方式](https://file.elecfans.com/web2/M00/6B/9F/pYYBAGMpd8CAa4uwAABPvtWwPfI791.png)
使用ARM7-LPC2148控制伺服電機(jī)的教程
![使用<b class='flag-5'>ARM7-LPC2148</b>控制伺服電機(jī)的教程](https://file.elecfans.com/web2/M00/6B/8A/poYBAGMsH2OAbgcBAAIWv53GZgQ466.png)
ARM7-LPC2148開發(fā)板
串行顯示LCD 16x2監(jiān)視器
使用ARM7 LPC2148微控制器構(gòu)建一個(gè)簡(jiǎn)單的機(jī)械臂
![使用<b class='flag-5'>ARM7</b> <b class='flag-5'>LPC2148</b>微控制器構(gòu)建一個(gè)簡(jiǎn)單的機(jī)械臂](https://file.elecfans.com/web2/M00/64/C8/pYYBAGMF29mAZtIMAAVusp4pl6I573.png)
如何在ARM7-LPC2148中使用ADC
![如何在<b class='flag-5'>ARM7-LPC2148</b>中使用ADC](https://file.elecfans.com//web2/M00/6C/69/pYYBAGMtdjGABlq3AAAT0D4NqgI682.png)
如何連接和使用16x2 I2C LCD的教程
![如何<b class='flag-5'>連接</b>和使用<b class='flag-5'>16x2</b> I<b class='flag-5'>2</b>C <b class='flag-5'>LCD</b>的教程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何將16x2 LCD與Raspberry pi4連接
![如何<b class='flag-5'>將</b><b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b>與Raspberry pi4<b class='flag-5'>連接</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論