lcd12864簡介
帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,内部含有國标一級、二級簡體中文字庫的點陣圖形液晶顯示子產品;其顯示分辨率為128×64,内置8192個16*16點漢字,和128個16*8點ASCII字元集。利用該子產品靈活的接口方式和簡單、友善的操作指令,可構成全中文人機互動圖形界面。可以顯示8×4行16×16點陣的漢字。也可完成圖形顯示。低電壓低功耗是其又一顯著特點。由該子產品構成的液晶顯示方案與同類型的圖形點陣液晶顯示子產品相比,不論硬體電路結構或顯示程式都要簡潔得多,且該子產品的價格也略低于相同點陣的圖形液晶子產品。
注:
我們所用的LCD屏的命名,基本都是按照其分辨率來進行命名的 比如lcd1602 就是分辨率為16×2 lcd128128 就是分辨率為128×128
lcd12864基本特性參數
(1)低電源電壓(VDD:+3.0--+5.5V)
(2)顯示分辨率:128×64點
(3)内置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)
(4)内置128個16×8點陣字元
(5)2MHZ時鐘頻率
(6)顯示方式:STN、半透、正顯
(7)驅動方式:1/32DUTY,1/5BIAS
(8)視角方向:6點
(9)背光方式:側部高亮白色LED,功耗僅為普通LED的1/5—1/10
(10)通訊方式:串行、并口可選
(11)内置DC-DC轉換電路,無需外加負壓
(12)無需片選信号,簡化軟體設計
(13)工作溫度:0℃-+55℃,存儲溫度:-20℃-+60℃
lcd12864引腳圖及功能

