《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 單片機和圖形液晶顯示器接口應用技術
單片機和圖形液晶顯示器接口應用技術
摘要: 本文介紹了點陣式液晶顯示器MGLS12864 與單片機的接口及編程的方法,同時介紹了創建8×16 字符和16×16 點陣漢字的方法,及常用的字符顯示和漢字顯示程序。
Abstract:
Key words :

引言

       液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄等許多其它顯示器無法比擬的優點,近幾年來被廣泛用于單片機控制的智能儀器、儀表和低功耗電子產品中。LCD 可分為段位式LCD、字符式LCD 和點陣式LCD。其中,段位式LCD 和字符式LCD 只能用于字符和數字的簡單顯示,不能滿足圖形曲線和漢字顯示的要求;而點陣式LCD 不僅可以顯示字符、數字,還可以顯示各種圖形、曲線及漢字,并且可以實現屏幕上下左右滾動,動畫功能,分區開窗口,反轉,閃爍等功能,用途十分廣泛。本文介紹了點陣式液晶顯示器MGLS12864 與單片機的接口及編程的方法,同時介紹了創建8×16 字符和16×16 點陣漢字的方法,及常用的字符顯示和漢字顯示程序。

       硬件設計

       這里著重介紹液晶顯示器與單片機的接口技術。有關

 

MGLS12864 圖形液晶引腳功能及控制器HD61202的接口時序波形,可查看圖形液晶顯示器產品有關手冊。

       單片機可以通過數據總線與控制信號直接采用存儲器訪問形式、I/O 設備訪問形式控制該液晶顯示模塊。本文以華邦公司的W78E58 為例,它是51 系列單片機兼容的微控制器,其內部有32KB 的FLASH EEPROM,用戶編制的程序及需要顯示的英文字母、數字、漢字、曲線和圖形都可以存儲在里面,免去了擴展外部存儲器的麻煩,使得以W78E58 單片機為核心的控制系統電路更簡單。因此十分適用于液晶顯示。

       MGLS12864 與W78E58 單片機接口電路如圖1 所示。該圖采用直接訪問方式,單片機通過低位地址A2控制CSA;A3 控制CSB,以選通液晶顯示屏上各區的控制器HD61202;同時W78E58 用地址A1 作為R/W 信號控制數據總線的數據流向;用地址A0 作為D/I 信號控制寄存器的選擇;E 信號由W78E58 的讀信號/RD 和寫信號/WR 合成產生;另外單片機的復位腳(9 腳)經反相器后連接到液晶顯示器復位腳(17 腳/RST),當單片機上電復位或手動復位時, 液晶顯示器同時也復位;從而實現了W78E58 對內置HD61202圖形液晶顯示器模塊的電路連接。電路中LCD 電源控制端VO 是用來調節顯示屏灰度的,調節該端的電壓,可改變顯示屏字符、圖形的顏色深淺。

       單片機對液晶顯示模塊的操作可分為兩部分,即左半屏和右半屏操作。下面是根據圖1 的連接確定對應左半屏(前64×64)和右半屏(后64×64)操作地址:

       CWADR1 EQU 0004H 左半屏寫指令代碼地址

       DWADR1 EQU 0005H 左半屏寫顯示數據地址

       CRADR1 EQU 0006H 左半屏讀狀態字地址

        DRADR1 EQU 0007H 左半屏讀顯示數據地址

        CWADR2 EQU 0008H 右半屏寫指令代碼地址

        DWADR2 EQU 0009H 右半屏寫顯示數據地址

       CRADR2 EQU 000AH 右半屏讀狀態字地

       DRADR2 EQU 000BH 右半屏讀顯示數據地址

MGLS12864 與W78E58 接口圖

圖1 MGLS12864 與W78E58 接口圖

 

       軟件設計

       液晶控制器HD61202 一共有七條指令,從作用上可分為兩類,顯示狀態設置指令和數據讀/寫操作指令。詳見指令系統可查看圖形液晶顯示器產品有關手冊。顯示起始行設置中L5~L0 為顯示起始行的地址,取值在0-3FH(1-64 行)范圍內。頁面地址設置中P2-P0 為選擇的頁面地址,取值范圍為0-7H,代表1-8 頁。列地址設置中C5-C0 為Y地址計數器的內容,取值在0-3FH(1-64 行)范圍內。

       顯示器上128 點×64 點,每8點為一字節數據,都對應著顯示數據RAM(在HD61202 芯片內),一點對應一個bit,計算機寫入或讀出顯示存儲器的數據代表顯示屏上某一點列上的垂直8 點行的數據。D0 代表最上一行的點數據,D1 為第二行的點數據,…….,D7 為第八行的點數據。該bit=1 時該點則顯示黑點出來,該bit=0 時該點則消失。另外LCD 指令中有-條display ON/OFF 指令,display ON 時顯示RAM 數據對應顯示的畫面;display OFF 則畫面消失,RAM 中顯示數據仍存在。

       點陣字模文件的建立

 

