ST7920 大面板顯示器可以顯示 128x64的解析度,有時又稱為 LCD12864。我在整理如何使用這個顯示器的資料時,發現有兩個接線方式,使用的函式庫也不同,如果顯示不需要用到中文字型,或是可以使用簡體中文的,可以用 LCD12864SPI 這個程式庫,比較簡單,功能也很有限,無法繪圖。另一篇將實作U8g2呈現中文的方法,這個程式庫功能非常強大,包括字型放大、繪圖等功能。本篇將實作如何使用 LCD12864SPI 程式庫顯示英數字、簡體中文,以及單色的圖片在顯示器上。
ST7920 (LCD12864) 規格如下:
ST7920 (LCD12864) 規格如下:
- 電源電壓:VDD4.5~5.5V(內置升壓電路,無需負壓)
- 控制器:ST7920
- 點陣個數:128列×64行
- 顯示顏色:藍底白字
- 可視角度:170度
- LCD類型:STN
- 控制介面:4/8位元數位並行驅動(LCD12864預設模式)和3位元串列
- LED背光:藍色
- 軟體功能:游標顯示、畫面移位元、自訂字元、反白顯示、睡眠模式等
- 工作溫度:-20℃~70℃
- 存儲溫度:-30℃~80℃
- 可通過連接Interface Shield使用Arduino直接驅動,也可根據引腳圖使用杜邦線連接
- 模組尺寸:93×70×22mm
- 視域尺寸:73×39mm
[找出漢字內碼]
我從淘X買的這個 ST7920 內建簡體中文 GB2312 字碼,當顯示繁體中文會出現一些奇奇怪怪的字,或無法顯示。找出簡體漢字的內碼,主要是要讓這片可以顯示簡體中文,可以用以下方法找到內碼,放在程式中來呈現中文:
(1) 使用 Google 翻譯將繁體中文轉成簡體中文
以「中文測試」這幾個字為例,轉換後,將翻譯結果的簡體字全選,按下Ctrl + C,複製這幾個字。
(2) 使用 千千秀字 找出內碼
在輸入的方框貼上剛剛複製的內容,按下「查詢」,可以得知這幾個字的各種編碼。
(3) 將編碼放到程式中
可以看到查詢結果 GB2312編碼:中 D6D0 ,文 CEC4, 测 B2E2, 试 CAD4,將每個字碼拆成兩個 16 進位數字,放在程式中的顯示陣列,如「中」的「D6D0」,則拆成「0xD6, 0XD0」,如以下程式:
(2) 到 這裡 下載 LCD Image Converter 轉檔工具。下載後執行程式,並開啟稍早小畫家儲存的檔案。
(3)下拉選單「Options」→ 「Conversion」,開啟另一個視窗,在「Preset:」下拉選擇「Monochrome」。
(4)按下「Show Preview」,出現以下視窗:
(5)將右邊一堆16進位的數字「全選Ctrl+A」複製Ctrl+C起來。開啟 Arduino IDE 程式,貼在以下兩行程式中間。
下載後解壓縮,放置到 Arduino 的 Libraries(通常在C:\Documents\Arduino\libraries中),如需要更進一步說明,可參考下載程式庫(Library)安裝方法請參考另一篇文章: Arduino筆記:安裝 Arduino IDE 程式庫(Library)。
以「中文測試」這幾個字為例,轉換後,將翻譯結果的簡體字全選,按下Ctrl + C,複製這幾個字。
(2) 使用 千千秀字 找出內碼
在輸入的方框貼上剛剛複製的內容,按下「查詢」,可以得知這幾個字的各種編碼。
(3) 將編碼放到程式中
可以看到查詢結果 GB2312編碼:中 D6D0 ,文 CEC4, 测 B2E2, 试 CAD4,將每個字碼拆成兩個 16 進位數字,放在程式中的顯示陣列,如「中」的「D6D0」,則拆成「0xD6, 0XD0」,如以下程式:
unsigned char show1[]={ 0xD6, 0xD0, 0xCE, 0xC4, 0xB2, 0xE2, 0xCA, 0xD4 };
[如何轉換圖片為程式碼]
(1) 編輯要轉換的圖檔,將圖等比例縮成 128x64 大小(2) 到 這裡 下載 LCD Image Converter 轉檔工具。下載後執行程式,並開啟稍早小畫家儲存的檔案。
(3)下拉選單「Options」→ 「Conversion」,開啟另一個視窗,在「Preset:」下拉選擇「Monochrome」。
(4)按下「Show Preview」,出現以下視窗:
(5)將右邊一堆16進位的數字「全選Ctrl+A」複製Ctrl+C起來。開啟 Arduino IDE 程式,貼在以下兩行程式中間。
unsigned char logo[]={ };(6)再使用 DrawFullScreen()函式將上面的資料載入,就會呈現圖形在 ST7920 顯示器上。
[安裝程式庫Library]
本實作需要安裝以下程式庫:下載後解壓縮,放置到 Arduino 的 Libraries(通常在C:\Documents\Arduino\libraries中),如需要更進一步說明,可參考下載程式庫(Library)安裝方法請參考另一篇文章: Arduino筆記:安裝 Arduino IDE 程式庫(Library)。
[材料]
- Arduino UNO x1
- ST7920 (LCD12864)液晶顯示器 x1
- 10K 可變電阻 x1
- 麵包板 x2
- 排線 n 條
[接線圖]
Arduino Uno | ST7920(12864) LCD | B10K可變電阻 |
---|---|---|
GND | GND | 左側接腳 |
+5V | VCC | - |
D3 | EN | - |
D8 | RS | - |
D9 | R/W | - |
GND | PSB | - |
3.3V | BLA | - |
GND | BLK | - |
- | VOUT | 左側接腳 |
- | VO | 中央接腳 |
[程式]
以下是顯示 圖形的程式:#include <LCD12864RSPI.h> #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] ) unsigned char show1[]={ 0xD6, 0xD0, 0xCE, 0xC4, 0xB2, 0xE2, 0xCA, 0xD4 }; unsigned char logo[]={ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xa0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xc1, 0x0f, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7c, 0x0b, 0x20, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf1, 0xfb, 0xbe, 0x1f, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x87, 0xf9, 0x3f, 0xc3, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x3f, 0xfb, 0xbf, 0xf8, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0xff, 0xf9, 0xbf, 0xfe, 0x3c, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x73, 0xff, 0xfd, 0xbf, 0xff, 0x8f, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xe7, 0xff, 0xf9, 0xbf, 0xff, 0xe7, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xc0, 0x00, 0x01, 0x80, 0x00, 0x01, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xfd, 0xbf, 0xff, 0x77, 0xfe, 0xff, 0xd4, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xdf, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfc, 0x6e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x2a, 0x1f, 0xf9, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf1, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x80, 0x4f, 0xfc, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xf6, 0x7e, 0x27, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x3f, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xe5, 0xc3, 0x97, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xe1, 0xd3, 0xfe, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xc9, 0x18, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xe4, 0x8e, 0x65, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xd2, 0x7e, 0x69, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x3f, 0x35, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xc6, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x7f, 0xd0, 0xfe, 0x7f, 0xff, 0xff, 0xef, 0xff, 0x8d, 0xff, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xc2, 0xff, 0xca, 0xfe, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xa9, 0xff, 0x95, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xca, 0xfc, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0x8d, 0xff, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xff, 0xea, 0x7c, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xa9, 0xff, 0x95, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xea, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x2d, 0xff, 0xb0, 0x04, 0xab, 0x7f, 0xff, 0xd2, 0xff, 0xca, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xff, 0xa5, 0x50, 0x00, 0x00, 0x00, 0x0a, 0x7f, 0xda, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0x2f, 0xff, 0xff, 0xf6, 0xaa, 0xbb, 0x7f, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x3e, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x1f, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x80, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xc0, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf7, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7b, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x18, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; unsigned char en_char0[]="LCD12864 Display"; unsigned char en_char1[]="Test By Ceiling "; unsigned char en_char2[]=" "; unsigned char en_char3[]=" 2020.12.15 "; void setup() { LCDA.Initialise(); // 初始化螢幕 delay(100); } void loop() { LCDA.CLEAR(); delay(500); LCDA.DisplayString(0,0,en_char0,16); delay(10); LCDA.DisplayString(1,0,en_char1,16); delay(10); LCDA.DisplayString(2,0,en_char2,16); delay(10); LCDA.DisplayString(3,0,en_char3,16); delay(5000); LCDA.CLEAR(); delay(500); LCDA.DisplayString(0,0,show1,8); delay(5000); LCDA.CLEAR(); delay(500); LCDA.DrawFullScreen(logo); delay(6000); }
[實作結果]
[參考資料]
- Arduino ST7920 Tutorial
- ST7920 datasheet
- acoptex.com:Basics: Project 048a LCD 12864B
- DFRobot / Mindplus-Desktop:LCD12864RSPI
張貼留言