內(nèi)含標(biāo)準(zhǔn)字庫(kù)的中文液晶模塊OCMJ5X10
關(guān)鍵詞:圖形液晶模塊 中文字庫(kù) 單片機(jī)
引 言
1 概 述
由于圖形點(diǎn)陣液晶顯示模塊具有顯示信息豐富(可顯示漢字、字符、曲線、圖形)、功耗低、體積小、質(zhì)量輕、壽命長(zhǎng)、不產(chǎn)生電磁輻射污染等優(yōu)點(diǎn),因而是單片機(jī)系統(tǒng)中理想的顯示器件。近年來(lái)被廣泛應(yīng)用于單片機(jī)控制的智能儀器儀表、工業(yè)控制領(lǐng)域、通信器材和家用電器中。目前,國(guó)內(nèi)在單片機(jī)系統(tǒng)中用于中文顯示時(shí),使用的液晶顯示模塊主要存在以下幾方面的不足。
?、?占用ROM空間大。以圖形方式顯示漢字,每個(gè)漢字將占用32字節(jié)的ROM空間,因此限制了顯示漢字字符的數(shù)量。此點(diǎn)對(duì)內(nèi)部Flash閃存數(shù)量較小的單片機(jī),影響尤為嚴(yán)重。
?、?與單片機(jī)的硬件接口電路復(fù)雜。該類型模塊除使用8根數(shù)據(jù)線外,尚需使用片選、寄存器選擇、讀/寫(xiě)選擇、使能控制等控制線,使得對(duì)單片機(jī)的硬件資源占用較為嚴(yán)重。
?、?接口時(shí)序復(fù)雜,軟件編程繁復(fù)。
上述的幾點(diǎn)內(nèi)容限制了液晶顯示技術(shù)在單片機(jī)系統(tǒng)中的應(yīng)用。
這里介紹的OCMJ5X10是160×80點(diǎn)陣的中文圖文液晶圖形顯示器模塊。該模塊的內(nèi)部由于含有國(guó)標(biāo)一級(jí)簡(jiǎn)體字庫(kù),使得漢字的顯示異常方便;同時(shí),該模塊與單片機(jī)的硬件接口除數(shù)據(jù)總線外,僅使用了REQ/BUSY兩根握手信號(hào)線,簡(jiǎn)化了與單片機(jī)的硬件接口電路設(shè)計(jì)。上述特點(diǎn)對(duì)軟件、硬件資源均十分緊張的單片機(jī)系統(tǒng)來(lái)說(shuō)是十分重要的。
圖1 OCMJ5X10寫(xiě)漢字時(shí)序圖
2 主要特點(diǎn)及引腳定義
以下是OCMJ5X10中文液晶顯示模塊的主要特性。
① OCMJ5X10中文液晶顯示器模塊內(nèi)含 GB 2312 16×16點(diǎn)陣國(guó)標(biāo)一級(jí)簡(jiǎn)體漢字和 ASCII 8×8(半高)及8×16(全高)點(diǎn)陣英文字庫(kù)。用戶輸入?yún)^(qū)位碼或 ASCII 碼即可實(shí)現(xiàn)文本顯示。
② OCMJ5X10中文液晶顯示模塊也可用作一般的點(diǎn)陣圖形顯示器,提供位點(diǎn)陣和字節(jié)點(diǎn)陣兩種圖形顯示功能。用戶可在指定的屏幕位置上以點(diǎn)為單位或以字節(jié)為單位進(jìn)行圖形顯示。完全兼容一般的圖形點(diǎn)陣模塊。
③ OCMJ5X10中文液晶顯示模塊可以實(shí)現(xiàn)漢字、ASCII 碼、點(diǎn)陣圖形和變化曲線的同屏顯示,并可通過(guò)字節(jié)點(diǎn)陣圖形方式造字。
④ OCMJ5X10中文液晶顯示模塊具有上/下/左/右移動(dòng)當(dāng)前顯示屏幕及清除屏幕的命令,一改傳統(tǒng)的使用大量的設(shè)置命令進(jìn)行初始化的方法。OCMJ5X10 中文模塊所有的設(shè)置初始化工作都是在上電時(shí)自動(dòng)完成的,實(shí)現(xiàn)了“即插即用”;同時(shí),保留了一條專用的復(fù)位線供用戶選擇使用,可對(duì)工作中的模塊進(jìn)行軟件或硬件強(qiáng)制復(fù)位。規(guī)劃整齊的10個(gè)用戶接口命令代碼,非常容易記憶。標(biāo)準(zhǔn)用戶硬件接口采用REQ/BUSY 握手協(xié)議,簡(jiǎn)單可靠。
⑤ OCMJ5X10中文液晶顯示模塊使用+5V單電源,同時(shí)由模塊內(nèi)部提供顯示驅(qū)動(dòng)負(fù)電壓,簡(jiǎn)化了系統(tǒng)電源的設(shè)計(jì)。該模塊還具有LED背光源。
OCMJ5X10中文圖文液晶顯示器的引腳說(shuō)明如表1所列。
表1 OCMJ5X10引腳說(shuō)明
引 腳 | 名 稱 | 方 向 |
說(shuō) 明 |
1 | VLED- | I | 背光源負(fù)極(LED-OV) |
2 | VLED+ | I | 背光源正極(LED+5V) |
3 | VSS | I | 地 |
4 | VDD | I | (+5V) |
5~12 | DB0~DB7 | I | 數(shù)據(jù)0~7 |
13 | BUSY | O | =1,已收到數(shù)據(jù)并正在處理中; =0,模塊空閑,可接收數(shù)據(jù) |
14 | REQ | I | 請(qǐng)求信號(hào),高電平有效 |
15 | RES | I | 復(fù)位信號(hào),低電平有效 |
16 | NC | ||
17 | RT1 | LCD灰度調(diào)整,外接電阻端 | |
18 | RT2 | LCD灰度調(diào)整,外接電阻端 |
3 硬件接口協(xié)議及接口時(shí)序
OCMJ5X10模塊與CPU的接口除了使用DB0~DB7口8根數(shù)據(jù)線外,僅使用了REQ和BUSY兩根控制線,構(gòu)成請(qǐng)求/應(yīng)答(REQ/BUSY)握手方式,省略了傳統(tǒng)模塊接口方式的片選、讀寫(xiě)控制、指令/數(shù)據(jù)選擇、使能控制等控制線,從而使硬件接口及軟件時(shí)序變得非常簡(jiǎn)單。在硬件資源十分緊張的應(yīng)用系統(tǒng)中,也可采用REQ單線延時(shí)控制方式,從而把硬件資源占用降至最低。接口協(xié)議如下:當(dāng)BUSY線為高電平時(shí)(BUSY =1),表示模塊忙于內(nèi)部處理,不能接收用戶命令;而B(niǎo)USY為低電平時(shí)(BUSY =0),表示模塊空閑,等待接收用戶命令。CPU可在BUSY為低后的任意時(shí)刻開(kāi)始發(fā)送命令。首先,把用戶命令的當(dāng)前字節(jié)放到數(shù)據(jù)線上,接著發(fā)送高電平REQ 信號(hào),通知模塊,請(qǐng)求處理當(dāng)前數(shù)據(jù)線上的命令或數(shù)據(jù)。模塊在收到外部的REQ高電平信號(hào)后,立即讀取數(shù)據(jù)線上的命令或數(shù)據(jù),同時(shí)將應(yīng)答線BUSY變?yōu)楦唠娖?,表明模塊已收到數(shù)據(jù)并正在忙于對(duì)此數(shù)據(jù)的內(nèi)部處理。此時(shí),用戶對(duì)模塊的寫(xiě)操作已經(jīng)完成,可以撤消數(shù)據(jù)線上的信號(hào)并可做模塊顯示以外的其它工作,也可不斷地查詢BUSY是否為低。如果BUSY =0,說(shuō)明模塊對(duì)用戶的寫(xiě)操作已經(jīng)執(zhí)行完畢,可以再送下一個(gè)數(shù)據(jù)。如向模塊發(fā)出一個(gè)完整的顯示漢字的命令,包括顯示坐標(biāo)及漢字代碼在內(nèi)共需5個(gè)字節(jié),模塊在接收到最后一個(gè)字節(jié)后,才開(kāi)始執(zhí)行整個(gè)命令的內(nèi)部操作;因此,最后一個(gè)字節(jié)的應(yīng)答B(yǎng)USY 高電平(BUSY =1)持續(xù)時(shí)間較長(zhǎng)。這里以寫(xiě)入漢字命令的時(shí)序?yàn)槔?,給出 圖1所示的OCMJ5X10時(shí)序圖,對(duì)應(yīng)的具體時(shí)間參數(shù)說(shuō)明如表2所列。
表2 OCMJ5X10模塊時(shí)間參數(shù)
編 號(hào) | 參數(shù)名稱 | 最小值 | 最大值 |
說(shuō) 明 |
1 | tr/μs | 0.4 | - | 數(shù)據(jù)線上數(shù)據(jù)穩(wěn)定時(shí)間 |
2 | tb/μs | 2 | 20 | 最大模塊響應(yīng)時(shí)間 |
3 | trt/μs | 11 | - | 最小REQ保持時(shí)間 |
4 | ts1/μs | 20 | 45 | 最大數(shù)據(jù)接收時(shí)間 |
5 | ts2/ms | - | 30 | 最大命令指令處理時(shí)間 |
4 用戶命令
OCMJ5X10模塊共有3類10條命令,每條命令分為操作碼和操作數(shù)兩部分,操作數(shù)為十六進(jìn)制數(shù)。下面介紹該模塊的用戶命令。
(1)顯示國(guó)標(biāo)漢字
命令格式 F0 XX YY QQ WW
XX:以漢字為單位的屏幕行坐標(biāo)值。
YY:以漢字為單位的屏幕列坐標(biāo)值。
QQ WW:坐標(biāo)位置上要顯示的GB 2312漢字區(qū)位碼。
OCMJ5X10模塊由于內(nèi)部含有中文字庫(kù),因此中文字符的顯示非常簡(jiǎn)單,只需給出該漢字的區(qū)位碼即可顯示該字。區(qū)位碼表可參見(jiàn)GB2312字符集。
(2)顯示8×8 ASCII字符
命令格式 F1 XX YY AS
該命令為4字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為0.8ms,ts2= 0.8ms)。
XX:以ASCII碼為單位的屏幕行坐標(biāo)值。
YY:以ASCII碼為單位的屏幕列坐標(biāo)值。
AS:坐標(biāo)位置上要顯示的ASCII 字符碼。
(3)顯示8×16 ASCII字符
命令格式 F9 XX YY AS
操作數(shù)意義同上。
(4)顯示位點(diǎn)陣
命令格式 F2 XX YY
該命令為3字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為0.1ms,ts2= 0.1ms)。
(5)顯示字節(jié)點(diǎn)陣
命令格式 F3 XX YY BT
該命令為4字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為0.1ms,ts2= 0.1ms)。
(6)清 屏
命令格式 F4
該命令為單字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為11ms,ts2=11ms),其功能為將屏幕清空。
(7)上 移
命令格式 F5
該命令為單字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為25ms,ts2=25ms),其功能為將屏幕向上移動(dòng)一個(gè)點(diǎn)陣行。
(8)下 移
命令格式 F6
該命令為單字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為30ms,ts2=30ms),其功能為將屏幕向下移動(dòng)一個(gè)點(diǎn)陣行。
(9)左 移
命令格式 F7
該命令為單字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為12ms,ts2=12ms),其功能為將屏幕向左移動(dòng)一個(gè)點(diǎn)陣行。
(10)右 移
命令格式 F8
該命令為單字節(jié)命令(最長(zhǎng)執(zhí)行時(shí)間為12ms,ts2=12ms),其功能為將屏幕向右移動(dòng)一個(gè)點(diǎn)陣行。
圖2 OCMJ5X10液晶顯示模塊與AT89C52單片機(jī)的接口電路
5 具體應(yīng)用
由于OCMJ5X10內(nèi)部具有中文字庫(kù),且使用了簡(jiǎn)單的兩線握手協(xié)議,因而將其應(yīng)用在嵌入式系統(tǒng)中,可簡(jiǎn)化顯示電路的硬件接口設(shè)計(jì)及軟件編程。雖然模塊與單片機(jī)之間數(shù)據(jù)的傳輸采用并行模式,占用單片機(jī)系統(tǒng)的硬件資源相對(duì)較多,但是相應(yīng)顯示軟件的編制卻要比采用串行接口模式的中文字庫(kù)液晶模塊相對(duì)簡(jiǎn)單。尤其是圖形顯示界面設(shè)計(jì),利用OCMJ5X10提供的顯示字節(jié)點(diǎn)陣命令(線繪圖),可方便、快捷地繪制出顯示圖形。此點(diǎn)在繪圖速度、ROM空間占用等方面優(yōu)于串行接口模式的液晶模塊。下面給出OCMJ5X10在嵌入式系統(tǒng)中的具體應(yīng)用,包括硬件接口電路及軟件編程。
5.1 硬件接口電路
這里以AT89C52單片機(jī)為例,給出OCMJ5X10液晶顯示模塊與單片機(jī)的接口電路。單片機(jī)與模塊采用間接控制方式和REQ/BUSY握手方式。AT89C52的P1.0~P1.7口與模塊的DB0~DB7數(shù)據(jù)線相連,P3.4與模塊BUSY線相連,P3.5與模塊REQ線相連;晶振為12MHz,模塊采用上電自動(dòng)復(fù)位。AT89C52與OCMJ5X10的接口電路如圖2所示。
5.2 顯示軟件
下面給出與上述硬件電路配套的顯示子程序。其包括初始化、顯示漢字、顯示8×16點(diǎn)陣ASCII字符、點(diǎn)繪圖及線繪圖子程序??筛鶕?jù)顯示需要在主程序的相應(yīng)位置調(diào)用,即可實(shí)現(xiàn)相應(yīng)的顯示功能。OCMJ5X10內(nèi)部含有GB 2312一級(jí)字庫(kù),可滿足絕大部分應(yīng)用系統(tǒng)漢字顯示的需要。對(duì)于一級(jí)國(guó)標(biāo)字庫(kù)內(nèi)所沒(méi)有的漢字或需要顯示復(fù)雜圖形時(shí),可通過(guò)調(diào)用繪點(diǎn)及繪線子程序來(lái)實(shí)現(xiàn)任意復(fù)雜漢字或圖形的顯示。
;位定義
BUSY BIT P3.4
REQ BIT P3.5
;數(shù)據(jù)定義
X DATA 30H ;屏幕行坐標(biāo)緩沖區(qū)
Y DATA 31H ;屏幕列坐標(biāo)緩沖區(qū)
DATAH DATA 32H ;顯示值高位
DATAL DATA 33H ;顯示值低位
;初始化子程序
INT: MOV SP,#60H ;設(shè)堆棧
CLR REQ ;請(qǐng)求線清0
SETB BUSY ;將P3.4設(shè)為輸入口
RET
;寫(xiě)模塊子程序
SUB1: JB BUSY ,SUB1 ;確信模塊空閑
MOV P1 , A ;向總線送數(shù)椐
NOP ;等待數(shù)據(jù)總線穩(wěn)定
SETB REQ ;向模塊發(fā)請(qǐng)求命令
WAIT: JNB BUSY,WAIT ;等待模塊響應(yīng)
CLR REQ ;清REQ
RET ;返回
;寫(xiě)漢字程序
HZ: MOV A , #0F0H ;寫(xiě)顯示漢字命令
ACALL SUB1
MOV A , X
ACALL SUB1 ;寫(xiě)屏幕行坐標(biāo)值
MOV A , Y
ACALL SUB1 ;寫(xiě)屏幕列坐標(biāo)值
MOV A , DATAH
ACALL SUB1 ;寫(xiě)區(qū)位碼高位
MOV A , DATAL
ACALL SUB1 ;寫(xiě)區(qū)位碼低位
RET
;寫(xiě)8×16 ASCII碼程序
ASC2:MOV A , #0F9H ;寫(xiě)顯示8×16 ASCII
ACALL SUB1 ;字符命令
MOV A , X
ACALL SUB1 ;寫(xiě)屏幕行坐標(biāo)值
MOV A , Y
ACALL SUB1 ;寫(xiě)屏幕列坐標(biāo)值
MOV A , DATAL
ACALL SUB1 ;寫(xiě)字符ASCII碼
RET
;點(diǎn)繪圖子程序
HD: MOV A , #0F2H;寫(xiě)顯示位點(diǎn)陣命令
ACALL SUB1
MOV A , X ;寫(xiě)點(diǎn)屏幕行坐標(biāo)值
ACALL SUB1
MOV A , Y ;寫(xiě)點(diǎn)屏幕列坐標(biāo)值
ACALL SUB1
RET
;線繪圖子程序
HX: MOV A , #0F3H;寫(xiě)顯示位點(diǎn)陣命令
ACALL SUB1
MOV A , X ;寫(xiě)點(diǎn)屏幕行坐標(biāo)值
ACALL SUB1
MOV A , Y ;寫(xiě)點(diǎn)屏幕列坐標(biāo)值
ACALL SUB1
MOV A , DATAL
RET
;清屏程序
CLR: MOV A , #0F4H ;寫(xiě)清屏命令
ACALL SUB1
RET
結(jié) 語(yǔ)
利用OCMJ5X10中文圖文液晶模塊相對(duì)簡(jiǎn)單的硬件接口及簡(jiǎn)單的用戶命令,可為嵌入式系統(tǒng)設(shè)計(jì)出顯示信息量大且顯示信息豐富的全中文人機(jī)界面,避免了傳統(tǒng)液晶模塊中文圖形顯示界面復(fù)雜的硬件接口設(shè)計(jì)及軟件編程。該模塊為嵌入式系統(tǒng)人機(jī)界面設(shè)計(jì)提供了一種較好的解決方案。