☛ 功能說明

使用 Arduino 開發板控制 LCD 1602 顯示字元 ” 2022年7月20日 “。 文字型 LCD 模組提供消費者可以自建 8 個 5×8 字形,每個字形需要 8 個位元組,其中每個位元組使用位元 0~4,位元 5~7 則不使用 ( 設定為 0 )。 LCD 使用位元對映方式來顯示字形,當位元值為 1 時則亮,位元值為 0 則不亮。下圖為年、月、日的自建字形定義:

☛ 使用材料

Arduino UNO R3 開發板 × 1、LCD 1602A 顯示器模組 × 1、可變電阻 20KΩ × 1、電阻 220Ω × 1。

☛ 電路圖及麵包板接線圖

☛ 程式碼

#include<LiquidCrystal.h>               // 使用 LiquidCrystal.h 函式庫

LiquidCrystal lcd(12,11,5,4,3,2);       // 宣告 lcd 變數並定義使用接腳
byte yearChar[8]= { B10000,B11111,      // “年” 字形定義
                    B00010,B01111,
                    B01010,B11111,
                    B00010,B00000 };
byte moonChar[8]= { B01111,B01001,      // “月” 字形定義
                    B01111,B01001,
                    B01111,B01001,
                    B11101,B00000 };
byte dayChar[8]=  { B01111,B01001,      // “日” 字形定義
                    B01001,B01111,
                    B01001,B01001,
                    B01111,B00000 };
int years = 2022;                       // 2022 年
int moons = 7;                          // 7 月
int days = 15;                          // 15 日

void setup()
{
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.createChar(0,yearChar);        // 自建字形 “年”
     lcd.createChar(1,moonChar);        // 自建字形 “月”
     lcd.createChar(2,dayChar);         // 自建字形 “日”
}

void loop()
{
     lcd.setCursor(0,0);                // 設定游標在第 0 列第 0 行
     lcd.print(years);                  // 顯示字元 "2022"
     lcd.write(byte(0));                // 顯示自建字形 "年"
     lcd.print(moons);                  // 顯示字元 "7"
     lcd.write(byte(1));                // 顯示自建字形 "月"
     lcd.print(days);                   // 顯示字元 "15"
     lcd.write(byte(2));                // 顯示自建字形 "日"
}

 

☛ 練習

⑴ 設計 Arduino 程式,在第 0 行第 0 列顯示 “ 2022年08月05日 ”,在第 0 行第 1 列顯示 “ I♡LCD”。

#include<LiquidCrystal.h>               // 使用 LiquidCrystal.h 函式庫

LiquidCrystal lcd(12,11,5,4,3,2);       // 宣告 lcd 變數並定義使用接腳
byte yearChar[8]= { B10000,B11111,      // "年" 字形定義
                    B00010,B01111,
                    B01010,B11111,
                    B00010,B00000 };
byte moonChar[8]= { B01111,B01001,      // "月" 字形定義
                    B01111,B01001,
                    B01111,B01001,
                    B11101,B00000 };
byte dayChar[8]=  { B01111,B01001,      // "日" 字形定義
                    B01001,B01111,
                    B01001,B01001,
                    B01111,B00000 };
byte heartChar[8]={ B00000,B01010,      // "♡" 字形定義
                    B11111,B11111,
                    B01110,B00100,
                    B00000,B00000 };
int years = 2022;                       // 2022 年
int moons = 8;                          // 8 月
int days =  5;                          // 5 日

void setup()
{
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.createChar(0,yearChar);        // 自建字形 "年"
     lcd.createChar(1,moonChar);        // 自建字形 "月"
     lcd.createChar(2,dayChar);         // 自建字形 "日"
     lcd.createChar(3,heartChar);       // 自建字形 "♡"
}

void loop()
{
     lcd.setCursor(0,0);                // 設定游標在第 0 列第 0 行
     lcd.print(years);                  // 顯示字元 "2022"
     lcd.write(byte(0));                // 顯示自建字形 "年"
     lcd.print("0");                    // 顯示字元 "0"
     lcd.print(moons);                  // 顯示字元 "8"
     lcd.write(byte(1));                // 顯示自建字形 "月"
     lcd.print("0");                    // 顯示字元 "0"
     lcd.print(days);                   // 显示字元 "5"
     lcd.write(byte(2));                // 顯示自建字形 "日"
     lcd.setCursor(0,1);                // 設定游標在第 1 列第 0 行
     lcd.print("I");                    // 顯示字元 "I"
     lcd.write(byte(3));                // 顯示自建字形 "♡"
     lcd.print("LCD");                  // 顯示字元 "LCD"
}

 

⑵ 設計 Arduino 程式,在第 0 行第 0 列顯示 “ 2022年08月05日 ”,在第 0 行第 1 列閃爍顯示 “ ☻Happy☻”。

#include<LiquidCrystal.h>               // 使用 LiquidCrystal.h 函式庫

LiquidCrystal lcd(12,11,5,4,3,2);       // 宣告 lcd 變數並定義使用接腳
byte yearChar[8]= { B10000,B11111,      // "年" 字形定義
                    B00010,B01111,
                    B01010,B11111,
                    B00010,B00000 };
byte moonChar[8]= { B01111,B01001,      // "月" 字形定義
                    B01111,B01001,
                    B01111,B01001,
                    B11101,B00000 };
byte dayChar[8]=  { B01111,B01001,      // "日" 字形定義
                    B01001,B01111,
                    B01001,B01001,
                    B01111,B00000 };
byte smileChar[8]={ B00000,B10001,      // "☻" 字形定義
                    B00000,B00000,
                    B10001,B01110,
                    B00000,B00000 };
int years = 2022;                       // 2022 年
int moons = 8;                          // 8 月
int days =  5;                          // 5 日
int i;

void setup()
{
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.createChar(0,yearChar);        // 自建字形 "年"
     lcd.createChar(1,moonChar);        // 自建字形 "月"
     lcd.createChar(2,dayChar);         // 自建字形 "日"
     lcd.createChar(3,smileChar);       // 自建字形 "☻"
}

void loop()
{
     lcd.setCursor(0,0);                // 設定游標在第 0 列第 0 行
     lcd.print(years);                  // 顯示字元 "2022"
     lcd.write(byte(0));                // 顯示自建字形 "年"
     lcd.print("0");                    // 顯示字元 "0"
     lcd.print(moons);                  // 顯示字元 "8"
     lcd.write(byte(1));                // 顯示自建字形 "月"
     lcd.print("0");                    // 顯示字元 "0"
     lcd.print(days);                   // 顯示字元 "5"
     lcd.write(byte(2));                // 顯示自建字形 "日"
     lcd.setCursor(0,1);                // 設定游標在第 1 列第 0 行
     lcd.write(byte(3));                // 顯示自建字形 "☻"
     lcd.print("Happy");                // 顯示字元 "Happy"
     lcd.write(byte(3));                // 顯示自建字形 "☻"
     lcd.setCursor(0,1);                // 設定游標在第 1 列第 0 行
     delay(500);                        // 延遲 500ms
     for(i=0;i<16;i++)                  // 清除第 1 列所顯示的字元
         lcd.print(" ");
     delay(500);                        // 延遲 500ms
}