将16x2 LCD与Arduino连接方法
原文地址:https://circuitdigest.com/microcontroller-projects/arduino-lcd-interfacing-tutorial
將16x2 LCD與Arduino連接方法
ARDUINO的
經(jīng)過(guò)**迪利普·拉賈(Dilip Raja)** 2015年6月4日19
為了在人的世界和機(jī)器的世界之間建立良好的溝通,顯示單元扮演著重要的角色。因此,它們是嵌入式系統(tǒng)的重要組成部分。顯示單元-不論大小,都遵循相同的基本原理。除了圖形顯示和3D支付等復(fù)雜的顯示單元外,還必須知道如何使用16x1和16x2單元之類(lèi)的簡(jiǎn)單顯示。16x1顯示單元將包含16個(gè)字符,并在一行中。的16×2 LCD將在總16英寸1 32個(gè)字符第一 線和另一條16在2次 線。在此必須理解,每個(gè)字符中都有5x10 = 50像素,因此要顯示一個(gè)字符,所有50像素必須一起工作。但是我們不必?fù)?dān)心,因?yàn)槿藱C(jī)界面中還有另一個(gè)控制器(HD44780)負(fù)責(zé)控制像素。(您可以在LCD單元中看到它,它是背面的黑眼圈)。
在本教程中,我們將使用ARDUINO UNO連接16x2 LCD。與普通的開(kāi)發(fā)板不同,將LCD連接到ARDUINO的過(guò)程非常簡(jiǎn)單。在這里,我們不必?fù)?dān)心數(shù)據(jù)發(fā)送和接收。我們只需要定義引腳號(hào),它就可以在LCD上顯示數(shù)據(jù)了。
所需組件
硬件: ARDUINO UNO,電源(5v),JHD_162ALCD(16x2LCD),100uF電容器。
軟體: Arduino IDE(Arduino nightly)。
電路圖和說(shuō)明
16x2 LCD顯示模塊
帶有HD44780控制器的16x2 LCD顯示模塊
之所以命名為**16×2 LCD,**是因?yàn)?#xff1b;它有16列和2行。有很多可用的組合,例如8×1、8×2、10×2、16×1等。但是最常用的是16 * 2 LCD,因此我們?cè)谶@里使用它。
上面提到的所有LCD顯示屏都將具有16針,并且編程方法也相同,因此選擇權(quán)留給您。以下是16x2 LCD模塊的引腳排列和引腳描述:
| 1 | 引腳1 | GND | 電源極引腳 | 這是LCD的接地引腳 | 連接到MCU /電源的接地 |
| 2 | 引腳2 | VCC | 電源極引腳 | 這是LCD的電源電壓引腳 | 連接到電源的電源引腳 |
| 3 | 引腳3 | V0 / VEE | 控制引腳 | 調(diào)整液晶顯示屏的對(duì)比度。 | 連接到可以提供0-5V電源的可變POT |
| 4 | 引腳4 | 寄存器選擇 | 控制引腳 | 在命令/數(shù)據(jù)寄存器之間切換 | 連接到MCU引腳并獲得0或1。0- > Command Mode 1-> Data Mode |
| 5 | 引腳5 | 讀/寫(xiě) | 控制引腳 | 在讀/寫(xiě)操作之間切換LCD | 連接到MCU引腳并獲得0或1。0- >寫(xiě)入操作 1->讀取操作 |
| 6 | 引腳6 | 使能 | 控制引腳 | 必須保持高電平才能執(zhí)行讀/寫(xiě)操作 | 連接到MCU并始終保持高電平。 |
| 7 | 引腳7-14 | 數(shù)據(jù)位(0-7) | 數(shù)據(jù)/命令引腳 | 用于將命令或數(shù)據(jù)發(fā)送到LCD的引腳。 | 在4線模式下, 只有4個(gè)引腳(0-3)連接到MCU。在8線模式下,所有8個(gè)引腳(0-7)連接到MCU。 |
| 8 | 引腳15 | LED正極 | LED接腳 | 正常的LED狀操作可照亮LCD | 連接到+ 5V |
| 9 | 引腳16 | LED負(fù)極 | LED接腳 | 正常的LED像操作一樣點(diǎn)亮連接到GND的LCD。 | 接地 |
如果您不了解所有引腳的功能也可以,我將在下面詳細(xì)解釋。現(xiàn)在,讓我們回頭看一下LCD:
好吧,這兩個(gè)黑色圓圈像是LCD背面的東西嗎?
這些黑圈由接口IC及其相關(guān)組件組成,可幫助我們將此LCD與MCU配合使用。因?yàn)槲覀兊腖CD是16 * 2點(diǎn)矩陣LCD,所以它將總共有(16 * 2 = 32)32個(gè)字符,每個(gè)字符將由5 * 8像素點(diǎn)組成。下圖顯示了一個(gè)啟用了所有像素的單個(gè)字符。
所以現(xiàn)在,我們知道每個(gè)字符都有(5 * 8 = 40)40個(gè)像素,對(duì)于32個(gè)字符,我們將有(32 * 40)1280個(gè)像素。此外,還應(yīng)指示LCD有關(guān)像素的位置。
在MCU的幫助下處理所有事情將是一項(xiàng)繁重的任務(wù),因此使用了HD44780之類(lèi)的接口IC,該接口IC安裝在LCD模塊本身上。該IC的功能是從MCU獲取命令和數(shù)據(jù),并對(duì)它們進(jìn)行處理,以在我們的LCD屏幕上顯示有意義的信息。
讓我們討論必須由控制引腳控制的LCD中可用的不同類(lèi)型的模式和選項(xiàng)。
*LCD的4位和8位模式*
LCD可以在兩種不同的模式下工作,即4位模式和8位模式。在**4位模式下,**我們先將數(shù)據(jù)半字節(jié)發(fā)送,首先是高半字節(jié),然后是低半字節(jié)。對(duì)于那些不知道什么是半字節(jié)的人:半字節(jié)是一組四位,因此字節(jié)的低四位(D0-D3)形成低四位,而高四位(D4-D7)一個(gè)字節(jié)的形式從較高的半字節(jié)開(kāi)始。這使我們能夠發(fā)送8位數(shù)據(jù)。
而**在8位模式下,**由于我們使用了所有8條數(shù)據(jù)線,因此可以一鍵直接發(fā)送8位數(shù)據(jù)。
現(xiàn)在您一定已經(jīng)猜到了,是的,8位模式比4位模式更快,更完美。但是主要的缺點(diǎn)是它需要將8條數(shù)據(jù)線連接到微控制器。這將使我們用完MCU的I / O引腳,因此廣泛使用4位模式。沒(méi)有控制引腳用于設(shè)置這些模式。這只是編程方式的變化。
*LCD的讀寫(xiě)模式:*
如前所述,LCD本身包含一個(gè)接口IC。MCU可以對(duì)該接口IC進(jìn)行讀取或?qū)懭搿T诖蠖鄶?shù)情況下,我們只會(huì)寫(xiě)IC,因?yàn)樽x取會(huì)使它變得更復(fù)雜,而且這種情況很少見(jiàn)。如果需要,可以讀取諸如光標(biāo)位置,狀態(tài)完成中斷等信息,但這不在本教程的討論范圍之內(nèi)。
大多數(shù)LCD中使用的接口IC是**HD44780U,**為了對(duì)LCD進(jìn)行編程,我們應(yīng)該學(xué)習(xí)IC的完整數(shù)據(jù)表。該數(shù)據(jù)表是這里給出。
*LCD命令:*
LCD中有一些預(yù)設(shè)命令指令,我們需要通過(guò)一些微控制器將這些指令發(fā)送到LCD。以下是一些重要的命令說(shuō)明:
| 0F | LCD亮,光標(biāo)亮 |
| 01 | 清除顯示畫(huà)面 |
| 02 | 回家 |
| 04 | 減少光標(biāo)(向左移動(dòng)光標(biāo)) |
| 06 | 增量光標(biāo)(向右移動(dòng)光標(biāo)) |
| 05 | 右移顯示 |
| 07 | 左移顯示 |
| 0E | 顯示開(kāi),光標(biāo)閃爍 |
| 80 | 強(qiáng)制光標(biāo)到第一行的開(kāi)頭 |
| C0 | 強(qiáng)制光標(biāo)移至第二行的開(kāi)頭 |
| 38 | 2行和5×7矩陣 |
| 83 | 光標(biāo)線1位置3 |
| 3C | 激活第二行 |
| 08 | 顯示關(guān)閉,光標(biāo)關(guān)閉 |
| C1 | 跳至第二行,位置1 |
| 0C | 顯示開(kāi)啟,光標(biāo)關(guān)閉 |
| C1 | 跳至第二行,位置1 |
| C2 | 跳至第二行,位置2 |
在16x2 LCD中,如果有背光,則全部有16個(gè)引腳,如果沒(méi)有背光,則有14個(gè)引腳。一個(gè)人可以給背光燈插針供電或懸空。現(xiàn)在,在14個(gè)引腳中,有8個(gè)數(shù)據(jù)引腳(7-14或D0-D7),2個(gè)電源引腳(1&2或VSS&VDD或GND&+ 5v),第三個(gè)用于對(duì)比度控制的引腳(VEE控制字符的粗細(xì))如圖所示)和3個(gè)控制引腳(RS&RW&E)。
在電路中,可以觀察到我只接了兩個(gè)控制引腳,這給了靈活性。對(duì)比度位和READ / WRITE并不經(jīng)常使用,因此它們可以接地。這使LCD處于最高對(duì)比度和讀取模式。我們只需要控制ENABLE和RS引腳即可相應(yīng)地發(fā)送字符和數(shù)據(jù)。
LCD的連接如下所示:
-
PIN1或VSS接地
-
PIN2或VDD或VCC至+ 5v電源
-
PIN3或VEE接地(為初學(xué)者提供最大對(duì)比度)
-
PIN4或RS(寄存器選擇)到ARDUINO UNO的PIN0
-
PIN5或RW(讀/寫(xiě))接地(將LCD置于讀模式可簡(jiǎn)化用戶的通信)
-
PIN6或E(啟用)到ARDUINO UNO的PIN1
-
PIN11或D4至ARDUINO UNO的PIN8
-
PIN12或D5至ARDUINO UNO的PIN9
-
PIN13或D6至ARDUINO UNO的PIN10
-
PIN14或D7至ARDUINO UNO的PIN11
ARDUINO IDE允許用戶以4位模式使用LCD。這種通信類(lèi)型使用戶能夠減少ARDUINO上的引腳使用,這與其他ARDUINO無(wú)需單獨(dú)編程以在4 it模式下使用有關(guān),因?yàn)槟J(rèn)情況下ARDUINO設(shè)置為以4位模式進(jìn)行通信。在電路中,您可以看到我們使用了4位通信(D4-D7)。
因此,僅從上表的觀察,我們就將LCD的6個(gè)引腳連接到控制器,其中4個(gè)引腳是數(shù)據(jù)引腳,另外2個(gè)是控制引腳。
上圖顯示了連接到ARDUINO UNO的16x2 LCD的電路圖。
原理
要將LCD連接到ARDUINO UNO,我們需要了解一些事情。
#include <LiquidCrystal.h>lcd.begin(16,2); LiquidCrystal LCD(0,1,8,9,10,11); lcd.print(“ hello,world!”);如上表所示,我們只需要查看這四行即可在ARDUINO和LCD之間建立通信。
首先,我們需要啟用頭文件(’#include <LiquidCrystal.h>’),該頭文件中寫(xiě)入了指令,這使用戶能夠以4位模式將LCD連接到UNO,而不會(huì)產(chǎn)生任何絨毛。使用此頭文件,我們不必將數(shù)據(jù)一點(diǎn)一點(diǎn)地發(fā)送到LCD,這一切都將得到解決,我們也不必編寫(xiě)用于向LCD發(fā)送數(shù)據(jù)或命令的程序。
其次,我們需要告訴主板我們?cè)谶@里使用哪種類(lèi)型的LCD。由于我們有許多不同類(lèi)型的LCD(例如20x4、16x2、16x1等)。在這里,我們將16x2 LCD連接到UNO,因此得到“ lcd.begin(16,2);”。對(duì)于16x1,我們得到’lcd.begin(16,1);’。
在此說(shuō)明中,我們將告訴主板我們引腳的連接位置。連接的引腳需要按“ RS,En,D4,D5,D6,D7”的順序表示。這些引腳應(yīng)正確表示。由于我們已將RS連接到PIN0等,如電路圖所示,我們將板上的引腳號(hào)表示為L(zhǎng)iquidCrystal lcd(0,1,8,9,10,11);。需要在LCD中顯示的數(shù)據(jù)應(yīng)寫(xiě)為lcd.print(“ hello,world!”);。使用此命令,LCD會(huì)顯示“ hello,world!”。
如您所見(jiàn),我們不必?fù)?dān)心任何其他事情,我們只需要初始化即可,UNO將準(zhǔn)備顯示數(shù)據(jù)。我們不必在此處編寫(xiě)程序循環(huán)來(lái)通過(guò)BYTE發(fā)送數(shù)據(jù)BYTE。
LCD和UNO之間的通信方式在下面給出的C代碼中逐步說(shuō)明:
#include <LiquidCrystal.h>// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PINvoid setup() {// set up the LCD's number of columns and rows: lcd.begin(16, 2); }void loop() { // set the cursor to column 0, line 1 lcd.print(" CIRCUIT DIGEST");//print name lcd.setCursor(0, 1); // set the cursor to column 0, line 2 lcd.print("www.circuitdigest.com");//print name delay(750);//delay of 0.75sec lcd.scrollDisplayLeft();//shifting data on LCD lcd.setCursor(0, 0);// set the cursor to column 0, line1 }總結(jié)
以上是生活随笔為你收集整理的将16x2 LCD与Arduino连接方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CS224n课程Assignment3参
- 下一篇: 考研复试-英语问答