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