機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
單片機和圖形液晶顯示器接口應用技術
單片機和圖形液晶顯示器接口應用技術
 更新時間:2008-8-18 13:23:14  點擊數(shù):27
【字體: 字體顏色

  for(j=0;j<16;j++) buf[j]=peekb(ascii_es,ascii_offset+j); /*讀16字節(jié)點陣數(shù)據(jù)*/
  for(m=0;m<16;m++) /*點陣數(shù)據(jù)轉(zhuǎn)換成LCD格式數(shù)據(jù)*/
  { if(m<8) { beginbyte= 7; shiftn=7;}
  else { beginbyte=15; shiftn=15;}
  for(j=0;j<8;j++)
  ascii8x16[m]=(ascii8x16[m]+ (buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;
  }

  也可選用UCDOS的ASC16文件做字模庫。ASC16文件的字符為8×16點陣。所有字符按照ASCII值從小到大升序排列。計算字符首地址的公式:字符首地址=字符的ASCII碼值×16+字模庫首地址。

  (2) 建立所用到的16×16點陣字模庫。

  漢字字符可選用UCDOS的HZK16文件做字模庫。HZK16文件的字符為16×16點陣。所有字符按照區(qū)位碼從小到大升序排列。計算漢字字符首地址的公式如下:漢字首地址=((區(qū)碼-1)×94+位碼-1)×32。作者用C語言編寫的讀取UCDOS點陣字庫字模程序,完成字模讀取、數(shù)據(jù)重新排列,并按MCS-51匯編程序的要求寫成相應格式的文本文件。

  p=((quma-1)*94+weima-1)*32;
  cclibfile=fopen("HZK16","rb");
  fseek(cclibfile,(long)p,SEEK_SET);
  fread(buf,sizeof(unsigned char),32,cclibfile); /*讀32字節(jié)點陣數(shù)據(jù)*/
  for(m=0;m<32;m++){ /*點陣數(shù)據(jù)轉(zhuǎn)換成LCD格式數(shù)據(jù)*/
  if(m<8) { beginbyte=14; shiftn=7;}
  else if( m>= 8 && m<16 ) { beginbyte=15; shiftn=15;}
  else if( m>=16 && m<24 ) { beginbyte=30; shiftn=23;}
  else { beginbyte=31; shiftn=31;}
  for(j=0;j<8;j++)
  hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] >>(shiftn-m))&0x01)<<1;
  }

  (3) 常用圖形(如產(chǎn)品商標等)的點陣圖形的建立。

  對已有的圖形可采用掃描儀進行掃描,然后用圖形處理軟件進行處理,再將BMP格式文件轉(zhuǎn)換成MCS-51的匯編文件的格式。

  以上所有的字模數(shù)據(jù)都存放在單片機W78E58的程序存儲器中,如用到的漢字、圖形較多,可選用較大容量的程序存儲器。

  通用子程序:通用子程序分左半屏、右半屏寫指令代碼子程序和寫顯示數(shù)據(jù)子程序。液晶顯示驅(qū)動器HD16202內(nèi)部有個忙標志寄存器,當BF=1時,表示內(nèi)部操作正在運行,不能接受外部數(shù)據(jù)或指令。下面子程序中設指令代碼寄存器為COMM,數(shù)據(jù)寄存器為DATA。

  (COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*數(shù)據(jù)寄存器*/)

  (1) 左半屏寫指令子程序

  WR_CMD1: MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/
  WAIT1: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
  JB ACC.7,WAIT1 ;/*判忙標志BF,如BF=1忙,等待*/
  MOV DPTR,#CWADR1 ;/*寫指令字口地址*/
  MOV A,COMM ;/*取指令代碼*/
  MOVX @DPTR,A ;/*寫指令代碼*/
  RET

  (2)左半屏寫數(shù)據(jù)子程序

  WR_DATA1:MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/
  WAIT11: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
  JB ACC.7,WAIT11 ;/*判忙標志BF,如BF=1忙,等待*/
  MOV DPTR,#DWADR1 ;/*寫數(shù)據(jù)字口地址*/
  MOV A,DATA ;/*取數(shù)據(jù)/
  MOVX @DPTR,A ;/*寫數(shù)據(jù)*/
  RET

  (3)右半屏寫指令子程序WR_CMD2和右半屏寫數(shù)據(jù)子程序WR_DATA2的編制同左半屏子程序相同,只是對應口地址不同。

  8X16字符顯示子程序:MGLS12864液晶顯示屏由二片HD61202控制,LCD顯示中應盡量避免一個字符一半在左半屏顯示,另一半在右半屏顯示的情況。設列地址寄存器為COLUMN,頁地址寄存器為PAGE,要顯示的字符代碼寄存器為ASCIICODE,W78E58內(nèi)RAM28H-RAM37H共16個字節(jié)存放8×16的點陣數(shù)據(jù),生成的8×16點陣庫文件存放在單片機W78E58存儲器中的首地址定義為ASCII_DOT816。
DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16點陣庫首地址MOV A,ASCIICODE ;顯示字符代碼ASCIICODE MOV B,#16 ;每個字符點陣占16個字節(jié) MUL AB ;計算顯示字符在字庫的首地址

  ADD A,DPL
  MOV DPL,A
  MOV A,DPH
  ADDC A,B
  MOV DPH,A
  ;
  MOV R0,#28H ;將點陣數(shù)據(jù)放到RAM28H-RAM37H
  MOV R2,#00H
  LP_MOVDOT16: MOV A,R2
  MOVC A,@A+DPTR
  MOV @R0,A ;如要將字符反顯(黑底白字),則讀出點
  INC R0 ;陣數(shù)據(jù)后求反放入單片機的RAM中
  INC R2
  CJNE R2,#16,LP_MOVDOT16
  ;
  PUSH COLUMN
  MOV A,COLUMN ;顯示列數(shù)COLUMN是否在右半屏
  CJNE A,#64,ASCII_IF64
  ASCII_IF64: JNC ASCII_YGE64
  MOV DPTR,#CWADR1 ;在左半屏時,選擇左半屏寫指令代碼地址
  CLR FIRST0_SECOND1_BIT ;左半屏列數(shù)標志BIT=0
  SJMP ALL_COLUMN
  ASCII_YGE64: CLR C
  SUBB A,#64
  MOV COLUMN,A
  MOV DPTR,#CWADR2 ;在右半屏時,選擇右半屏寫指令代碼地址
  SETB FIRST0_SECOND1_BIT ;右半屏列數(shù)標志BIT=1
  ALL_COLUMN: MOV A,PAGE
  ADD A,#10111000B ;設置頁地址命令
  MOVX @DPTR,A
  MOV A,COLUMN ;設置列地址命令
  ADD A,#01000000B
  MOVX @DPTR,A
  MOV DPTR,DWADR1 ;根據(jù)左右半屏列數(shù)標志,選擇寫顯示數(shù)據(jù)地址
  JNB FIRST0_SECOND1_BIT,ALLMOV1
  MOV DPTR,DWADR2
  ALLMOV1: MOV R0,#28H
  MOV_8BYTE1: MOV A,@R0
  MOVX @DPTR,A ;寫顯示數(shù)據(jù)
  NOP
  INC R0
  CJNE R0,#30H,MOV_8BYTE1
  ;
  MOV DPTR,#CWADR1
  JNB FIRST0_SECOND_BIT,ALLMOV2
  MOV DPTR,#CWADR2
  ALLMOV2: MOV A,PAGE
  INC A ;頁地址加1
  ADD A,#10111000B
  MOVX @DPTR,A ;設置頁地址命令
  MOV A,COLUMN ;設置列地址命令
  ADD A,#01000000B
  MOVX @DPTR,A
  MOV DPTR,DWADR1;根據(jù)左右半屏列數(shù)標志,選擇寫顯示數(shù)據(jù)地址
  JNB FIRST0_SECOND1_BIT,ALLMOV3
  MOV DPTR,DWADR2
  ALLMOV3: MOV R0,#30H
  MOV_8BYTE2: MOV A,@R0
  MOVX @DPTR,A ;寫顯示數(shù)據(jù)
  INC R0
  CJNE R0,#38H,MOV_8BYTE2
  ;
  POP COLUMN
  RET

  16×16漢字顯示子程序:16×16漢字顯示子程序與8X16字符顯示子程序基本相同。不同在于每次寫32字節(jié)顯示數(shù)據(jù),可定義W78E58內(nèi)RAM28H-RAM47H共32個字節(jié)存放16×16的點陣數(shù)據(jù),生成的16×16點陣庫文件存放在單片機W78E58存儲器中的首地址定義為HZK_DOT16X16。具體程序略,讀者如需要可來函索取。

  結語

  本文在介紹液晶顯示模塊與單片機接口的同時,采用了新穎的改造方案以解決應用中的問題。由于節(jié)省了單片機口線,使系統(tǒng)資源得到了充分利用?娠@示漢字、字符和圖形,使人機界面更為美觀、易讀。其它如8×8西文點陣字庫及圖形的建立和顯示可參照上面介紹的方法來編寫程序。由于各種液晶顯示模塊的接口基本相同,因此本文所討論的內(nèi)容也適用于其它型號的液晶顯示模塊。液晶顯示較其它顯示終端有許多優(yōu)點:功耗低且字型美觀、可用集成電池供電,便于攜帶等。相信它將得到越來越廣泛的使用。

  • 上一篇: 液晶顯示控制器T6963C與單片機的接口及編程
  • 下一篇: 多功能串行LED顯示驅(qū)動器MAX7219
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1