☛ 功能說明

使用 Arduino 開發板控制 LCD 1602 在第 0 列顯示學號 “ 0123456789 ”,在第 1 列顯示電腦鍵盤輸入字元,按 “ – ” 鍵可以清除輸入字元。

☛ 使用材料

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 變數並定義使用接腳
int i;                                  // 指標
int key[16];                            // 輸入緩衝區
int num=0;                              // 輸入字元

void setup()
{
     Serial.begin(9600);                // 初始化串列埠,設定鮑率為 9600bps
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.write("0123456789");           // 第 0 行第 0 列顯示學號 0123456789
     lcd.setCursor(0,1);                // 設定座標在第 1 列第 0 行
}

void loop()
{
     if(Serial.available())             // 輸入任意鍵
     {
          key[num]=Serial.read();       // 讀取按鍵值
          if(key[num]=='-')             // 輸入減號 '-' 鍵 ( 清除鍵 )
          {
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                for(i=0;i<16;i++)
                {
                    lcd.write(' ');     // 清除 LCD 字元
                    key[i]=' ';         // 清除輸入緩衝區
                }
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                num=0;                  // 清除字元數
          }
          else                          // 不是輸入減號 '-' ( 清除鍵 )
          {
                lcd.write(key[num]);    // LCD 顯示輸入字元
                num++;                  // 字元數加 1
                if(num>15)              // 已經輸入16 個字元
                {
                    lcd.setCursor(0,1); // 設定座標在第 1 列第 0 行
                    num=0;              // 清除字元數
                }
          }
     }
}

 

☛ 練習

⑴ 設計 Arduino 程式,控制 LCD 在第 0 列顯示學號 “0123456789”,在第 1 列閃爍顯示電腦鍵盤輸入字元,按減號 “-” 鍵可以清除輸入字元。

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

LiquidCrystal lcd(12,11,5,4,3,2);       // 宣告 lcd 變數並定義使用接腳
int i;                                  // 指標
int key[16];                            // 輸入緩衝區
int num=0;                              // 輸入字元

void setup()
{
     Serial.begin(9600);                // 初始化串列埠,設定鮑率為 9600bps
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.write("0123456789");           // 第 0 行第 0 列顯示學號 0123456789
     lcd.setCursor(0,1);                // 設定座標在第 1 列第 0 行
}

void loop()
{
     if(Serial.available())             // 輸入任意鍵
     {
          key[num]=Serial.read();       // 讀取按鍵值
          if(key[num]=='-')             // 輸入減號 '-' 鍵 ( 清除鍵 )
          {
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                for(i=0;i<16;i++)
                {
                    lcd.write(' ');     // 清除 LCD 字元
                    key[i]=' ';         // 清除輸入緩衝區
                }
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                num=0;                  // 清除字元數
          }
          else                          // 不是輸入減號 '-' ( 清除鍵 )
          {
                lcd.write(key[num]);    // LCD 顯示輸入字元
                num++;                  // 字元數加 1
                if(num>15)              // 已經輸入 16 個字元
                {
                    lcd.setCursor(0,1); // 設定座標在第 1 列第 0 行
                    num=0;              // 清除字元數
                }
          }
     }
     lcd.setCursor(0,1);                // 設定座標在第 1 列第 0 行
     for(i=0;i<16;i++)                  // 顯示輸入快取區字元
         lcd.write(key[i]);
     delay(200);                        // 延遲 200ms
     lcd.setCursor(0,1);
     for(i=0;i<16;i++)                  // 清除第 1 列顯示的所有字元
         lcd.write(' ');
     delay(200);
}

 

⑵ 設計 Arduino 程式,控制 LCD 在第 0 列第 3 行顯示學號 “0123456789”,在第 1 列閃爍顯示電腦鍵盤輸入字元,按減號 “-” 鍵可以清除輸入字元。

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

LiquidCrystal lcd(12,11,5,4,3,2);       // 宣告 lcd 變數並定義使用接腳
int i;                                  // 指標
int key[16];                            // 輸入緩衝區
int num=0;                              // 輸入字元

void setup()
{
     Serial.begin(9600);                // 初始化串列埠,設定鮑率為 9600bps
     lcd.begin(16,2);                   // 使用 16×2 LCD
     lcd.setCursor(3,0);                // 設定座標在第 0 列第 3 行
     lcd.write("0123456789");           // 第 0 行第 0 列顯示學號 0123456789
     lcd.setCursor(0,1);                // 設定座標在第 1 列第 0 行
}

void loop()
{
     if(Serial.available())             // 輸入任意鍵
     {
          key[num]=Serial.read();       // 讀取按鍵值
          if(key[num]=='-')             // 輸入減號 '-' 鍵 ( 清除鍵 )
          {
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                for(i=0;i<16;i++)
                {
                    lcd.write(' ');     // 清除 LCD 字元
                    key[i]=' ';         // 清除輸入緩衝區
                }
                lcd.setCursor(0,1);     // 設定座標在第 1 列第 0 行
                num=0;                  // 清除字元數
          }
          else                          // 不是輸入減號 '-' ( 清除鍵 )
          {
                lcd.write(key[num]);    // LCD 顯示輸入字元
                num++;                  // 字元數加 1
                if(num>15)              // 已經輸入 16 個字元
                {
                    lcd.setCursor(0,1); // 設定座標在第 1 列第 0 行
                    num=0;              // 清除字元數
                }
          }
     }
     lcd.setCursor(0,1);                // 設定座標在第 1 列第 0 行
     for(i=0;i<16;i++)                  // 顯示輸入快取區字元
         lcd.write(key[i]);
     delay(200);                        // 延遲 200ms
     lcd.setCursor(0,1);
     for(i=0;i<16;i++)                  // 清除第 1 列顯示的所有字元
         lcd.write(' ');
     delay(200);
}