詳解LCD1602液晶顯示屏的使用

1.簡介

作爲各類單片機實物設計的常用顯示屏,LCD1602是一種專門用於顯示字母、數字、符號等點陣式LCD,其1602是指LCD顯示的內容爲16X2,即可以顯示兩行,每行16個字符(1個漢字佔用2個字符)。

2.硬件參數

(1) LCD1602主要技術參數
a.顯示容量:16×2個字符
b.芯片工作電壓:4.5—5.5V
c.工作電流:2.0mA(5.0V)
d.模塊最佳工作電壓:5.0V
e.字符尺寸:2.95×4.35(W×H)mm
(2) 引腳定義
在這裏插入圖片描述
LCD1602引腳主要有邏輯電源引腳VDD,VSS;背光帶電源引腳BLA,BLK;數據引腳D0-D7、RS、R/W、EN;偏壓信號引腳VL;其中:

  1. VL引腳:爲液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度;
  2. RS引腳:RS爲寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器
  3. R/W引腳:R/W爲讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同爲低電平時可以寫入指令或者顯示地址,當RS爲低電平R/W爲高電平時可以讀忙信號,當RS爲高電平R/W爲低電平時可以寫入數據。
  4. EN引腳:E端爲使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。

(3)電路圖
在這裏插入圖片描述
其中可調電阻P用於調整顯示器的對比度。電阻R作爲限流電阻,防止過流燒壞顯示屏背光燈。

3.控制程序

LCD1602顯示屏控制程序簡化下來,也相對簡單,只需要實現寫數據寫指令初始化三個控制函數即可實現對LCD1602的控制。(寫操作一般不用,這裏就省略不說)
(1)寫操作時序
在這裏插入圖片描述
要實現下面的寫數據和寫指令函數,都是以寫操作時序來進行編程,實現有效的控制;其中,可以通過寫時序和RS引腳的定義,寫數據和寫指令的區別在於RS引腳的電平;RS爲高電平時,寫數據;RS爲低電平時,寫指令。
(2)寫數據函數

//寫數據
void write_data(uchar date)
{
  LCDRS=1;
  P0=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}

(3)寫指令函數

//寫命令
void write_com(uchar com)
{
  LCDRS=0;
  P0=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}

(4)初始化函數
LCD1602初始化需要做以下設置:
a.設置寫操作:R/W設爲低電平;
b.屏幕設置模式:寫指令38H;
c.打開顯示,關閉光標:寫指令0CH;
d.設置顯示光標移動位置:寫指令06H;
e.設置字符顯示位置:寫指令(字符顯示的起始位置);

void Init1602()
{
  uchar i=0;
LCDRW = 0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打開顯示 無光標 無光標閃爍
  write_com(0x06);//當讀或寫一個字符是指針後一一位
  write_com(0x01);//清屏
  write_com(0x80);//設置位置
}

注:由於對LCD1602進行控制時不需要實現讀操作,所以R/W在初始化後恆爲低電平(或者此引腳直接對地短路)。

4.顯示字符

要在LCD1602上顯示特定的字符,實際上就是對LCD1602的DDRAM上寫入對應的數據,顯示屏便顯示你想要的字符。
(1)DDRAM地址映射圖
從RAM可以看出來,是讀的意思,地址與顯示位置如下,每行40個地址,1602只用到前16個,共兩行,對應關係如圖:
在這裏插入圖片描述
根據寫指令格式,由於地址爲7位,在寫入地址是,第8位恆爲1,如圖:
在這裏插入圖片描述
當我們想在指定位置寫入內容時,要先指定地址,如在第一行第一位寫入,地址位是00H,再加上DB7的1,即80H(0010000000),第二行第一位是40H,再加上DB7的1,即C0H(0011000000),依次類推。
比如要在第1行第3位寫入“HELLO WOLRD”,即先寫入地址,再寫入數據:

write_com(0x40+0);  //第1行第3位
write_com(‘H’);
write_com(‘O’);
.....
write_com(‘D’);

如果是寫在第2行第2位:

write_com(0x40+0x80+2);  //第2行第2位
//寫數據與上面一樣

(2)顯示函數
爲了程序的簡潔與方便,我們將顯示程序整合成一個顯示函數:

void Display_1602(uchar x,uchar y,uchar *str)
{
	 unsigned char addr;
  
  if (y == 0)
  {
    addr = 0x00 + x; //第一行的x位置顯示
  }
  else
  {
    addr = 0x40 + x; //第二行x的位置顯示
  }
  write_com(addr + 0x80);
  while (*str != '\0')
  {
    write_data(*str++);
  }

}

要實現上面顯示就比較簡單:
第1行第3位顯示“HELLO WOLRD”:

Display_1602(3,1,”HELLO WOLRD”);

第2行第2位顯示“HELLO WOLRD”:

Display_1602(2,2,”HELLO WOLRD”);

更多LCD1602設計資料及例程 請關注公衆號,首頁回覆“1602”獲取資料
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章