如何將 16x2 液晶顯示屏與 Arduino 進行連接使用
簡介
倘若你的 Arduino 項目不僅能發(fā)出閃爍的燈光或驅(qū)動電機運轉(zhuǎn),還能向你清晰地說明它正在做什么的話,那會是怎樣的情景呢?
在本節(jié)課中,您將學(xué)習(xí)如何使用 16x2 液晶顯示屏來顯示信息,了解幕后所發(fā)生的情況,并使您的項目顯得更加精致和專業(yè)。
這是“Arduino 初學(xué)者教程”系列的第 14 課,也是這類課程中那種能讓學(xué)習(xí)過程感覺更加“真實”的一課。
讓我們開始吧。
物資;供應(yīng)品
對于這個項目,您將需要:
?Arduino UNO
?I/O 擴展護罩
?液晶顯示屏
?四針電線
了解液晶顯示屏模塊
這是隨“MindPlus Arduino 編程套裝”一同配備的液晶顯示屏模塊,正是我們在本系列的 24 期內(nèi)容中一直使用的那套套裝。
乍一看,它似乎太過簡單了:正面有一個屏幕,背面有一些電子元件,還有一個僅四個針腳的連接器,這已經(jīng)暗示著接線過程會相當(dāng)簡便。
如果你仔細觀察顯示屏的底部前端,就會看到上面印著“LCD 1602”字樣。這個名稱確切地告訴我們這是何種類型的屏幕。
“16”指的是每行能夠顯示的字符數(shù)量,而“2”指的是行數(shù)。換句話說,這種顯示屏最多能在第一行顯示 16 個字符,在第二行也能顯示 16 個字符。
盡管我們稱之為“字符顯示”,但每個字符并非是一個單獨的完整塊狀物。如果你給屏幕通電并仔細觀察,就會發(fā)現(xiàn)每個字母或數(shù)字都是由一個由小點組成的網(wǎng)格構(gòu)成的。
具體來說,每個字符都是由一個 5×8 像素的矩陣構(gòu)成的。通過控制不同的像素開啟或關(guān)閉,液晶顯示屏就能繪制出字母、數(shù)字和符號。
一旦你明白了這個細節(jié),這款顯示器的各種局限性和可能性也就變得清晰明了了。
您還會發(fā)現(xiàn)其他格式的液晶顯示屏。有些尺寸較小,比如 16x1 顯示屏,而有些則較大,比如 16x4。它們還具有不同的顏色,例如綠色或藍色。盡管存在這些差異,但其基本理念是相同的。
I2C 通信及其重要性
如果我們將模塊翻轉(zhuǎn)過來,并將注意力集中在連接器上,就會立刻注意到兩個明顯的標(biāo)簽:SDA 和 SCL。這些標(biāo)簽告訴我們,這款液晶顯示屏采用的是 I2C 通信方式。
在 I2C 接口配置中,SDA 引腳負責(zé)傳輸數(shù)據(jù),而且有趣的是,它能夠雙向傳輸數(shù)據(jù)。
SCL 引腳傳輸時鐘信號,該信號由主設(shè)備生成。在我們的例子中,Arduino 起到主設(shè)備的作用,控制著通信過程。
I2C 的最大優(yōu)勢之一在于它能讓多個設(shè)備共用同一對導(dǎo)線。只要每個設(shè)備都有其獨特的地址,您就可以將多個傳感器、顯示器和模塊連接到相同的 SDA 和 SCL 線路上。
這的確實非常強大,尤其對于初學(xué)者項目而言更是如此,因為它能確保布線保持整潔、簡單,并且便于排查故障。
如果你之前使用過 Arduino,那么你可能見過另一種不使用 I2C 協(xié)議的液晶顯示屏。這類顯示屏通常有較多的引腳,連接它們需要更多的線路連接和配置工作。因此,很多人最終會購買一個 I2C 適配器,并將其焊接到標(biāo)準(zhǔn)液晶顯示屏的背面。
該適配器通常會包含一個名為 PCF8574 的芯片。這個芯片充當(dāng) I2C 輸入/輸出擴展器的功能。簡單來說,它就是為顯示屏添加 I2C 通信功能的部件。值得一提的是,這個芯片不僅適用于液晶顯示屏,還可以用于控制 LED、傳感器以及其他模塊。
現(xiàn)在理論部分就講到這里吧。咱們還是動手去做點實際的東西吧。
在我們開始項目之前,我想感謝 DFRobot 公司為我們提供了這次課程的贊助。
DFRobot 是全球領(lǐng)先的為創(chuàng)客、教育工作者和工程師提供硬件產(chǎn)品的企業(yè)之一。
在他們的在線商店里,您可以找到開展下一個項目所需的各種物品,從電機、傳感器、微控制器到單板計算機、人工智能設(shè)備等等應(yīng)有盡有。
如果你打算打造一些酷炫的東西,我強烈建議你去看看他們的產(chǎn)品。他們的產(chǎn)品質(zhì)量上乘,價格也非常合理。
在本系列教程中,我使用的是“MindPlus Arduino 編程套件”,因為它包含了你開展 Arduino 項目所需的一切工具。
再次感謝 DFRobot 對此系列的支持,感謝你們讓 STEM 教育能夠惠及更多人。
啟動項目
那我們繼續(xù)吧,開始組裝我們的第一個液晶顯示器項目。
首先將 I/O 擴展板安裝到你的 Arduino UNO 上。這個擴展板使得連接模塊變得更加容易,并且還能使所有部件保持整齊有序。
接下來,使用四針電纜將液晶模塊連接到屏蔽板上。SCL 引腳連接到 A5,SDA 引腳連接到 A4。該顯示屏的工作電壓范圍為 3.3 至 5 伏,因此可以安全地與大多數(shù) Arduino 板配合使用。
一旦硬件準(zhǔn)備就緒,就前往本系列的 GitHub 倉庫。在描述中會找到相關(guān)鏈接。打開第 14 課的文件夾,復(fù)制名為“test-lcd”的文件,并將其粘貼到你的 Arduino IDE 中。
在上傳代碼之前,請確保已安裝了 DFRobot_RGBLCD1602 庫。完成此操作后,點擊“上傳”。
如果所有連接都正確無誤,您應(yīng)該會在屏幕上看到“第 14 課 - 液晶模塊”這一信息。這就是我們?nèi)〉玫牡谝粋€成功。
理解代碼
現(xiàn)在讓我們放慢速度,仔細看看這段代碼實際在做什么。
首先,我們要引入正確的庫,并創(chuàng)建一個能夠控制液晶顯示屏的對象。你可以將這個對象視為我們與屏幕進行直接通信的途徑。
在 setup() 函數(shù)內(nèi)部,我們初始化顯示屏、清除之前的所有數(shù)據(jù),并打印出我們的信息。需要記住的一個重要細節(jié)是,每行只能顯示 16 個字符。如果您的信息長度超過這個限制,您就需要將其分兩行顯示,下面就是這樣的實現(xiàn)方式。
如果這部分內(nèi)容您仍覺得難以理解,別擔(dān)心。我有一整套關(guān)于 Arduino 編程基礎(chǔ)的課程,如果您想更深入地理解的話,那讀一讀也是很有幫助的。
但接下來便出現(xiàn)了有趣的問題:倘若你的信息內(nèi)容實在太過冗長,以至于無法僅用兩行文字來表達清楚,那該怎么辦呢?
創(chuàng)建滾動文字效果
我們不必試圖一次性展示所有內(nèi)容,而是可以采用一種滑動或滾動的效果,使得在任何特定時刻只有一部分信息是可見的。這種技術(shù)在許多實際設(shè)備中都有應(yīng)用,從打印機到工業(yè)控制面板等等。
要實際體驗一下效果,請返回 GitHub 倉庫,復(fù)制名為“滑動文本”的示例代碼,將其上傳至你的 Arduino 設(shè)備,然后觀察液晶顯示屏。您會看到一條長長的文本信息在屏幕上流暢地滾動。
那么,這是如何運作的呢?
這段示例的開頭部分以及 setup() 函數(shù)與之前的示例幾乎完全相同,因此真正的重點在于 loop() 函數(shù)。這就是邏輯所在的地方。
核心思想是將信息不看作一條直線,而視為一個圓圈。想象一下文字寫在一個環(huán)上。當(dāng)你讀到結(jié)尾時,會立即回到開頭重新開始。這種方法使我們能夠?qū)崿F(xiàn)無限滾動的效果,而無需擔(dān)心信息的起始位置或結(jié)束位置。
由于液晶顯示屏每次只能顯示 16 個字符,所以該代碼會構(gòu)建一個名為“visibleText”的臨時字符串。這個字符串準(zhǔn)確地表示了在特定時刻屏幕上應(yīng)顯示的內(nèi)容。
一個 for 循環(huán)會運行 16 次,每次對應(yīng)顯示窗口中的一列內(nèi)容。在每次迭代中,它都會從消息中選取下一個字符。
模運算用于在字符串末尾到達時進行循環(huán)處理,這就是為什么模運算符在這里如此重要。它確保代碼不會超出邊界,并使文本能夠流暢地滾動。
構(gòu)建完 16 位字符串后,該代碼會將其輸出到液晶顯示屏上,然后將位置向前移動一個字符,并等待一段短暫的延遲。調(diào)整這個延遲時間會改變滾動的速度。
其結(jié)果是呈現(xiàn)出一條清晰、流暢且連貫的滾動信息。
本文編譯自hackster.io





