搜尋程式碼

第20/31課:使用LCD1602配合Arduino顯示文字 | Robojax

第20/31課:使用LCD1602配合Arduino顯示文字 | Robojax

簡介

LCD1602係Arduino項目中最受歡迎嘅字母數字顯示屏之一,當佢配搭I2C背板嘅時候,用起上嚟就非常簡單。喺呢個教學入面,你會學到點樣顯示文字、數字同自訂字符,仲有點樣令文字喺屏幕上滾動。我哋亦都會示範點樣將LCD同其他感測器結合,整出實用嘅監測工具。呢個指南係更廣泛嘅Arduino課程嘅一部分,目的係幫你整啲對屋企、學校或者工作坊有用嘅裝置。

screenshot-2

以下係一啲你可以用呢啲知識整嘅實用構思:

  • 用喺溫室或者爬蟲類飼養箱嘅溫度濕度監測器。
  • 一個簡單嘅電壓錶,用嚟檢查你項目入面嘅電池電量。
  • 一個用嚟做泊車輔助或者智能垃圾桶(顯示有幾滿)嘅距離感測器。

硬件概覽

LCD1602係一個16字符乘2行嘅顯示屏。後面嗰個模組係I2C(或者I²C)轉接器,佢將標準並行連接所需嘅線數減少到得四條:Ground、VCC、SDA同SCL。咁樣令接線簡單好多,亦都釋放咗Arduino上面好多數碼引腳。

呢個顯示屏有背光功能,可以透過軟件開關。佢喺I2C模組上面亦都有一個細細嘅可變電阻嚟調節對比度。如果你開咗電源但係乜都睇唔到,只要擰吓呢粒螺絲直到文字出現就得(影片02:47)。

呢款顯示屏有唔同版本,例如LCD2004有20字符同4行。I2C地址亦都可以透過焊接模組上面嘅A0、A1同A2跳線嚟更改(影片03:51)。預設地址通常係0x27,但係都可能唔同,所以最好都係行一個I2C掃描器嚟搵出你嗰個模組嘅正確地址。

硬件組件

要跟住呢條影片入面嘅主要示範,你需要以下組件:

  • Arduino Uno(或者任何兼容板)
  • LCD1602連I2C模組
  • 麵包板同跳線

至於後面嘅章節,你仲會需要一個DHT11感測器、一個可變電阻或者一個超聲波感測器,視乎你想整邊個項目。

接線指南

lcd1602_I2C_wiring_sunfounder

連接LCD好簡單。接線圖清楚顯示咗連接方法。

將I2C模組上面嘅引腳連接到你嘅Arduino,方法如下:

  • GND 連到 Arduino GND
  • VCC 連到 Arduino 5V
  • SDA 連到 Arduino A4
  • SCL 連到 Arduino A5

如果你嘅Arduino板有專用嘅SDA同SCL引腳,你都可以連去嗰啲(影片05:47)。

安裝程式庫

呢個模組需要「Arduino Liquid Crystal I2C」程式庫。你可以喺影片描述入面提供嘅連結或者Robojax網站度下載。下載之後,喺你嘅Arduino IDE入面,去Sketch > Include Library > Add .ZIP Library,然後揀返你下載嘅檔案嚟安裝(影片06:41)。

程式碼解釋

由於冇提供程式碼片段,我哋會解釋影片入面所用程式碼嘅一般結構。

程式碼首先包含所需嘅程式庫:用於I2C通訊嘅Wire.h,同埋用於顯示屏嘅LiquidCrystal_I2C.h程式庫。最關鍵嘅部分係為LCD建立一個物件。你需要設定正確嘅I2C地址同你顯示屏嘅尺寸:

// 將LCD地址設定為0x27,用於16字符2行顯示
LiquidCrystal_I2C lcd(0x27, 16, 2);

如果你嘅顯示屏乜都唔顯示,你可能需要將0x27改做0x3F或者你嘅I2C掃描器搵到嘅另一個地址。嗰個162代表你顯示屏嘅行數同列數。

setup()函數入面,你初始化LCD並開啟背光:

void setup() {
  lcd.init();
  lcd.backlight();
}

要打印文字,你用lcd.setCursor(column, row)函數嚟定位光標,然後用lcd.print()嚟顯示你嘅數據。例如,要喺第二行打印,你會用lcd.setCursor(0, 1)。影片亦都解釋咗點樣用lcd.write(223)嚟打印度數符號等特殊字符(影片31:42)。

示範

影片示範咗LCD嘅幾個主要功能。首先,佢展示基本嘅「Hello World」文字打印,以及點樣用lcd.scrollDisplayLeft()函數令文字喺屏幕上移動。之後,佢將LCD同DHT11感測器結合嚟顯示溫度同濕度,用可變電阻嚟顯示電壓,仲有用超聲波感測器嚟顯示距離。

至於溫度顯示,程式碼讀取感測器並打印數值。要顯示冇小數點嘅整數,你可以將浮點數值轉換做整數,好似影片入面示範咁(影片32:21)。

對於電壓錶,程式會讀取電位器嘅模擬值,將佢縮放到0-5V嘅電壓範圍,然後顯示喺屏幕上(影片34:31位置)。

最後嘅示範將LCD同超聲波感測器結合,用嚟顯示以厘米計嘅量度距離(影片37:55位置)。

呢條影片嘅相關項目

呢條影片仲包含其他項目教學。你可以喺呢度搵到佢哋:

章節

  • [00:00] LCD1602簡介同課程概覽
  • [01:30] LCD1602同I2C模組嘅硬件概覽
  • [02:47] 調整顯示對比度同背光
  • [03:14] 引腳連接同I2C地址選擇
  • [05:28] LCD嘅接線圖
  • [06:16] 安裝所需嘅函式庫
  • [07:24] 打印文字嘅基本程式碼
  • [11:10] 閃爍游標示例
  • [13:46] 自訂字符同打印特殊符號
  • [18:51] 串列顯示示例
  • [23:16] 喺LCD上滾動文字
  • [36:51] 將LCD同超聲波感測器結合

圖片

LCD1602_wiring_DHT11_bb
LCD1602_wiring_DHT11_bb
LCD1602_wiring_DHT11_nopcb_bb
LCD1602_wiring_DHT11_nopcb_bb
LCD1602 displaying voltage and title
LCD1602 displaying voltage and title
screenshot-2
screenshot-2
lcd1602_I2C_wiring_sunfounder
lcd1602_I2C_wiring_sunfounder
910-Lesson 20/31: Displaying simple text on LCD1602
語言: C++
/*
Lesson 20/31: Displaying text on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg

*/
/*
This is code for LCD1602 Display with I2C module
 * watch the video for this code https://youtu.be/q9YC_GVHy5A
 
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purpose only.
 * This library is based on work done by DFROBOT (www.dfrobot.com).
 */
/*
 *  This code has been modefied from the Arduino library
 *  Updated by Ahmad Nejrabi on Jan 20, 2018 at 11:09
 *  in Ajax, Ontario, Canada
 *  for Robojax.com
 *  
 *  This is code for LCD1602 Display with I2C module
 *  which can display text on the screen.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);



void setup()
{
  // Robojax code for LCD with I2C
  // initialize the LCD, 
  lcd.begin();
 
  // Turn on the blacklight and print a message.
  //lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{

  lcd.clear();
  lcd.setCursor (0,0);  
  lcd.print("SunFounder ");
  lcd.setCursor (0,1);
  lcd.write(244);


  delay(500);
 //end of loopcode Robojax code for LCD with I2C
}

文件📁

Arduino 函式庫 (zip)