2012年11月10日 星期六

驅動 16x2 英文字型 LCD 螢幕

網頁最後修改時間:2016/07/28

英文字型 LCD 螢幕一般都是使用 HD44780 (或是相容) 的晶片做控制,因此參考一下文件選擇要使用的驅動方式 (4-bit / 8-bit), 4-bit 介面接線方式比較省接腳,故選擇 4-bit 驅動 16x2 LCD 螢幕

相關文件下載:

  1. HD44780
  2. 輕巧工作室 (06/07/2005)- LCM 液晶顯示模組英文文字型控制命令說明手冊
  3. SMC1602A

以 HD44780 為主的 LCM 英文文字型液晶顯示器模組,控制方式都大同小異,主要是在文字顯示或是移動的位置上,相關程式碼要做修改,利用善心人士寫好的函式庫看懂它做修改就好,不需要花太多時間重新撰寫。

相關的範例程式包含有:AVR GCC (Attiny2313)、8051、python

如果程式沒有接線圖,請參照提供的範例程式找出相對應的接腳與晶片做連接。


Raspberry Pi 驅動 LCD (16x2) 螢幕

材料:
  • LCD 是使用 SMC1602-H1W4 (5V 驅動、藍底白字、帶 LED 背光、16*2) (賣場連結)
    • 10k 可變電阻 (隨貨附送)
    • 排針 (隨貨附送  16-pin ,須自行焊接)

  • Raspberry Pi (Model B, Revision 2.0, 512MB RAM) (賣場連結)

  • Raspberry Pi 特製 GPIO (P1) 專用排線 (賣場連結)
  • 若有購買賣場的壓克力外殼,而且又有使用此條排線與 GPIO (P1)做連接的話,排線附帶的壓線扣 (ㄇ字型)不要裝 (除非你要拆掉上蓋,不然上蓋到排線頭的距離是剛剛好的);另外若排線選擇不拆掉外殼使用,要由上蓋出線,出線後上蓋就不能隨意翻動,另外這需要拆掉一些壓克力板後再組裝,要有點耐心。

    不同的插入方向會影響排線接腳與 GPIO (P1) 的接腳對應,正確的接法如下圖所示。



    照這樣插線,排線最下方的那一條所對應的就是 GPIO (P1) 排針上的第一支接腳,再配合 GPIO 卡 (可到 "Raspberry Pi (樹莓派) Model B 各版本之間的差異" 裡,移動到最下面有 Rev1.0 和 Rev2.0 下載的連結),連接上就比較方便。

  • 麵包板 (8.5x5.5cm, 400孔) (賣場連結)

  • 麵包板連接測試跳線 (賣場連結)
LCD 螢幕連接線路圖
( 2013/01/03 更正 Vss 與 Vdd 連接線路 [ 網友 TaKa 提出更正訊息)


LCD (***1602*) 接腳名稱

下面分幾個步驟說明,若是對於連接 LCD 一部分很熟或是有把握,可將線一次接好直接跳到最後的程式測試部分。

驅動 16x2 LCD 在這裡所使用的方式是 4-bit interface,扣除 LCD 只使用到寫出的功能,所以會接到 RaspPi 的接腳只有 (RS、E、D4、D5、D6和D7) 六個接腳。


LCD 有 3.3V5.0V 兩種電壓供應,但我們所使用的 LCD 是 5.0V 驅動,與 3.3V 輸出的 RaspPi 可以搭配嗎 ?

答案是可以的!只要 RaspPi 對 LCD 只做輸出的情形下,在'不接收 LCD 的訊號就可以 (所以我們才把 LCD 的 RW 接腳接地,讓 LCD 處在寫入模式下)。


備註:為了方便起見,RaspPi GPIO (P1) 都是使用偶數 (也就是靠近 LCD 的那一排) 與 LCD 做連接。

LCD 開機與背光(LED)測試

現在先測試 LCD 是否正常,以及背光 (LED) 是否可正常顯示,依照下方表格裡方括號的接腳編號和後面接的名稱,將其與對應 RaspPi 的 P1 接腳接在一起。

LCD 接腳編號 (名稱)RaspPi P1 接腳編號 (名稱)
[01] Vss[02] +5V   [06] GND*
[02] Vdd[06] GND [02] +5V*
[15] LED+[02] +5V
[16] LED-[06] GND

(* 2016/07/28 接腳更正, 感謝網友陳宗照的提醒)
LCD 電源與背光 (LCD) 接線圖


然後把電源接上 RaspPi,就要看到 LCD 如下圖這樣顯示,除了有電源之外還要有背光 (LED) 出現。

開啟電源後 LCD 顯示的情形


調整 LCD 對比度 

將 10K 的可變電阻安裝在麵包板上,左右兩邊一個接 +5V,另一個接地,中間那一隻接腳接到 LCD 的 [03] V0 接腳

裝上 10K 可變電阻


插上電源開始調整對比度,調到5*10方格子變成白色,或是在文字出現後再調整。

對比度調整


LCD 控制線路連接

現在先測試 LCD 是否正常,以及背光 (LED) 是否可正常顯示,依照下方表格裡方括號的接腳編號和後面接的名稱,將其與對應 RaspPi 的 P1 接腳接在一起,由於使用 GPIO (P1) 偶數接腳,因此不管是 Rev 1.0 或 Rev 2.0 都可以適用。

GPIO (P1) 接腳相對應之 IO 與 功能

LCD 接腳編號 (名稱)RaspPi P1 接腳編號 (名稱)
[04] RS[26] CE1, #07
[05] RW[06] GND
[06] E[24] CE0, #08
[11] D4[22] ........, #25
[12] D5[18] ........, #24
[13] D6[16] ........, #23
[14] D7[12] ........, #18

對照上表,連接 LCD 與 RaspPi 之間的連線,如下圖所示。未說明方便,圖面上省略排線,

LCD 控制線路與 RaspPi 連接
加上排線 GPIO (P1)

線路連接完成,準備測試


安裝需要的套件

如果已經超過一段時間沒做套件更新的話,請先執行

$sudo apt-get update && sudo apt-get upgrade -y
  • 安裝 python 開發套件 (2.x)

  • $sudo apt-get install python-dev

  • Upgrade distribute (給 RPI-GPIO 用)

  • $sudo apt-get install python-setuptools

    $sudo easy_install -U distribute

    $sudo apt-get install python-pip



  • 安裝 RPI.GPIO 最新版 (RPi.GPIO 現在版本 ver. 0.4.1a, 2012/11/08)

  • $sudo pip install rpi.gpio

  • 建立目錄並下載 CharLCD.py 檔案

  • $mkdir my-python-projects

    $mkdir my-python-prohects/CharLCD

    $cd my-python-projects/CharLCD

    $wget -O CharLCD.py http://goo.gl/2ynro



CharLCD.py 程式需修改及注意的地方

因為有使用中文註解,要加入

line2:#!-*- coding: utf-8 -*-



LCD 的控制是使用 4-bit interface ,而且只使用寫入的功能,因此 R/W 接腳直接接地。控制接腳只要使要 6 根,也就是用到 BCM2835 IO #7、#8、#25、 #24、#23和#18 這6根,對照到排線的接腳號碼分別為 26、24、22、16、18和12。

因此可根據 GPIO P1 所使用的接腳代號 (參考 GPIO 卡上的說明) 去接,再修改下面程式。

line 63:pins_db=[DB4, DB5, DB6, DB7]



要顯示網路的 IP 位址,可由 line 261 與  line 265 的命令列指令做到。如果是使用有線網路就用 line 261,把 line 265 前面加上 #;如果是使用無線網路,就用 line 265,把 line 261 前面加上 #

line 267 ~ 270: 式返回命令列指令的結果,也就是 IP 位址。

line 280 ~ 284:文字加上時間的顯示

line 286 ~ 290:時間加上IP位置的顯示

lcd.screen() 指令之後必須做一小段延遲 (sleep(0.01) = 10ms),不然接下來的顯示會成亂碼。詳細的指令與初始話方法請參照 HD447780 的說明




程式設置好之後,將 LCD 與 RaspPi 之間的接線接後,就可以執行了。輸入

$sudo python CharLCD.py


下面是使用 #1.文字顯示 + 時間,出現的樣子為

1. 文字顯示 + 時間

使用 #2.時間 + IP 位置,出現的樣子為

2. 時間 + IP 位置
請有購買 LCD 的各位,除了相關參考資料以傳送給各位之外,範例程式 (8051, AVR,) 也一併附在內 (包括 raspberry pi );Arduino 直接在 File/Examples/LiquidCrystal 選擇後修改接線的 pin 角位置就可 upload 到 Arduino 執行。



雖程式不同,但內容大同小異,請自行參照所附資料與檔案測試。

2 則留言:

  1. 您好版主!我覺得您的這篇文寫的很棒!不過對接的接腳圖有點小錯誤,LCD的VSS (GND) 及 VDD (+5V) 似乎相反了喔。

    回覆刪除