:由于MGLS12864 液晶顯示器沒有內部字符發生器,所以在屏幕上顯示的任何字符、

       漢字等須自己建立點陣字模庫,然后均按圖形方式進行顯示。由于HD61202 顯示存儲器的特性,不能將計算機內的漢字庫和其它字模庫提出直接使用,需要將其旋轉90 度后再寫入。點陣字模庫建立包括以下幾個方面:

       (1) 建立8×16 點陣常用字符、數字、符號字模庫。

       可選用計算機BIOS 中ASCII 的8×16 字模庫,所有字符按照ASCII 值從小到大升序排列。

       asm{mov ax,1130h /*AH=11h—功能調用。裝入字庫至軟字庫 */

       mov bh,6 /*AL=30h 取點陣信息 */

       int 10h /*BH=6 取ROM8X16 點陣指針(VGA) */

       mov ax,es /*出口:ES:BP 指向字庫指針 */

       mov ascii_es,ax

       mov ax,bp

       mov ascii_bp,ax };

       ascii_offset=ascii_bp+16*asciicode;

       for(j=0;j<16;j++) buf[j]=peekb(ascii_es,ascii_offset+j); /*讀16 字節點陣數據*/

       for(m=0;m<16;m++) /*點陣數據轉換成LCD 格式數據*/

       { 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 點陣。所有字符按照區位碼從小到大升序排列。計算漢字字符首地址的公式如下:漢字首地址=((區碼-1)×94+位碼-1)×32。作者用C 語言編寫的讀取UCDOS 點陣字庫字模程序,完成字模讀取、

       數據重新排列,并按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 字節點陣數據*/

       for(m=0;m<32;m++){ /*點陣數據轉換成LCD 格式數據*/

       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) 常用圖形(如產品商標等)的點陣圖形的建立。對已有的圖形可采用掃描儀進行掃描,然后用圖形處理軟件進行處理,再將BMP 格式文件轉換成MCS-51 的匯編文件的格式。

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

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

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

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

       WR_CMD1: MOV DPTR,#CRADR1 ;/*讀狀態字口地址*/        WAIT1: MOVX A,@DPTR ;/* 讀狀態字 */

       JB ACC.7,WAIT1 ;/*判忙標志BF,如BF=1 忙,等待*/

       MOV DPTR,#CWADR1 ;/*寫指令字口地址*/

       MOV A,COMM ;/*取指令代碼*/

       MOVX @DPTR,A ;/*寫指令代碼*/

       RET

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

       WR_DATA1:MOV DPTR,#CRADR1 ;/*讀狀態字口地址*/

 

 

      WAIT11: MOVX A,@DPTR ;/* 讀狀態字 */

       JB ACC.7,WAIT11 ;/*判忙標志BF,如BF=1 忙,等待*/

       MOV DPTR,#DWADR1 ;/*寫數據字口地址*/

       MOV A,DATA ;/*取數據/

       MOVX @DPTR,A ;/*寫數據*/

       RET

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

       8X16 字符顯示子程序:MGLS12864 液晶顯示屏由二片HD61202 控制,LCD 顯示中應盡量避免一個字符一半在左半屏顯示,另一半在右半屏顯示的情況。設列地址寄存器為COLUMN,頁地址寄存器為PAGE,要顯示的字符代碼寄存器為ASCIICODE,W78E58 內RAM28H-RAM37H 共16 個字節存放8×16 的點陣數據,生成的8×16 點陣庫文件存放在單片機W78E58 存儲器中的首地址定義為ASCII_DOT816。

       DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16 點陣庫首地址

       MOV A,ASCIICODE ;顯示字符代碼ASCIICODE

       MOV B,#16 ;每個字符點陣占16 個字節

       MUL AB ;計算顯示字符在字庫的首地址

       ADD A,DPL

       MOV DPL,A

       MOV A,DPH

       ADDC A,B

       MOV DPH,A

       ;MOV R0,#28H ;將點陣數據放到RAM28H-RAM37H

       MOV R2,#00H

       LP_MOVDOT16: MOV A,R2

       MOVC A,@A+DPTR

       MOV @R0,A ;如要將字符反顯(黑底白字),則讀出點

       INC R0 ;陣數據后求反放入單片機的RAM 中

       INC R2

       CJNE R2,#16,LP_MOVDOT16

       ;

       PUSH COLUMN

       MOV A,COLUMN ;顯示列數COLUMN 是否在右半屏

       CJNE A,#64,ASCII_IF64

  

 

     ASCII_IF64: JNC ASCII_YGE64

       MOV DPTR,#CWADR1 ;在左半屏時,選擇左半屏寫指令代碼地址

       CLR FIRST0_SECOND1_BIT ;左半屏列數標志BIT=0

       SJMP ALL_COLUMN

       ASCII_YGE64: CLR C

       SUBB A,#64

       MOV COLUMN,A

       MOV DPTR,#CWADR2 ;在右半屏時,選擇右半屏寫指令代碼地址

       SETB FIRST0_SECOND1_BIT ;右半屏列數標志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 ;根據左右半屏列數標志,選擇寫顯示數據地址

       JNB FIRST0_SECOND1_BIT,ALLMOV1

       MOV DPTR,DWADR2

       ALLMOV1: MOV R0,#28H

       MOV_8BYTE1: MOV A,@R0

       MOVX @DPTR,A ;寫顯示數據

       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;根據左右半屏列數標志,選擇寫顯示數據地址

       JNB FIRST0_SECOND1_BIT,ALLMOV3

       MOV DPTR,DWADR2

       ALLMOV3: MOV R0,#30H

       MOV_8BYTE2: MOV A,@R0

       MOVX @DPTR,A ;寫顯示數據

       INC R0

       CJNE R0,#38H,MOV_8BYTE2

       ;

       POP COLUMN

       RET

       16×16 漢字顯示子程序:16×16 漢字顯示子程序與8X16 字符顯示子程序基本相同。不同在于每次寫32 字

       節顯示數據,可定義W78E58 內RAM28H-RAM47H 共32 個字節存放16×16 的點陣數據,生成的16×16 點陣庫文件存放在單片機W78E58 存儲器中的首地址定義為HZK_DOT16X16。具體程序略,讀者如需要可來函索取。

       結語

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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩精品免费看| 国模精品一区二区三区| 久久精品国产免费| 亚洲欧美综合| 亚洲欧美成人一区二区三区| 日韩天堂在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩免费一区二区三区视频 | 欧美一区三区三区高中清蜜桃| 亚洲制服av| 亚洲欧美制服另类日韩| 午夜精品一区二区三区在线| 亚洲综合色婷婷| 亚洲欧美一区二区视频| 午夜视频在线观看一区二区| 欧美一级网站| 欧美一区二区在线看| 久久av红桃一区二区小说| 欧美在线黄色| 亚洲国产精品久久久久| 91久久久久久久久| 日韩香蕉视频| 亚洲影院色无极综合| 亚洲男女自偷自拍图片另类| 午夜精品福利视频| 欧美在线91| 玖玖玖国产精品| 欧美激情在线狂野欧美精品| 欧美日韩国产欧美日美国产精品| 欧美三级日韩三级国产三级| 国产精品日韩一区二区三区| 国产偷国产偷精品高清尤物| 在线视频国内自拍亚洲视频| 亚洲经典自拍| 亚洲午夜视频在线| 久久国产欧美日韩精品| 最新国产拍偷乱拍精品| 宅男精品视频| 欧美一区久久| 欧美成人免费va影院高清| 欧美日韩高清区| 国产精品美女久久久久久2018| 国产亚洲精品bt天堂精选| 亚洲第一页在线| 一区二区高清视频| 久久激情综合| 亚洲天堂av在线免费观看| 久久精品亚洲精品| 欧美国产欧美综合| 国产精品99久久久久久久vr| 亚洲小视频在线观看| 欧美伊人久久久久久久久影院| 亚洲人体一区| 亚洲欧美日韩天堂一区二区| 久久精品一区二区三区中文字幕 | 美女任你摸久久| 欧美性猛交99久久久久99按摩| 国产日产欧美一区| 亚洲国产黄色片| 亚洲在线视频| 亚洲精品免费在线播放| 亚洲欧美日韩国产| 欧美 日韩 国产精品免费观看| 国产精品成人国产乱一区| 狠狠爱成人网| 亚洲视频免费在线| 亚洲国产婷婷| 午夜精品一区二区三区在线视| 免费一级欧美片在线播放| 国产精品成人一区二区三区吃奶| 狠狠色狠狠色综合系列| 一区二区免费看| 亚洲国产一区二区在线| 亚洲女人天堂av| 欧美成人性生活| 国产视频一区二区在线观看| 亚洲精品乱码久久久久| 久久精品国产一区二区电影| 亚洲综合二区| 欧美麻豆久久久久久中文| 国产综合第一页| 亚洲在线不卡| 亚洲一二三四区| 欧美国产丝袜视频| 国产一区视频网站| 亚洲一区3d动漫同人无遮挡| 99视频+国产日韩欧美| 狼狼综合久久久久综合网| 国产乱码精品一区二区三区不卡 | 激情综合色丁香一区二区| 亚洲天堂av综合网| 一区二区欧美国产| 欧美二区视频| 伊人久久婷婷色综合98网| 亚洲午夜久久久久久久久电影网| a4yy欧美一区二区三区| 免费成人黄色片| 国产综合精品| 欧美一区国产二区| 先锋影音国产一区| 欧美午夜免费影院| 99香蕉国产精品偷在线观看| 日韩一级在线观看| 欧美丰满少妇xxxbbb| 激情久久中文字幕| 久久精品99无色码中文字幕 | 久久青青草原一区二区| 国产手机视频精品| 亚洲欧美国产日韩天堂区| 亚洲女人小视频在线观看| 欧美日本一道本| 亚洲美女视频在线免费观看| 亚洲狼人综合| 亚洲久久在线| 欧美高清在线一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩三级视频| 99国产一区二区三精品乱码| 99精品欧美一区| 欧美—级a级欧美特级ar全黄| 在线观看视频欧美| 亚洲黄页一区| 欧美大片在线观看一区| 亚洲国产精品va在线观看黑人| 亚洲人成77777在线观看网| 久久在线观看视频| 在线成人h网| 日韩亚洲国产欧美| 欧美视频在线不卡| 亚洲视频久久| 久久国产日韩欧美| 尤妮丝一区二区裸体视频| 亚洲国产另类久久精品| 欧美韩日一区| 一本久久综合亚洲鲁鲁五月天| 亚洲欧美一区在线| 国产一区二区激情| 亚洲国产成人午夜在线一区| 欧美高清视频www夜色资源网| 亚洲精品乱码视频| 亚洲欧美精品suv| 国产尤物精品| 亚洲精品女人| 国产精品久久久久久久久免费桃花 | 久久精品30| 在线日韩中文| 亚洲五月六月| 国产午夜精品久久久| 亚洲欧洲另类| 欧美丝袜一区二区| 久久成人免费日本黄色| 欧美 日韩 国产 一区| aa日韩免费精品视频一| 欧美一区二区三区在线视频| 狠狠色综合色综合网络| 日韩午夜av电影| 国产精品推荐精品| 亚洲黄色尤物视频| 国产精品二区三区四区| 久久成人亚洲| 欧美日韩精品一区视频| 性感少妇一区| 欧美大学生性色视频| 亚洲影院高清在线| 免费观看久久久4p| 亚洲午夜精品| 欧美成人午夜影院| 亚洲欧美999| 欧美黑人一区二区三区| 亚洲男人的天堂在线aⅴ视频| 美日韩精品免费观看视频| 一区二区福利| 另类图片国产| 亚洲男人av电影| 欧美激情精品久久久久久黑人| 亚洲欧美电影院| 欧美乱人伦中文字幕在线| 香蕉成人久久| 欧美日韩国产免费观看| 欧美在线不卡| 国产精品sm| 亚洲人成网站在线观看播放| 国产精品久久久久一区| 亚洲激情电影在线| 国产日韩欧美亚洲| 亚洲视频在线一区| 黄色精品在线看| 亚洲欧美日韩国产中文在线| 亚洲激情专区| 久久国产精品网站| 一本色道久久综合亚洲精品小说 | 国产精品乱码妇女bbbb| 亚洲日本va午夜在线电影| 国产精品入口福利| 日韩亚洲欧美高清| 国内精品久久久久久久果冻传媒| 亚洲欧美国产va在线影院| 亚洲激情在线激情| 久久人人看视频| 亚洲一本视频|