自制單片機(jī)之六……LCD12864的驅(qū)動
LCD12864在市面上主要分為兩種,一種是采用st7920控制器的,它一般帶有中文字庫字模,價格略高一點。另一種是采用KS0108控制器,它只是點陣模式,不帶字庫。很可惜,我的這塊就是KS0108控制器不帶漢字庫的,不過不打算用它專門顯示文本,也就無所謂了。
LCD12864模塊的20個引腳定義如下:
1。Vss 邏輯電源地
2。VDD 邏輯電源正 5v
3。V0 LCD驅(qū)動電壓
4。RS 數(shù)據(jù)/指令選擇:高電平為數(shù)據(jù),低電平為指令
5。R/W 讀/寫選擇:高電平為讀數(shù)據(jù),低電平為寫數(shù)據(jù)
6。E 讀寫使能,高電平有效,下降沿鎖定數(shù)據(jù)
7。DB0 數(shù)據(jù)輸入輸出引腳
8。DB1 數(shù)據(jù)輸入輸出引腳
9。DB2 數(shù)據(jù)輸入輸出引腳
10。DB3 數(shù)據(jù)輸入輸出引腳
11。DB4 數(shù)據(jù)輸入輸出引腳
12。DB5 數(shù)據(jù)輸入輸出引腳
13。DB6 數(shù)據(jù)輸入輸出引腳
14。DB7 數(shù)據(jù)輸入輸出引腳
15。CS1 片選擇號,低電平時選擇前64列
16。CS2 片選擇號,低電平時選擇后64列
17。RET 復(fù)位信號,低電平有效。
18。VEE 輸出-15v電源給V0提供驅(qū)動電源
19。A 背光電源LED正極
20。K 背光電源LED負(fù)極
2。VDD 邏輯電源正 5v
3。V0 LCD驅(qū)動電壓
4。RS 數(shù)據(jù)/指令選擇:高電平為數(shù)據(jù),低電平為指令
5。R/W 讀/寫選擇:高電平為讀數(shù)據(jù),低電平為寫數(shù)據(jù)
6。E 讀寫使能,高電平有效,下降沿鎖定數(shù)據(jù)
7。DB0 數(shù)據(jù)輸入輸出引腳
8。DB1 數(shù)據(jù)輸入輸出引腳
9。DB2 數(shù)據(jù)輸入輸出引腳
10。DB3 數(shù)據(jù)輸入輸出引腳
11。DB4 數(shù)據(jù)輸入輸出引腳
12。DB5 數(shù)據(jù)輸入輸出引腳
13。DB6 數(shù)據(jù)輸入輸出引腳
14。DB7 數(shù)據(jù)輸入輸出引腳
15。CS1 片選擇號,低電平時選擇前64列
16。CS2 片選擇號,低電平時選擇后64列
17。RET 復(fù)位信號,低電平有效。
18。VEE 輸出-15v電源給V0提供驅(qū)動電源
19。A 背光電源LED正極
20。K 背光電源LED負(fù)極
具體電路圖如下:
制做如下:
接口說明:
裝上12864
具體的電路還是兩個電阻。一個背光限流電阻。一個液晶驅(qū)動電壓調(diào)節(jié)電阻。背光電阻還是任何時候在19、20腳與電源之間串上個100歐電位器接上電源。調(diào)節(jié)電位器到合適亮度。具體值最好是到調(diào)試完程序能夠正常顯示后再將阻值確定換成固定電阻。液晶驅(qū)動電壓的調(diào)整在數(shù)據(jù)線、電源線接好的前提下是在Vee(-15v)和地之間接一個電位器。中間接V0,通過調(diào)節(jié)電位器來調(diào)節(jié)V0上的電壓。當(dāng)V0上為-15V時為全暗(液晶顯示為全黑)。當(dāng)V0為0V時為全亮。調(diào)節(jié)電位器使屏幕從全暗剛好變到亮?xí)r,便可進(jìn)行程序的調(diào)試。待屏幕顯示正常后,進(jìn)行對比度的細(xì)調(diào),然后測量這兩邊的阻值在地和V0之間、V0和Vee之間換成兩個固定電阻焊上就好了。注意在V0的電壓是在一個很小的范圍有效。我的就是在-2.2——-2.5這個范圍。仔細(xì)調(diào)節(jié)V0和地之間的電阻使V0上的電壓在2.3V。
更換為固定電阻后的裝配圖:
下面說說具體的驅(qū)動:
先來了解一下LCD12864的內(nèi)部控制結(jié)構(gòu):見圖
可以看出12864屏是分為左、右兩塊控制的。所有對屏幕的操作要受片選CS1、CS2來控制。
我們再來看一看對屏幕操作數(shù)據(jù)與屏幕點陣的排布關(guān)系:見下圖。
我們再來看一看對屏幕操作數(shù)據(jù)與屏幕點陣的排布關(guān)系:見下圖。
從上圖可以看出數(shù)據(jù)按字節(jié)在屏幕上是豎向排列的。上方為低位,下方為高位。因此在橫向上(也就是Y)就一共是128列數(shù)據(jù)。分為CS1和CS2兩個64列來寫入。在豎方向上(也就是X)一字節(jié)數(shù)據(jù)顯示8個點,豎向64個點分為8個字節(jié),稱做8頁(X=0-7)。了解這些后我們就知道要滿屏顯示一張圖就要從y=0…127、X=0…7一共寫128×8=1024個字節(jié)的數(shù)據(jù)。同樣在AT89S51中存一張圖就要1024個字節(jié)的空間。
好!下面我們來了解對LCD12864進(jìn)行操作的一些指令。
下面對上圖的指作解釋:
1.顯示開關(guān)控制(DISPLAY ON/OFF)
1.顯示開關(guān)控制(DISPLAY ON/OFF)
D=1:開顯示(DISPLAY ON) 意即顯示器可以進(jìn)行各種顯示操作
D=0:關(guān)顯示(DISPLAY OFF) 意即不能對顯示器進(jìn)行各種顯示操作
D=0:關(guān)顯示(DISPLAY OFF) 意即不能對顯示器進(jìn)行各種顯示操作
2.設(shè)置顯示起始行(DISPLAY START LINE)
前面在Z地址計數(shù)器一節(jié)已經(jīng)描述了顯示起始行是由Z地址計數(shù)器控制的。A5~A0 6位地址自動送入Z地址計數(shù)器,起始行的地址可以是0~63的任意一行。
例如: 選擇A5~A0是62,則起始行與DDRAM行的對應(yīng)關(guān)系如下:
DDRAM 行:62 63 0 1 2 3 ·················28 29
屏幕顯示行: 1 2 3 4 5 6················· 31 32
例如: 選擇A5~A0是62,則起始行與DDRAM行的對應(yīng)關(guān)系如下:
DDRAM 行:62 63 0 1 2 3 ·················28 29
屏幕顯示行: 1 2 3 4 5 6················· 31 32
3.設(shè)置頁地址(SET PAGE “X ADDRESS”)
所謂頁地址就是DDRAM的行地址,8行為一頁,模塊共64行即8頁,A2~A0表示0~7頁。讀寫數(shù)據(jù)對地址沒有影響,頁地址由本指令或RST信號改變復(fù)位后頁地址為0。頁地址與DDRAM的對應(yīng)關(guān)系見DDRAM地址表。
4.設(shè)置Y地址(SET Y ADDRESS)
此指令的作用是將A5~A0送入Y地址計數(shù)器,作為DDRAM的Y地址指針。在對DDRA M進(jìn)行讀寫操作后,Y地址指針自動加1,指向下一個DDRAM單元。
5.讀狀態(tài)(STATUS READ)
當(dāng)R/W=1 D/I=0時,在E信號為“H”的作用下,狀態(tài)分別輸出到數(shù)據(jù)總線(DB7~DB0)的相應(yīng)位。
BF: 前面已敘述過(見BF標(biāo)志位一節(jié))。
ON/OFF: 表示DFF觸發(fā)器的狀態(tài)(見DFF觸發(fā)器一節(jié))。
RST: RST=1表示內(nèi)部正在初始化,此時組件不接受任何指令和數(shù)據(jù)。
6.寫顯示數(shù)據(jù)(WRITE DISPLAY DATE)
D7~D0為顯示數(shù)據(jù),此指令把D7~D0寫入相應(yīng)的DDRAM單元,Y地址指針自動加1。
7.讀顯示數(shù)據(jù)(READ DISPLAY DATE)
此指令把DDRAM的內(nèi)容D7~D0讀到數(shù)據(jù)總線DB7~DB0,Y地址指針自動加1。
再帖一下接口時序圖
1.寫操作時序
2.讀操作時序
時序參數(shù)表:
又帖了這么多指令呀時序圖什么的,看了就頭暈。我也和你一樣不愛看這些枯燥的東西。
下面實際寫些程序讓屏幕亮起來。
運行:
不要走開哦!我會不斷補全的。。。
評論