微控制器的圖形液顯示模組介面技術操作方法
摘要:詳述PIC16F877微控制器的MG-12232圖形點陣式液晶顯示器的硬體介面電路特點和介面軟體程式設計方法。
關鍵詞:PIC16F877LCD介面
引言
由於液晶顯示器(LCD)具有功耗低、體積小、質量輕、超薄等其他顯示器無法比擬的優點,它廣泛用於各種智慧型儀器和低功耗電子產品中。點陣式(或圖形式)LCD不僅可以顯示字元、數字,還可以顯示各種圖形、曲線及漢字,並且可以實現螢幕上下左右滾動、動畫、閃爍、文字特徵顯示等功能,用途十分廣泛。本文在簡介液晶顯示器MG-12232的驅動器SED1520F0A的結構、功能的基礎上,介紹了PIC16F877微控制器的LCD硬體介面電路和軟體程式設計特點。
一、PIC16F877與MG-12232的硬體介面電路
1.SED1520F0A的介面訊號
SED1520F0A屬行列驅動及控制合一的小規模液晶顯示驅動晶片,電路簡單,經濟實用,內含振盪器,只須外接振盪電阻即可工作。模組工作的穩定性好。SED1520F0A與微處理器的介面訊號如下。
DB0~DB7:資料匯流排。
A0:資料/指令選擇訊號。A0=1表示出現在資料匯流排上的是資料;A0=0,表示出現在資料匯流排上的是指令或讀出的狀態。
RES:介面時序型別選擇。RES=1為M6800時序,其操作訊號是E和R/W;RES=0為Intel8080時序,操作訊號是RD和WR。
RD(E):在Intel8080時序時為讀,低電平有效;在M6800時序時為使能訊號,是個正脈衝,在下降沿處為寫操作,在高電平時為讀操作。
WR(R/W):在Intel8080時序時為寫,低電平有效;在M6800時序時為讀、寫選擇訊號,R/W=1為讀,R/W=0為寫。
SED1520F0A與兩種匯流排的介面訊號和時序的詳細資料見液晶顯示模組使用手冊。
2.MG-12232模組的引腳說明
MG-12232模組共有18個引腳,各引腳定義如表1所列。
表1MG-12232模組的引腳定義
序號符號狀態功能說明1Vcc-邏輯電源正2GND-邏輯電源地3V0-液晶顯示驅動電源4RES-介面時序型別選擇5E2輸入主工作方式IC使能訊號6E2輸入從工作方式IC使能訊號7R/W輸入讀/寫選擇訊號8A0輸入暫存器選擇訊號9~16DB0~DB7三態資料匯流排(低位)17SLA-18SLK-背光燈負電源
3.PIC16F877與MG-12232模組的介面電路
現以功能強、價格低的PIC16F877為例說明PIC與MG-12232模組的硬體介面電路。其介面控制時序採用M6800操作時序,這樣SED1520F0A引出的控制訊號R/W,A0,E1和E2由PIC16F877的I/O埠portb的4個腳控制。介面電路如圖1所示。圖中利用可調電阻R3實現液晶的背光亮度調節,直接用電阻R2驅動液晶的背光燈。由於PIC16F877的位操作指令豐富,所以用軟體不難模擬出M6800操作時序。
二、介面軟體程式設計
1.SED1520F0A指令集
SED1520F0A液晶顯示驅動器有13條指令。表2所列的以與M6800系列MPU介面為例(RES=1)而總結出的指令。
表2SED1520F0A指令集
指令名稱控制訊號控制程式碼R/WA0D7D6D5D4D3D2D1D0顯示開/關指令001010111I/O顯示起始行設定00110顯示起行(0~31)設定頁地址00101110頁地址(0~3)設定列地址00
列地址(0~79)
讀狀態指令10BUSYADCOFF/ONRESET0000寫資料01顯示的資料讀資料11顯示的`資料ADC選擇指令0010100000/1靜態驅動開/關0010100100/1佔空比選擇0010101000/1改寫開始指令0011100000改寫結束指令0011101110復位0011100010
2.MG-12232模組的程式設計
下面是以圖1的介面電路為例編寫的只含E1主方式的程式(表1中E1=1,E2=0)。E2從方式(表1中E1=0,E2=1)的程式類推。
在系統程式的初始化部分應該對程式中用到的暫存器和臨時變數作說明,如:
lcdfialequ0x20;存放標誌位
sbdataequlcdflag+1;存放顯示資料
clmaddequsbdata+1;存放列地址
pageaddequclmadd+1;存放頁地址
pagenumequpageadd+1;存放總頁數
clmsumequpagenum+1;存放總列數
intscodeequclmsum+1;存放指令程式碼
讀液晶顯示器狀態子程式
StebsfSTATUS,RP0;選中儲存區1
movlw0xff
movwfTRISD;設定D口為輸入
bcfSTATUS,RP0;選中儲存區0
bsfPORTB,4;E1=1
bsfPORTB,1;R/W=1
bcfPORTB,0;A0=0
TaemovfPORTD,0;將狀態字讀入W中
movwflcdfiag;將W中的狀態字存入lcdfiag中
btfsclcdflag,7;判斷D7位是否為0
gotoTae;D7=1,為忙狀態
return
對液晶顯示器發指令子程式(指令儲存在W暫存器中)
Cwe
Movwfintscode;指令暫存intscode
BcfPORTB,1;R/W=0
BcfPORTB,0;A0=0
mo
vfintscode,0
movwfPORTD
bcfPORTB,4;E1=0寫入指令
return
對液晶顯示器寫資料子程式(資料儲存在W暫存器中)
Dwe
Movwfsbdata;資料暫存sbdata
Movfclmadd,0
CallCwe;設定列地址
CallSte
BsfSTATUS,RP0
clrfTRISD;設定D口為輸出方式
bcfSTATUS,RP0
bsfPORTB,4;E1=1
bcfPORTB,1;R/W=0
bsfPORTB,0;A0=1
movfsbdata,0
movwfPORTD
bcfPORTB,4;E1=0,寫入資料
callSte
inctclmadd,1;列地址加1
return
液晶顯示器開顯示、關顯示和清屏子程式
Disp;開E1顯示
movlw0xal;將控制命令放在W中
callCwe
bsfPORTB,4;E1=1
callSte;判是否忙
bsfSTATUS,RP0
clrfTRISD;設定D口輸出方式
bcfSTATUS,RP0
bsfPORTB,4;E1=1
bsfPORTB,1;R/W=1
bcfPORTB,0;A0=0
bsfSTATUS,RP0
movlw0xff
movwfTRISD;設定D口輸入方式
bcfSTATUS,RP0
movfPORTD,0
movwflcdflag;讀入狀態並查詢
btfsclcdflag,5;是否確定開啟
gotoDisp
return
Disoff;關E1顯示
movlw0xae;控制命令入在W中
callCwe
bsfPORTB,4;E1=1
bsfPORTB,1;R/W=1
bcfPORTB,0;A0=0
bsfSTATUS,RP0
movlw0xff
movwfTRISD
bcfSTATUS,RP0
movfPORTD,0
movwflcdfiag;讀入狀態並查詢
btfsslcdfiag,5;判是否關閉
gogoDisoff
return
Cler;清屏
movlw0xb8;設定頁地址程式碼
movwfpageadd
movlw0x04
movwfpagenum;設定總頁數
clr1movfpageadd,0
callCwe
movlw0x50;設定總列數
movwfclmsum;80或60列
movlw0x00
movwfclmadd;設定起始列
clr2movlw0x00
callDwe;寫入00H
clardecfszclmsum,1;本頁未清完
gotopageadd,1;頁號增1
decfszpagenum,1;4頁未清完
gotoclr1;返回繼續
return
有了以上的通用子程式,就可以構造出各種顯示程式,如字元、漢字、曲線等。當然,在這些程式執行前必須對液晶進行初始化。初始化的順序為:關顯示→正常顯示驅動設定→佔空比設定→復位→ADC選擇→清屏→開顯示。程式如下:
初始化子程式
Lcdinit
callDisoff;關顯示
movlw0xa4;靜態顯示驅動
callCwe
movlw0xe2;復位
callCwe
movlw0xa0;ADC選擇正常輸出
callCwe
movlw0x9;佔空比為1/32
callCwe
callCler;清零
callDisp;開顯示
return
對於字元、漢字和曲線顯示的原理是類似的。它們都是以位元組為單位進行顯示。關鍵在於形成字模庫時必須保證每個上位元組資料的最高位是與每一列最下面一個點相對應,最低位與每一列最上面點相對應。當然,這可以用專門的軟體來生成相應的程式碼,然後再將這些程式碼逐位元組地寫到相應的頁和列。
結束語
PIC微控制器與液晶模組的介面只在硬體上滿足液晶模組的介面要求,軟體上能夠模擬出要求的時序,並且初始化正確後,就可以隨心所欲地顯示資訊了。
以上介面電路和程
序在PIC試驗板上除錯透過,可作為其他微控制器與LCD介面的參考。
【微控制器的圖形液顯示模組介面技術操作方法】相關文章: