新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F877單片機(jī)的圖形液晶顯示模塊接口技術(shù)

PIC16F877單片機(jī)的圖形液晶顯示模塊接口技術(shù)

作者: 時(shí)間:2012-01-14 來源:網(wǎng)絡(luò) 收藏

  引言

  由于液晶顯示器(LCD)具有功耗低、體積小、質(zhì)量輕、超薄等其他顯示器無法比擬的優(yōu)點(diǎn),它廣泛用于各種智能型儀器和低功耗電子產(chǎn)品中。點(diǎn)陣式(或圖形式) LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線及漢字,并且可以實(shí)現(xiàn)屏幕上下左右滾動、動畫、閃爍、文本特征顯示等功能,用途十分廣泛。本文在簡介液晶顯示器MG-12232的驅(qū)動器SED1520F0A的結(jié)構(gòu)、功能的基礎(chǔ)上,介紹了單片機(jī)的LCD硬件接口電路和軟件編程特點(diǎn)。

  一、與MG-12232的硬件接口電路

  1.SED1520F0A的接口信號

  SED1520F0A屬行列驅(qū)動及控制合一的小規(guī)模液晶顯示驅(qū)動芯片,電路簡單,經(jīng)濟(jì)實(shí)用,內(nèi)含振蕩器,只須外接振蕩電阻即可工作。模塊工作的穩(wěn)定性好。SED1520F0A與微處理器的接口信號如下。

  DB0~DB7:數(shù)據(jù)總線。
  A0:數(shù)據(jù)/指令選擇信號。A0=1表示出現(xiàn)在數(shù)據(jù)總線上的是數(shù)據(jù);A0=0,表示出現(xiàn)在數(shù)據(jù)總線上的是指令或讀出的狀態(tài)。
  RES:接口時(shí)序類型選擇。RES=1為M6800時(shí)序,其操作信號是E和R/W;RES=0為Intel8080時(shí)序,操作信號是RD和WR。
  RD(E):在Intel 8080時(shí)序時(shí)為讀,低電平有效;在M6800時(shí)序時(shí)為使能信號,是個(gè)正脈沖,在下降沿處為寫操作,在高電平時(shí)為讀操作。
  WR(R/W):在Intel 8080時(shí)序時(shí)為寫,低電平有效;在M6800時(shí)序時(shí)為讀、寫選擇信號,R/W=1為讀,R/W=0為寫。

  SED1520F0A與兩種總線的接口信號和時(shí)序的詳細(xì)資料見液晶顯示模塊使用手冊。

  2.MG-12232模塊的引腳說明

  MG-12232模塊共有18個(gè)引腳,各引腳定義如表1所列。

  表1 MG-12232模塊的引腳定義

PIC16F877單片機(jī)的圖形液晶顯示模塊接口技術(shù)

  3.與MG-12232模塊的接口電路

  現(xiàn)以功能強(qiáng)、價(jià)格低的PIC16F877為例說明 PIC與MG-12232模塊的硬件接口電路。其接口控制時(shí)序采用M6800操作時(shí)序,這樣 SED1520F0A引出的控制信號R/W,A0,E1和E2由PIC16F877的I/O端口portb的4個(gè)腳控制。接口電路如圖1所示。圖中利用可調(diào)電阻R3實(shí)現(xiàn)液晶的背光亮度調(diào)節(jié),直接用電阻R2驅(qū)動液晶的背光燈。由于PIC16F877的位操作指令豐富,所以用軟件不難模擬出M6800操作時(shí)序。

PIC16F877單片機(jī)的圖形液晶顯示模塊接口技術(shù)

  二、接口軟件編程

  1.SED1520F0A指令集

  SED1520F0A液晶顯示驅(qū)動器有13條指令。表2所列的以與M6800系列MPU接口為例(RES=1)而總結(jié)出的指令。

  表2 SED1520F0A指令集

PIC16F877單片機(jī)的圖形液晶顯示模塊接口技術(shù)

  2.MG-12232模塊的編程

  下面是以圖1的接口電路為例編寫的只含E1主方式的程序(表1中E1=1,E2=0)。E2從方式(表1中E1=0,E2=1)的程序類推。

  在系統(tǒng)程序的初始化部分應(yīng)該對程序中用到的寄存器和臨時(shí)變量作說明,如:

  lcdfial equ 0x20 ;存放標(biāo)志位
  sbdata equ lcdflag+1 ;存放顯示數(shù)據(jù)
  clmadd equ sbdata+1 ;存放列地址
  pageadd equ clmadd+1 ;存放頁地址
  pagenum equ pageadd+1 ;存放總頁數(shù)
  clmsum equ pagenum+1 ;存放總列數(shù)
  intscode equ clmsum+1 ;存放指令代碼
  讀液晶顯示器狀態(tài)子程序
  Ste bsf STATUS,RP0;選中存儲區(qū)1
  movlw 0xff
  movwf TRISD ;設(shè)置D口為輸入
  bcf STATUS,RP0;選中存儲區(qū)0
  bsf PORTB,4 ;E1=1
  bsf PORTB,1 ;R/W=1
  bcf PORTB,0 ;A0=0
  Tae movf PORTD,0 ;將狀態(tài)字讀入W中
  movwf lcdfiag ;將W中的狀態(tài)字存入lcdfiag中
  btfsc lcdflag,7 ;判斷D7位是否為0
  goto Tae ;D7=1,為忙狀態(tài)
  return
  對液晶顯示器發(fā)指令子程序(指令保存在W寄存器中)
  Cwe
  Movwf intscode ;指令暫存intscode
  Bcf PORTB,1 ;R/W=0
  Bcf PORTB,0 ;A0=0
  movf intscode,0
  movwf PORTD
  bcf PORTB,4 ;E1=0寫入指令
  return
  對液晶顯示器寫數(shù)據(jù)子程序(數(shù)據(jù)保存在W寄存器中)
  Dwe
  Movwf sbdata ;數(shù)據(jù)暫存sbdata
  Movf clmadd,0
  Call Cwe ;設(shè)置列地址
  Call Ste
  Bsf STATUS,RP0
  clrf TRISD ;設(shè)置D口為輸出方式
  bcf STATUS,RP0
  bsf PORTB,4 ;E1=1
  bcf PORTB,1 ;R/W=0
  bsf PORTB,0 ;A0=1
  movf sbdata,0
  movwf PORTD
  bcf PORTB,4 ;E1=0,寫入數(shù)據(jù)
  call Ste
  inct clmadd,1 ;列地址加1
  return
  液晶顯示器開顯示、關(guān)顯示和清屏子程序
  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è)置頁地址代碼
  movwf pageadd
  movlw 0x04
  movwf pagenum ;設(shè)置總頁數(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 ;本頁未清完
  goto pageadd,1 ;頁號增1
  decfsz pagenum,1 ;4頁未清完
  goto clr1 ;返回繼續(xù)
  return

  有了以上的通用子程序,就可以構(gòu)造出各種顯示程序,如字符、漢字、曲線等。當(dāng)然,在這些程序執(zhí)行前必須對液晶進(jìn)行初始化。初始化的順序?yàn)椋宏P(guān)顯示→正常顯示驅(qū)動設(shè)置→占空比設(shè)置→復(fù)位→ADC選擇→清屏→開顯示。程序如下:

  初始化子程序
  Lcdinit
  call Disoff ;關(guān)顯示
  movlw 0xa4 ;靜態(tài)顯示驅(qū)動
  call Cwe
  movlw 0xe2 ;復(fù)位
  call Cwe
  movlw 0xa0 ;ADC選擇正常輸出
  call Cwe
  movlw 0x9 ;占空比為1/32
  call Cwe
  call Cler ;清零
  call Disp ;開顯示
  return

  對于字符、漢字和曲線顯示的原理是類似的。它們都是以字節(jié)為單位進(jìn)行顯示。關(guān)鍵在于形成字模庫時(shí)必須保證每個(gè)上字節(jié)數(shù)據(jù)的最高位是與每一列最下面一個(gè)點(diǎn)相對應(yīng),最低位與每一列最上面點(diǎn)相對應(yīng)。當(dāng)然,這可以用專門的軟件來生成相應(yīng)的代碼,然后再將這些代碼逐字節(jié)地寫到相應(yīng)的頁和列。

  結(jié)束語

  PIC單片機(jī)與液晶模塊的接口只在硬件上滿足液晶模塊的接口要求,軟件上能夠模擬出要求的時(shí)序,并且初始化正確后,就可以隨心所欲地顯示信息了。

  以上接口電路和程序在PIC試驗(yàn)板上調(diào)試通過,可作為其他單片機(jī)與LCD接口的參考。



關(guān)鍵詞: PIC16F877 圖形液晶顯示

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