自制單片機之十五……可串行驅(qū)動LCD12864的應(yīng)用
在網(wǎng)上搜了一下,ST7920控制器的LCD產(chǎn)品可以提供8位,4位并行和串行接口可選,并行的控制接口的LCD較多,前面的貼子也介紹過,我們在這兒不說了,這兒我們講的是串口控制LCD12864。
買了塊ST7920的LCD12864,型號是12864-1。這個價格好像比前面我買的那個并口的便宜些,52元。是不是顯示效果要差些呢。
再來個背面照片:
買來后也就只有個管腳說明:(我只說串口的定義)
工作于串行模式時的引腳定義:
PIN1------------ GND 電源-, 一般接0V。
PIN2------------VDD 電源+, 一般接5V。
PIN3------------V0 對比度調(diào)整端。
PIN4------------RS(CS),片選
PIN5------------R/W(SID),串行數(shù)據(jù)線
PIN6------------E(SCLK),串行時鐘脈沖輸入
PIN7------------DB0,不連接
PIN8------------DB1,不連接
PIN9------------DB2,不連接
PIN10-----------DB3,不連接
PIN11-----------DB4,不連接
PIN12-----------DB5,不連接
PIN13-----------DB6,不連接
PIN14-----------DB7,不連接
PIN15-----------PSB 并行:PSB=1,可以接VCC; 串行:PSB=0,一般接GND
PIN16 ----------NC,不連接
PIN17-----------RST,模塊復(fù)位(低電平有效)
PIN18 ----------VEE,液晶驅(qū)動電壓(或名Vout)
PIN19 ----------LED+ ,背光 +,一般接5V。
PIN20 ----------LED- ,背光 -,一般接GND。
在網(wǎng)上搜了關(guān)于ST7920的資料,跟據(jù)圖上的接法串行驅(qū)動只要四根線和S52連接:
PIN5----SID 數(shù)據(jù)線
PIN6----SCLK 時鐘脈沖線
PIN1----VSS(GND)接地
PIN2----VDD(Vcc)電源+5V
我先試了背光,也就是第20腳接地,19腳通過電流表接電源+5V,測得背光電流為30mA,背光很亮。
下面還是要先講原理,資料說起來是枯燥了點。但你不去理解它,是不可能讓LCD正常工作的。
先說說ST7920的LCD內(nèi)部都有哪些資源。
1、ST7920 內(nèi)部固化了8192 個16×16 點陣的中文字型在CGROM里。
2、固化有126 個16×8 點陣的西文字符在HCGROM里。
3、提供4個16×16點陣自造字符的存儲空間CGRAM。
4、提供128×64的點陣?yán)L圖共1024個字節(jié)的存儲空間GDRAM。
5、提供1個16×15點陣圖標(biāo)的存儲空間IRAM(ICON RAM)。
如何去把它們顯示在LCD上呢。
1、作為字符顯示,在控制器內(nèi)有個供寫入字符代碼的緩存器DDRAM ,你只要將要顯示的中文字符代碼或西文字符代碼寫入DDRAM,硬件將依照編碼自動從CGROM 中選擇將要顯示的字型顯示再屏幕上。至于是顯示西文字符還是中文字符,它會自動辨別的,這和我們PC上是一樣的,字符代碼也完全一樣。
2、圖形方式就是用指令直接將表示點陣信息的字節(jié)數(shù)據(jù)寫入相應(yīng)位置的GDRAM內(nèi),
具體的規(guī)則:
1、字符顯示時,DDRAM地址與液晶屏的位置關(guān)系見下圖:
這個圖上可以看出,它的地址編排很怪,第一行到87H完了以后就跳到了第三行接著88H了,每二行也是一樣的,很明顯,有下面兩行接在上面兩行后面的跡像。如下圖:
2、下面我們再來看看圖形顯示GDRAM地址和LCD屏位置的關(guān)系:
上圖我們可以看出ST7920的LCD12864在地址的排列上是分為上、下半屏來顯示的,上半屏橫向的列地址(X)是0-7(00h-07h),下半屏的列地址是8-15(08h-0fh)。而每個一地址都可寫入兩個字節(jié)的內(nèi)容,它們是按高位在前低位在后排列的。垂直方向上的地址(Y)上半屏是0-31(00h-1fh),下半屏的Y地址仍是0-31(00h-1fh),可以看出,它的地址排列方式還是將下半屏接在上半屏后面的,因此這塊LCD12864,雖然在點陣的物理排列上是128×64,但在地址排列上,它卻是塊256×32。
3、下面我們來介紹能夠使用的指令?
下面我們來看看在串行模式下是如何進(jìn)行控制的,見下圖:
由圖可以看出,單片機與液晶模塊之間傳送1字節(jié)的數(shù)據(jù)共需24個時鐘脈沖。首先,單片機要給出數(shù)據(jù)傳輸起始位,這里是以5個連續(xù)的“1”作數(shù)據(jù)起始位,如模塊接收到連續(xù)的5個“1”,則內(nèi)部傳輸被重置并且串行傳輸將被同步。緊接著,“RW”位用于選擇數(shù)據(jù)的傳輸方向(讀或?qū)懀?ldquo;RS”位用于選擇內(nèi)部數(shù)據(jù)寄存器或指令寄存器,最后的第8位固定為“0”。在接收到起始位及“RW”和“RS”的第1個字節(jié)后,下一個字節(jié)的數(shù)據(jù)或指令將被分為2個字節(jié)來串行傳送或接收。數(shù)據(jù)或指令的高4位,被放在第2個字節(jié)串行數(shù)據(jù)的高4位,其低4位則置為“0”;數(shù)據(jù)或指令的低4位被放在第3個字節(jié)的高4位,