STC8H開發(十): SPI驅動Nokia5110 LCD(PCD8544)

2022-06-03 15:06:48

目錄

Nokia5110 LCD

有片很早以前買的Nokia5110 LCD一直在紙箱裡吃灰. 可能是買其它配件時送的? 沒有合適的用途一直扔在那裡, 偶爾見到總會想什麼時候有空給它點一下.

外觀長這樣. 其實市面上這種模組有幾個不同的版本, 另一種版本是上下有兩排排針, 方便不同的PCB佈局, 功能是一樣的.

單色LCD, 84x48畫素, 帶4顆藍色LED燈珠作為背光. 顯示晶片是Philips PCD8544.

因為是Nokia5110手機的顯示屏, 所以一般都叫它Nokia5110 LCD. 在2014年大屏手機還沒流行的年代, 這是個相當不錯的顯示輸出裝置, 相對於1602和2004LCD, 體積小解析度高, 便宜量又足.

現在遍地12864的LCD/OLED, 還有解析度更高的彩色LCD可以選擇, 這個模組也就沒什麼人用了.

PCD8544

  • 菲利普生產的單片低功耗CMOS LCD驅動控制器晶片, 用於驅動84x48畫素的LCD
  • 介面是SPI
  • 顯示記憶體 = 6 banks x 84 segments x 8 bits = 4032 bits = 504位元組
  • Each bank contains 84 columns/segments (from 0 to 83)
  • Each column can store 8 bits of data (from 0 to 7)

Pin腳

  1. RST 復位
  2. CE 片選, CS
  3. DC 資料/指令選擇, D/C
  4. DIN SPI資料, MOSI
  5. CLK SPI時鐘線
  6. VCC 電源, 這個模組相容3.3V和5V, 如果沒有標識建議使用3.3V
  7. BL 背光
  8. GND 接地

指令說明

PCD8544 的指令很少, 比 ST7567還少. 顯示機制和 ST7567 基本上是一樣的.

寫資料和寫命令

使用D/C pin控制, 高電平表示寫入資料, 低電平表示寫命令

功能設定

Function set: 0x20, 疊加下面的引數

  • Power down control: 0x04 關機模式
  • Entry mode: 0x02 定址方式, 設定後變成垂直定址, 先下再右; 正常模式是先右再下, 一般使用正常模式
  • Extended instruction set: 開啟擴充套件指令. 開啟後可以修改溫度引數, 電壓基準偏移, 顯示電壓, 後面兩個用於調節LCD的對比度

顯示控制

Display control: 0x08, 疊加下面的引數

  • Display blank 顯示空白: 0x00
  • Normal mode 正常顯示: 0x04
  • All display segment on 顯示全部: 0x01
  • Inverse video mode 反顯模式: 0x05

座標定位

PCD8544的顯示結構

只能定位到位元組, 定位後寫入資料, 會按設定好的定址方式往下寫

  • 設定x座標: 0x80 疊加 [0x00, 0x84) 之間的值
  • 設定y座標: 0x40 疊加 [0x00, 0x06) 之間的值

擴充套件指令

下面的命令必須在開啟擴充套件指令後執行才有效

  • Temperature control 溫度因子, 0x04 疊加取值 [0x00, 0x03]
  • Bias system 電壓基準控制, 0x10 疊加取值 [0x00, 0x07]
  • Set Vop 顯示電壓控制, 0x80 疊加取值 [0x00, 0x7F]

這三個指令需要說明一下, 設定不當可能會顯示全黑或者完全無顯示

  • 溫度因子可以不設定, 使用預設
  • 電壓基準設定得越大, 最後的實際顯示電壓越高, LCD顯示部分就越黑, 如果螢幕無顯示, 可以先調成0x07試試
  • 顯示電壓高低和設定的值成正比, 值越高實際顯示電壓越高, LCD顯示部分就越黑

使用 STC8H 進行測試

以下使用 STC8H3K32 和 FwLib_STC8 進行測試

接線

上電前一定要檢查一下VCC和GND是否正確, 電壓是否正確

P37   -> RES, RESET
P36   -> DC, A0
P35   -> CE, Chip Select
P32   -> SCK, SCL, CLK, Clock
P12   -> BL, Backlight
P34   -> MOSI, Din
GND   -> GND
3.3V  -> VCC

程式碼

程式碼可以從GitHub或者Gitee下載

初始化

// 重置
PCD8544_Reset();
// 設定對比度, 如果顯示太淡或太深, 需要自行調整
PCD8544_SetContrast(0x06, 0x20);
// 設定為正常顯示模式
PCD8544_SetDisplayNormal();

開啟和關閉背光

// 開啟背光
PCD8544_SetBackLightState(HAL_State_ON);
// 關閉背光
PCD8544_SetBackLightState(HAL_State_OFF);

清屏

PCD8544_Fill(0);
PCD8544_UpdateScreen();

反顯

開啟反顯後, 需要再設定為正常顯示模式才能恢復, 不能通過再次呼叫反顯恢復

PCD8544_SetDisplayInverted();

畫線

// 從(0,0)畫線到(83,0)
PCD8544_DrawLine(0,   0,  83,  0, 1);
PCD8544_DrawLine(0,   0,   0, 47, 1);
PCD8544_DrawLine(83,  0,  83, 47, 1);
PCD8544_DrawLine(0,  47,  83, 47, 1);
PCD8544_UpdateScreen();

顯示文字

// 移動座標到(3,3)
PCD8544_GotoXY(3, 3);
// 使用5x7字型顯示英文
PCD8544_Puts("LCD:PCD8544", &Font_5x7, 1);
PCD8544_UpdateScreen();

關機模式

// 關機
PCD8544_SetPowerDownMode(HAL_State_ON);
// 開機
PCD8544_SetPowerDownMode(HAL_State_OFF);

引數說明

這三個擴充套件命令會影響顯示, 設定不當會變成全白或全黑

#define PCD8544_SETTEMP             0x04 // Extended instruction set - Set temperature coefficient
#define PCD8544_SETBIAS             0x10 // Extended instruction set - Set bias system
#define PCD8544_SETVOP              0x80 // Extended instruction set - Write Vop to register

其中

  • PCD8544_SETTEMP是溫度因子, 通常不需要設定
  • PCD8544_SETBIAS是偏壓級別, 通常設定為[3,7]之間的指, 對應的寫入就是[0x13, 0x17]
  • PCD8544_SETVOP是系統電壓, 會受上面的兩個引數影響

如果初始化後無顯示或顯示全黑的, 可以根據上面的範圍調整.

演示

視訊中可以看到不同基準電壓下, 調節顯示電壓造成的對比度變化

https://www.bilibili.com/video/BV1eF411G7Y7

參考