PIC16F877單片機(jī)的液晶顯示模塊接口技術(shù)
Disp ;開E1顯示
movlw 0xal ;將控制命令放在W中
call Cwe
bsf PORTB,4 ;E1=1
call Ste ;判是否忙
bsf STATUS,RP0
clrf TRISD ;設(shè)置D口輸出方式
bcf STATUS,RP0
bsf PORTB,4 ;E1=1
bsf PORTB,1 ;R/W=1
bcf PORTB,0 ;A0=0
bsf STATUS,RP0
movlw 0xff
movwf TRISD ;設(shè)置D口輸入方式
bcf STATUS,RP0
movf PORTD,0
movwf lcdflag ;讀入狀態(tài)并查詢
btfsc lcdflag,5 ;是否確定打開
goto Disp
return
Disoff ;關(guān)E1顯示
movlw 0xae ;控制命令入在W中
call Cwe
bsf PORTB,4 ;E1=1
bsf PORTB,1 ;R/W=1
bcf PORTB,0 ;A0=0
bsf STATUS,RP0
movlw 0xff
movwf TRISD
bcf STATUS,RP0
movf PORTD,0
movwf lcdfiag ;讀入狀態(tài)并查詢
btfss lcdfiag,5 ;判是否關(guān)閉
gogo Disoff
return
Cler ;清屏
movlw 0xb8 ;設(shè)置頁(yè)地址代碼
movwf pageadd
movlw 0x04
movwf pagenum ;設(shè)置總頁(yè)數(shù)
clr1 movf pageadd,0
call Cwe
movlw 0x50 ;設(shè)置總列數(shù)
movwf clmsum ;80或60列
movlw 0x00
movwf clmadd ;設(shè)置起始列
clr2 movlw 0x00
call Dwe ;寫入00H
clar decfsz clmsum,1 ;本頁(yè)未清完
goto pageadd,1 ;頁(yè)號(hào)增1
decfsz pagenum,1 ;4頁(yè)未清完
goto clr1 ;返回繼續(xù)
return
有了以上的通用子程序,就可以構(gòu)造出各種顯示程序,如字符、漢字、曲線等。當(dāng)然,在這些程序執(zhí)行前必須對(duì)液晶進(jìn)行初始化。初始化的順序?yàn)椋宏P(guān)顯示→正常顯示驅(qū)動(dòng)設(shè)置→占空比設(shè)置→復(fù)位→ADC選擇→清屏→開顯示。程序如下:
初始化子程序
Lcdinit
call Disoff ;關(guān)顯示
movlw 0xa4 ;靜態(tài)顯示驅(qū)動(dòng)
call Cwe
movlw 0xe2 ;復(fù)位
call Cwe
movlw 0xa0 ;ADC選擇正常輸出
call Cwe
movlw 0x9 ;占空比為1/32
call Cwe
call Cler ;清零
call Disp ;開顯示
return
對(duì)于字符、漢字和曲線顯示的原理是類似的。它們都是以字節(jié)為單位進(jìn)行顯示。關(guān)鍵在于形成字模庫(kù)時(shí)必須保證每個(gè)上字節(jié)數(shù)據(jù)的最高位是與每一列最下面一個(gè)點(diǎn)相對(duì)應(yīng),最低位與每一列最上面點(diǎn)相對(duì)應(yīng)。當(dāng)然,這可以用專門的軟件來生成相應(yīng)的代碼,然后再將這些代碼逐字節(jié)地寫到相應(yīng)的頁(yè)和列。
結(jié)束語(yǔ)
PIC單片機(jī)與液晶模塊的接口只在硬件上滿足液晶模塊的接口要求,軟件上能夠模擬出要求的時(shí)序,并且初始化正確后,就可以隨心所欲地顯示信息了。以上接口電路和程序在PIC試驗(yàn)板上調(diào)試通過,可作為其他單片機(jī)與LCD接口的參考。
評(píng)論