網頁最後修改時間:2016/07/28
英文字型 LCD 螢幕一般都是使用 HD44780 (或是相容) 的晶片做控制,因此參考一下文件選擇要使用的驅動方式 (4-bit / 8-bit), 4-bit 介面接線方式比較省接腳,故選擇 4-bit 驅動 16x2 LCD 螢幕
相關文件下載:
- HD44780
- 輕巧工作室 (06/07/2005)- LCM 液晶顯示模組英文文字型控制命令說明手冊
- 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)做連接的話,排線附帶的壓線扣 (ㄇ字型)不要裝 (除非你要拆掉上蓋,不然上蓋到排線頭的距離是剛剛好的);另外若排線選擇不拆掉外殼使用,要由上蓋出線,出線後上蓋就不能隨意翻動,另外這需要拆掉一些壓克力板後再組裝,要有點耐心。
- 麵包板 (8.5x5.5cm, 400孔) (賣場連結)
- 麵包板連接測試跳線 (賣場連結)
不同的插入方向會影響排線接腳與 GPIO (P1) 的接腳對應,正確的接法如下圖所示。
照這樣插線,排線最下方的那一條所對應的就是 GPIO (P1) 排針上的第一支接腳,再配合 GPIO 卡 (可到 "Raspberry Pi (樹莓派) Model B 各版本之間的差異" 裡,移動到最下面有 Rev1.0 和 Rev2.0 下載的連結),連接上就比較方便。
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.3V 與 5.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] Vdd | |
[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 連接 |
線路連接完成,準備測試 |
安裝需要的套件
如果已經超過一段時間沒做套件更新的話,請先執行
$sudo apt-get update && sudo apt-get upgrade -y
- 安裝 python 開發套件 (2.x)
- Upgrade distribute (給 RPI-GPIO 用)
- 安裝 RPI.GPIO 最新版 (RPi.GPIO 現在版本 ver. 0.4.1a, 2012/11/08)
- 建立目錄並下載 CharLCD.py 檔案
$sudo apt-get install python-dev
$sudo apt-get install python-setuptools
$sudo easy_install -U distribute
$sudo apt-get install python-pip
$sudo pip install rpi.gpio
$mkdir my-python-projects
$mkdir my-python-prohects/CharLCD
$cd my-python-projects/CharLCD
$wget -O CharLCD.py http://goo.gl/2ynro
因為有使用中文註解,要加入
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的VSS (GND) 及 VDD (+5V) 似乎相反了喔。
回覆刪除已修正,謝謝你用心的閱讀 !
刪除不好意思 我想問一下網路跟時間的那邊 init 的部分 我是顯示ipv6 而不是ipv4
回覆刪除也嘗試過用跑馬燈 但它跟我說
unindent does not match any outer indentation level
(unindent與任何外部縮進級別不匹配)
想請問 我還有甚麼方法 謝謝
如果程式碼有做過修改,看你的縮排是不是沒弄好!
刪除