我們所用的為序列槽通信模式,是以僅介紹下串行所用管腳
引腳:
1 VSS 電源負極
2 VDD 電源正極
4 CS 片選引腳 高電位可接受資料,低電位鎖存
5 SID 串行資料輸入端
6 CLK 串行同步時鐘
可選引腳:
3 V0 調節螢幕亮度
15 PSB 低電平有效 其中低電平為序列槽方式 如果隻用序列槽通信模式 可以将PSB引腳飛線與地線相連 即固定低電平
17 RESET 複位引腳 低電平可使LCD複位
19 A LCD背光源的電源
20 K LCD背光源的地 如果需要背光 可以将19引腳與LCD2引腳電源正極相連,20引腳與LCD1引腳電源地相連
串行模式下傳輸過程
1.首先CS片選一直為高電平期間,LCD可接受資料或指令,
2.随後,單片機要給出資料傳輸起始位,這裡是以5個連續的“1”作資料起始位,如子產品接收到連續的5個“1”,則内部傳輸被重置并且串行傳輸将被同步。
3.緊接的兩個位指定傳輸方向(RW,用于選擇資料的傳輸方向 ,1是讀資料,0是寫資料)以及傳輸性質(RS,用于選擇内部資料寄存器或指令寄存器,0是指令寄存器,1是資料寄存器) 最後的第8位固定為“0”。 到此第一個位元組 /資料傳輸起始位發送完成。
4.在接收到起始位及“RW”和“RS”的第1個位元組後,之後便開始傳輸指令或者資料,在傳輸過程中會進行拆分處理,該位元組将被分為2個位元組來傳輸或接收。
5.你想發送的資料或指令的高4位,被放在發送的第2個位元組串行資料的高4位,其低4位則置為“0”;資料或指令的低4位被放在第3個位元組的高4位,其低4位也置為“0”,如此完成一個位元組指令或資料的傳送。 (D7-D0)
比如說你想發送的資料為“A” 對應16進制0x41 對應二進制 0100 0001
那麼發送的順序就是:
1 先發送0xFA (11111 010) 五個1 RW=0 RS=1 ,
2 發送0100 0000 高四位為“A”對應的高四位 低4位補0
3發送0001 0000 高四位為“A”對應的低四位 低4位補0
到此一個位元組發送完成
是以寫指令之前,必須先發送 11111 000 (即0xF8)
寫資料之前 必須先發送 11111 010 (即0xFA)
而如何實作字元的拆分呢?
參考:《C語言運算符與操作符的用法全面彙總(非常有用)》
将字元“A”的低四位清零 保留高四位 可以做“A”&240( 0xf0)
0100 0001——————“A”的二進制數
1111 0000——————240的二進制數
------------------
0001 0000 保留了“A”的高四位
将字元“A”的低四位變為高四位 可以用<<(左移運算符) A<<4
0100 0001——————“A”的二進制數
0001 0000 ——————保留了“A”的低四位
6 完成一個位元組資料的發送需要24個時鐘周期 因為1個位元組實際是發送了3個位元組 (3x8)
7.隻有在時鐘線SCLK拉低時,資料線SID上的資料才允許變化,在時鐘線SCLK高電平時,SID上的資料必須保持穩定(不能變化)
這點與IIC是相同的
LCD内部資源/顯示原理
LCD的控制晶片為ST7920 ,ST7920有豐富的内部資源,并且内部的ROM已經固化存儲了中文字庫,半角英文/數字字元
也就是自帶中文字庫
ST7920的内部資源:
提供8 位,4 位并行接口及串行接口可選
自動電源啟動複位功能
内部自建振蕩源
1、ST7920 内部固化了8192 個16×16 點陣的中文字型在CGROM(2M 位中文字型ROM)裡。
2、固化有126 個16*8 點陣的半角英文/數字字元(ASCII)在HCGROM裡。
3、提供4個16×16點陣自造字元的存儲空間CGRAM(字形産生RAM)。
4、提供128×64的點陣繪圖共1024個位元組的存儲空間GDRAM(點陣繪圖RAM)。
5、提供1個16×15點陣圖示的存儲空間IRAM(ICON RAM)
6、64×16 位字元顯示RAM (DDRAM 最多16 字元×4 行)
那麼在LCD上顯示字元或者漢字是怎麼實作的呢:
LCD顯示原理:
作為字元顯示,在控制器内有個供寫入字元代碼的緩存器DDRAM ,你隻要将要顯示的中文字元編碼或其他字元編碼寫入DDRAM(顯示資料),也就是串行模式下發送一個位元組資料,硬體将依照編碼自動從CGROM(2M 中文字型ROM) HCGROM(16K ASCII碼ROM) CGRAM(自定義字形RAM)三種字形中自動辨識選擇對應的是那種字形的哪個字元/漢字編碼,再将要顯示的字元/漢字編碼顯示在螢幕上。
也就是字元顯示是通過将字元顯示編碼寫入字元顯示RAM(DDRAM )實作的
子產品内部的RAM提供64×16的顯示空間 ,最多可以顯示4行8字(32個漢字)或64個ASCII碼字元的顯示 一個漢字2個位元組
DDRAM一共有32個字元顯示區域,當然,字元顯示的RAM的位址與32個字元顯示區域有着一一對應的關系
字元顯示時,DDRAM位址與液晶屏的位置:
通過寫入不同的位址,就可以實作字元顯示的不同位置
LCD控制指令
LCD12864提供了兩套控制指令,分别為基本指令和擴充指令 ,涉及到了LCD的清屏,開關,顯示字元位置等等
其實也就是向LCD寫入特殊字元而已 ,根據RS和RW可以判斷指令方式
下面我們介紹幾個常用的:
1清屏
清除螢幕字元 ,也就是對整塊螢幕寫入空字元 并且将遊标移到開始位置 在使用清屏時,需要加上一定的延時等待液晶穩定
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0000 0001 |
2顯示狀态開關
其中第6位置1打開顯示,第7位與第8位對應遊标相關設定 一般配置為 0X0C //顯示器開,光标關閉,不反白
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0 0 0 0 1 1/0 1/0 1/0 |
3功能設定
DL = 0/1 : 4/8位資料 我們是使用8位 是以為1 RE=1時,使用擴充指令集,RE=0時,使用基本指令集,我們正常使用基本指令集 是以RE需要為0 一般配置為 0X30 // 基本指令集 8bit資料流
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0 0 1 1/0 任意 1/0 任意 任意 |
4遊标功能設定
進入點設定 : 是表示在寫入或者讀取的時候,遊标相對于上一個位置的移位 不設定即預設對位址加1(移1位) 如果你想要字元之間有空隙 可以修改移位
遊标的位置移動設定,寫入相對應的資料即可改變遊标位置,實作LCD界面的書寫, 32個字元顯示區域對應32個位址
5讀取BF忙标志和位址
忙标志BF:
BF标志提供内部工作狀況,BF=1表示子產品内部正在進行操作,此時子產品不接受指令和資料. BF=0 子產品為準備接受狀态,可以接受指令和資料
6讀/寫資料
就是進行資料的讀寫,
寫資料:
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
1 0 | 8bit資料 |
讀資料:
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
1 1 | 8bit資料 |
7 CGRAM(自定義字形RAM)設定
STM32 LCD12864 串行通信模式 (從原理讓你了解)
設定該位址即可自定義字形編碼,在顯示圖檔時會先将圖檔編碼寫入這裡,然後再讀它進行顯示
LCD初始化
我們把它分為6步分别講解
- 1.在開電之後,首先要等待40ms以上,等待液晶自檢,使LCD系統複位完成
- 2. 之後便是功能的設定 選擇基本指令集或者擴充指令集 随後延時等待100us以上
- 3. 功能設定2 選擇8bit資料流 或者 4bit資料流 随後延時37us以上
- 4. 開關顯示 是否打開顯示開關 随後延時100us以上
- 5.清屏 清空RAM并初始化光标位置 随後延時10us以上
- 6. 進入模式選擇 也就是設定遊标相對于上一個位置的移位 預設為位址自動+1
之後初始化完成,可以對LCD進行資料的寫入或讀取
當然第二步與第三布寫入資料是相同的,可以隻寫一次然後延時137us以上也可
LCD圖檔顯示
LCD12864在位址的排列上是分為上、下半屏來顯示的,上半屏橫向的列位址(X)是0-7(00h-07h),下半屏的列位址是8-15(08h-0fh)。而每個一位址都可寫入兩個位元組的内容,它們是按高位在前低位在後排列的。垂直方向上的位址(Y)上半屏是0-31(00h-1fh),下半屏的Y位址仍是0-31(00h-1fh)
也就是一幅圖檔寫入時垂直坐标Y要寫64次 (上下屏) 水準橫向坐标X要寫8次
在每兩個位元組寫入後時候就要重新設定垂直位址,再設定水準位址(連續寫入兩個位元組确定X,Y位址) 然後再寫圖檔的正常編碼 這樣便可以實作一幅圖像的寫入 簡單說就是對每個位置寫入圖檔的相對于位置的編碼
圖檔顯示的步驟
1切換到擴充指令
2 關閉繪圖顯示功能
3 先将垂直的坐标(Y)寫入CGRAM位址
4 再将水準的位元組坐标(X)寫入CGRAM位址
5 将高位位元組D15-D8寫入RAM中
6 将低位位元組D7-D0寫入到RAM中
重複3-6步,完成圖檔各個部分的寫入 先寫上半屏,再寫下半屏
7 打開繪圖顯示功能 8切換回基本指令
其實也就是先打開CGRAM(自定義字形RAM) 然後把定義好的圖檔編碼寫入CGRAM 然後再對DDRAM正常寫入該圖檔編碼, 這時硬體将依照編碼從CGRAM(自定義字形RAM)讀取之前寫入的圖檔編碼,然後顯示該圖檔
具體看代碼即可
注意事項:
用帶中文字庫的128X64顯示子產品時應注意以下幾點:
PS: 圖檔顯示之後需要加上延時,否則會持續寫入,不會有圖檔顯示
圖檔寫入CGRAM(自定義字形RAM)時必須要先寫垂直位址坐标,再寫水準位址坐标
①欲在某一個位置顯示中文字元時,應先設定顯示字元位置,即先設定顯示位址,再寫入中文字元編碼。
②顯示ASCII字元過程與顯示中文字元過程相同。不過在顯示連續字元時,隻須設定一次顯示位址,由子產品自動對位址加1指向下一個字元位置,否則,顯示的字元中将會有一個空ASCII字元位置。
③當字元編碼為2位元組時,應先寫入高位位元組,再寫入低位位元組。
④子產品在接收指令前,向處理器必須先确認子產品内部處于非忙狀态,即讀取BF标志時BF需為“0”,方可接受新的指令。如果在送出一個指令前不檢查BF标志,則在前一個指令和這個指令中間必須延遲一段較長的時間,即等待前一個指令确定執行完成。指令執行的時間請參考指令表中的指令執行時間說明。
⑤“RE”為基本指令集與擴充指令集的選擇控制位。當變更“RE”後,以後的指令集将維持在最後的狀态,除非再次變更“RE”位,否則使用相同指令集時,無需每次均重設“RE”位。
到此,LCD的串行通信就講的差不多了,可以結合着代碼篇部落格,學習完對應相關原理,然後檢視相對應代碼,可以更好地了解
如果需要檢視代碼請移步到下一篇部落格:《STM32驅動 LCD12864程式代碼(串行方式)》