摘 要: 在以計(jì)算機(jī)為核心的應(yīng)用系統(tǒng)中,人機(jī)界面必不可少。為解決人機(jī)界面設(shè)計(jì)中存在的用戶操作的便捷性、工程造價(jià)、硬/軟件操作的簡(jiǎn)便性、壓縮硬/軟件規(guī)模等難題,采用字符型液晶模塊設(shè)計(jì)了以MCS?51系列微控制器為CPU的人機(jī)界面的顯示部分。給出了硬件接口的詳實(shí)設(shè)計(jì)以及軟件設(shè)計(jì);并對(duì)用字符型液晶模塊設(shè)計(jì)人機(jī)界面過(guò)程中常見(jiàn)的問(wèn)題進(jìn)行分析,給出解決方法。由于字符型液晶模塊具有性價(jià)比高、硬件接口簡(jiǎn)單、軟件操作靈活方便、顯示內(nèi)容豐富、體積小、低功耗等特點(diǎn),特別適合袖珍儀器、儀表或便攜式設(shè)備等規(guī)模不大的中、小型應(yīng)用系統(tǒng)的開(kāi)發(fā)與研制。
關(guān)鍵詞: 字符型液晶模塊; 人機(jī)界面設(shè)計(jì); 硬件接口設(shè)計(jì); 軟件設(shè)計(jì)
中圖分類號(hào): TN710?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2013)15?0149?04
Application of character type LCD module in human?computer interface design
YU Cheng?jun, XU Bin, CAO Guo?qiang, CHEN Yun?jia, LI Xin?jun
(Unit 93534 of PLA, Tianjin 301716, China)
Abstract: Human?Computer interface is indispensable in the application system with computer as the core. In order to solve the problems of the convenience of user operation, the engineering costs, the convenience of hardware/software operation and control the scale of hardware/software in the design of human?computer interface. The character type LCD module is used to design display part of the man?machine interface which use the MCS?51 microcontroller as CPU. The detail design of the hardware interface and the software design is provided, and the common problems during the design of the human?computer interface with character type LCD module is analyzed and the solution is given out. The character type LCD module has the advantages of high cost effective, simple hardware interface, flexible and convenient software operation, rich display content, small volume and low power consumption. For this reason, it is very appropriate for the development of the small and medium application system, such as pocket instrument and portable equipment.
Keywords: character type LCD module; human?computer interface design; hardware interface design; software design
0 引 言
當(dāng)今時(shí)代,計(jì)算機(jī)技術(shù)正以迅猛發(fā)展的勢(shì)頭,滲透到人們的學(xué)習(xí)、工作和生活的諸多領(lǐng)域,甚至國(guó)民經(jīng)濟(jì)和國(guó)防工業(yè)的方方面面。陸續(xù)誕生了許多智能化的儀器、儀表,還有許多以計(jì)算機(jī)為基礎(chǔ)、以應(yīng)用為中心的各種嵌入式系統(tǒng)。這給人們帶來(lái)了更高的工作效率、更高的生活質(zhì)量。縱觀這些花樣繁多的設(shè)備,只要是以計(jì)算機(jī)為核心的應(yīng)用系統(tǒng),人機(jī)界面必不可少。人機(jī)界面的規(guī)模和樣式五花八門(mén),但功能和作用不外乎以下兩點(diǎn):一是用來(lái)顯示應(yīng)用系統(tǒng)運(yùn)行時(shí)產(chǎn)生的各種數(shù)據(jù),為用戶了解系統(tǒng)的運(yùn)行狀態(tài)提供必要的信息;二是讓用戶輸入系統(tǒng)運(yùn)行時(shí)必要的各類參數(shù),以此決定或調(diào)整系統(tǒng)的不同運(yùn)行狀態(tài),來(lái)協(xié)助用戶完成不同的任務(wù)。從人機(jī)界面的具體構(gòu)成形式看,從發(fā)光二極管到各類數(shù)碼管以至各種液晶顯示屏,再配以由一定數(shù)量按鍵組成的鍵盤(pán)構(gòu)成人機(jī)界面。有許多因素決定了在設(shè)計(jì)應(yīng)用系統(tǒng)時(shí)選擇什么樣的人機(jī)界面。諸如用戶操作的便捷性、應(yīng)用系統(tǒng)的總造價(jià)以及器件硬/軟件操作的簡(jiǎn)便性,甚至應(yīng)用系統(tǒng)的硬/軟件規(guī)模有時(shí)也能決定選擇什么樣的人機(jī)界面[1]。
液晶顯示模塊一經(jīng)問(wèn)世,便以其性能穩(wěn)定可靠、結(jié)構(gòu)緊湊、體積小巧、顯示內(nèi)容豐富、硬件接口簡(jiǎn)單、軟件操作靈活方便、性價(jià)比高等特點(diǎn)迎得了人們的喜愛(ài)。液晶顯示模塊是將LCD控制器、顯示數(shù)據(jù)RAM、字符ROM、點(diǎn)陣控制器和LCD顯示器用PCB連接到一起構(gòu)成的[2]。液晶顯示模塊有字符方式和圖形方式兩類。它是前些年國(guó)內(nèi)外發(fā)展很快的一項(xiàng)新興產(chǎn)業(yè),近年來(lái)趨于成熟,性能更穩(wěn)定、硬/軟件操作更簡(jiǎn)便、成本更低廉。愈來(lái)愈多的應(yīng)用系統(tǒng)的人機(jī)界面都采用了液晶顯示模塊。
本文以實(shí)例的方式給出了基于字符型液晶模塊與MCS?51系列微控制器為CPU的人機(jī)界面顯示部分的硬件接口詳實(shí)設(shè)計(jì)以及軟件設(shè)計(jì)與實(shí)現(xiàn)方法[3]。
1 字符型液晶模塊簡(jiǎn)介
字符型液晶模塊上排列著若干個(gè)5×7或5×10點(diǎn)陣的字符顯示位,每個(gè)顯示位可顯示一個(gè)字符,從規(guī)格上分為每行8,16,24,40,80位,有一行、二行和四行三類。字符ROM中包括英文大小寫(xiě)字母,數(shù)字(均采用與ASCII碼一致的編碼)和書(shū)寫(xiě)符號(hào)等,有的甚至還支持由用戶定義的若干個(gè)字符。目前,各公司生產(chǎn)的相同規(guī)格的字符型液晶模塊,硬、軟件操作大體相同。本實(shí)例選用了一款通用的字符型液晶模塊。它有二個(gè)顯示行、每行16個(gè)字符位,共有32個(gè)字符位。PCB上有16個(gè)引線端,如表1所示。
表1 16×2字符型液晶模塊引腳分配表
[引腳號(hào)\符號(hào)\電平
類型\功能描述\1\VSS\??\電源\地(0 V)\2\VDD\??\+5 V\3\VEE\?-\LCD驅(qū)動(dòng)\4\RS\H/L\寄存器選擇信號(hào)
H:數(shù)據(jù)寄存器,L:指令寄存器\5\R/W\H/L\H:數(shù)據(jù)讀(液晶模塊→CPU)
L:數(shù)據(jù)寫(xiě)(CPU→液晶模塊)\6\E\H,H→L\使能信號(hào)\7~14\DB0~DB7\H/L\數(shù)據(jù)總線\15\LED+\--\背光LED電源\16\LED-\]
CPU通過(guò)向字符型液晶模塊的指令寄存器或數(shù)據(jù)寄存器中寫(xiě)入數(shù)據(jù)即可控制顯示。對(duì)寄存器的尋址由寄存器選擇信號(hào)RS和R/W信號(hào)來(lái)完成,見(jiàn)表2。
字符型液晶模塊(控制器為KS0066或兼容控制器。)的指令系統(tǒng)共11種[4],如表2所示。
下面對(duì)每條指令進(jìn)行介紹。
(1)清屏:清屏顯示和DDRAM、光標(biāo)回原點(diǎn)。
(2)光標(biāo)回原點(diǎn):將光標(biāo)返回到原點(diǎn),移位顯示也回到初始位置,DDRAM內(nèi)容保持不變。
(3)輸入模式設(shè)置:設(shè)定光標(biāo)和顯示的工作模式。對(duì)液晶模塊讀/寫(xiě)數(shù)據(jù)時(shí):I/D=1,AC自動(dòng)增1;I/D=0,AC自動(dòng)減1。S=1,顯示移位;S=0,光標(biāo)移位。
(4)顯示開(kāi)/關(guān)控制:設(shè)置顯示(D)開(kāi)/關(guān)、光標(biāo)(C)開(kāi)/關(guān)、光標(biāo)位置字符閃爍(B)開(kāi)/關(guān)。
(5)光標(biāo)/顯示移位:在不改變DDRAM內(nèi)容的條件下,光標(biāo)移動(dòng)或顯示移位。S/C=1:顯示移位;S/C=0:光標(biāo)移動(dòng)。R/L=1:向右移位;R/L=0:向左移位。
(6)功能設(shè)置:設(shè)置接口數(shù)據(jù)寬度(DL)、顯示行數(shù)(N)以及字體點(diǎn)陣(F)類別。DL=1:8位數(shù)據(jù);DL=0:4位數(shù)據(jù)。N=1:兩行顯示;N=0:一行顯示。F=1:5×10點(diǎn)陣;F=0:5×7點(diǎn)陣。
(7)CGRAM地址設(shè)置:設(shè)置CGRAM地址。
(8)DDRAM地址設(shè)置:設(shè)置DDRAM地址。
(9)讀取忙標(biāo)志BF和地址計(jì)數(shù)器AC:讀取BF(DB7位)和AC(低7位DB6~DB0)。BF=1:內(nèi)部正執(zhí)行操作;BF=0:可進(jìn)行讀/寫(xiě)操作。
(10)向CGRAM或DDRAM寫(xiě)數(shù)據(jù)。
(11)從CGRAM或DDRAM讀數(shù)據(jù)。
表2 字符型液晶模塊指令系統(tǒng)表
[指令
序號(hào)\指令編碼\指令最大
執(zhí)行時(shí)間
[Fosc]=
250 kHz\RS\R/W\DB7\DB6\DB5\DB4\DB3\DB2\DB1\DB0\1\0\0\0\0\0\0\0\0\0\1\1.64 ms\2\0\0\0\0\0\0\0\0\1\*\1.64 ms\3\0\0\0\0\0\0\0\1\I/D\S\40 μs\4\0\0\0\0\0\0\1\D\C\B\40 μs\5\0\0\0\0\0\1\S/C\R/L\*\*\40 μs\6\0\0\0\0\1\DL\N\F\*\*\40 μs\7\0\0\0\1\ACG\40 μs\8\0\0\1\ADD\40 μs\9\0\1\BF\AC\0 μs\10\1\0\WRITE DATA\40 μs\11\1\1\READ DATA\40 μs\]
注:DDRAM(Display Data RAM):顯示數(shù)據(jù)RAM;CGRAM(Character Generator RAM):字符產(chǎn)生器RAM;ACG(CGRAM Address):CGRAM地址;*:不必關(guān)心其值;ADD(DDRAM Address):DDRAM地址,與光標(biāo)地址一致;AC(Address Counter):地址計(jì)數(shù)器,用于DDRAM和CGRAM。
字符液晶模塊顯示位與DDRAM地址關(guān)系見(jiàn)表3。
表3 字符型液晶模塊顯示位與DDRAM地址對(duì)應(yīng)表
[顯示位\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\DDRAM
地址(H)\第一行\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\第二行\40\41\42\43\44\45\46\47\48\49\4A\4B\4C\4D\4E\4F\]
2 字符型液晶模塊與MCS?51 CPU接口設(shè)計(jì)
因?yàn)镸CS?51系列微控制器的P0口是分時(shí)復(fù)用的地址/數(shù)據(jù)總線,所以在進(jìn)行I/O設(shè)備擴(kuò)展時(shí),必須用地址鎖存器將地址信號(hào)從地址/數(shù)據(jù)總線中分離出來(lái)。本文選用74LS373作為地址鎖存器 [5]。鎖存器的控制端G與MCS?51系列微控制器的鎖存信號(hào)ALE相連,ALE在下降沿進(jìn)行地址鎖存。字符型液晶模塊與MCS?51 CPU接口電路如圖1所示。
圖1 字符型液晶模塊與MCS?51 CPU接口電路圖
在I/O端口地址譯碼設(shè)計(jì)中,采用了全地址譯碼法,即將低位地址線(P0口)作為器件的片內(nèi)地址,用3?8譯碼器對(duì)高位地址線(P2口)進(jìn)行譯碼[6],與設(shè)計(jì)地址對(duì)應(yīng)的譯碼輸出與CPU的讀、寫(xiě)信號(hào)一起產(chǎn)生字符型液晶模塊的使能信號(hào)。根據(jù)圖1的地址設(shè)計(jì),得到表4所示的字符型液晶模塊寄存器端口地址[7]。
表4 字符型液晶模塊寄存器端口地址表
[寄存器名稱\名稱
簡(jiǎn)寫(xiě)\地址選擇線\端口
地址\P2.7\P2.6\…\P0.1\P0.0\(A15\A14\…\A1\A0)\寫(xiě)指令寄存器\CPORTW\1 0 0 * * * * * * * * * * * * 0 0\8000H\寫(xiě)數(shù)據(jù)寄存器\DPORTW\1 0 0 * * * * * * * * * * * * 0 1\8001H\讀狀態(tài)寄存器\SPORTR\1 0 0 * * * * * * * * * * * * 1 0\8002H\讀數(shù)據(jù)寄存器\DPORTR\1 0 0 * * * * * * * * * * * * 1 1\8003H\]
因?yàn)樽址鸵壕K不具有中斷請(qǐng)求線,所以CPU以查詢方式與液晶屏交換數(shù)據(jù)、指令。字符型液晶模塊的VEE端連接了10 kΩ電位計(jì),用來(lái)調(diào)節(jié)液晶顯示屏的對(duì)比度。
3 軟件設(shè)計(jì)與實(shí)現(xiàn)
對(duì)字符型液晶模塊操作的軟件設(shè)計(jì)采用模塊化設(shè)計(jì)[8?9]。在字符型液晶模塊執(zhí)行一條指令期間,不能接收新的指令。字符型液晶模塊的控制器設(shè)有忙標(biāo)志位(BF)。BF=1時(shí),字符型液晶模塊控制器不能接收CPU的任何信息;BF=0時(shí),CPU可對(duì)字符型液晶模塊控制器進(jìn)行讀/寫(xiě)操作。因此,CPU在向字符型液晶模塊控制器發(fā)出指令或交換數(shù)據(jù)前,應(yīng)先判斷BF。BF可直接從狀態(tài)寄存器的DB7位讀出。
示例程序以從左至右逐字顯示方式進(jìn)行演示[10]。
CPORTW EQU 8000H
DPORTW EQU 8001H
SPROTR EQU 8002H
DPORTR EQU 8003H
COM EQU 20H
ORG 0000H
START: JMP BEGIN
ORG 0500H
BEGIN: ACALL INILCM
BEGIN0: LCALL DL100MS
LCALL WRDAT
JMP BEGIN0
INILCM: MOV DPTR,#CPORTW ;液晶模塊初始化子程序
MOV R2,#03H
MOV A,#30H
INI: MOVX @DPTR,A ;此循環(huán)不可省
LCALL DL10MS
DJNZ R2,INI
MOV COM,#38H
;功能設(shè)置:8位數(shù)據(jù)接口;2行;5×7點(diǎn)陣
LCALL WRCOM
MOV COM,#08H ;關(guān)閉顯示
LCALL WRCOM
MOV COM,#01H ;清顯示屏
LCALL WRCOM
MOV COM,#06H ;顯示不移位,AC為自增方式
LCALL WRCOM
MOV COM,#0CH ;開(kāi)屏幕顯示,關(guān)光標(biāo)
LCALL WRCOM
RET
WRDAT: MOV COM,#01H
;寫(xiě)顯示數(shù)據(jù)子程序,顯示26個(gè)大寫(xiě)字母
LCALL WRCOM ;清顯示屏
MOV COM,#81H ;設(shè)置ADD值:第一行第二個(gè)顯示位
LCALL WRCOM
MOV R3,#02H
MOV A,#41H ;字符“A”的ASCII碼
SENDAT0:MOV R2,#0DH
MOV DPTR,#DPORTW
SENDAT: LCALL F_BUSY
MOVX @DPTR,A
INC A
LCALL DL10MS
DJNZ R2,SENDAT
MOV COM,#0C1H
;設(shè)置ADD值:第二行第二個(gè)顯示位
LCALL WRCOM
DJNZ R3,SENDAT0
LCALL DL100MS
RET
WRCOM: PUSH DPH ;寫(xiě)指令代碼子程序
PUSH DPL
PUSH A
LCALL F_BUSY
MOV A,COM
MOV DPTR,#CPORTW
MOVX @DPTR,A
POP A
POP DPL
POP DPH
RET
F_BUSY: PUSH DPH ;檢查忙標(biāo)志并等待子程序
PUSH DPL
PUSH PSW
PUSH A
LOOP: MOV DPTR,#SPORTR
MOVX A,@DPTR
JB ACC.7,LOOP
POP A
POP PSW
POP DPL
POP DPH
RET
DELAY: MOV R6,#0F9H ;延時(shí)子程序
LOOP2: NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,DELAY
RET
DL10MS: MOV R7,#0EH ;延時(shí)約10 ms
LCALL DELAY
RET
DL100MS: MOV R7,#7FH ;延時(shí)約100 ms
LCALL DELAY
RET
4 需注意的問(wèn)題
時(shí)序匹配的問(wèn)題:MCS?51系列微控制器與字符型液晶模塊的讀/寫(xiě)時(shí)序波形一致。但要注意微控制器晶振頻率的選取,因?yàn)檫@決定了有效數(shù)據(jù)在總線上維持的時(shí)間、讀/寫(xiě)信號(hào)、寄存器選擇信號(hào)、使能信號(hào)的有效時(shí)機(jī),以及它們的相對(duì)關(guān)系。本例中選取12 MHz的晶振作為微控制器的工作時(shí)鐘源。可正常實(shí)現(xiàn)對(duì)字符型液晶模塊的讀/寫(xiě)操作。
若字符型液晶模塊顯示不正常時(shí),通過(guò)調(diào)節(jié)VEE端連接的10 kΩ電位計(jì),來(lái)改變液晶屏的對(duì)比度。
字符型液晶模塊為低速器件,向其寫(xiě)指令或交換數(shù)據(jù)前,要確認(rèn)字符型液晶模塊是否處于忙狀態(tài)。
盡管字符型液晶模塊是低速器件,由于人眼有視覺(jué)暫留現(xiàn)象,用戶仍無(wú)法跟上字符型液晶模塊的顯示刷新速度,所以在顯示數(shù)據(jù)或清屏?xí)r,要結(jié)合具體情況,采取適當(dāng)?shù)难訒r(shí)措施,用戶才能看清顯示的信息。
5 結(jié) 語(yǔ)
字符型液晶模塊硬件接口簡(jiǎn)單、軟件操作靈活方便,大大減小了開(kāi)發(fā)應(yīng)用系統(tǒng)時(shí)在人機(jī)界面上的開(kāi)銷;其顯示內(nèi)容豐富,大大改善了人機(jī)界面的性能;另外,由于字符型液晶模塊具有極低功耗的特點(diǎn),在袖珍式儀器、儀表或便攜式應(yīng)用系統(tǒng)的開(kāi)發(fā)領(lǐng)域具有更為廣闊的應(yīng)用前景。字符型液晶模塊克服了圖形方式液晶模塊軟件操作復(fù)雜、造價(jià)高等弊端,可大幅提高應(yīng)用系統(tǒng)的簡(jiǎn)潔性、可靠性、性價(jià)比以及用戶操作的便捷性。字符型液晶模塊特別適合規(guī)模不大的中、小型計(jì)算機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)與研制。近年來(lái),串行接口的液晶模塊也日趨成熟,它與CPU的硬件接口更簡(jiǎn)單。這給廣大的計(jì)算機(jī)愛(ài)好者以及從事開(kāi)發(fā)研制應(yīng)用系統(tǒng)的人員帶來(lái)了福音。
參考文獻(xiàn)
[1] 李學(xué)干,蘇東莊.計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)[M].西安:西安電子科技大學(xué)出版社,1998.
[2] 清達(dá)光電技術(shù)有限公司.點(diǎn)陣字符液晶模塊使用手冊(cè)[M].杭州:清達(dá)光電技術(shù)有限公司,2010.
[3] 郁成軍,曹國(guó)強(qiáng).RS 232型多串行通道單纖光端機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(17):100?106.
[4] SAMSUNG ELECTRONICS. KS0066U—16COM/40SEG driver controller for dot matrix LCD [EB/OL]. [2011?05?20]. http://www.datsi.fi.upm.es/docencia/Micro_C/lcd/ks0066u.pdf.
[5] 李華.MCS?51系列單片機(jī)實(shí)用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,2003.
[6] 藍(lán)江橋.數(shù)字系統(tǒng)與邏輯設(shè)計(jì)[M].武漢:湖北科學(xué)技術(shù)出版社,1997.
[7] 白中英.計(jì)算機(jī)組成原理[M].北京:科學(xué)出版社,1999.
[8] 譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1996.
[9] KRUSE R L, RYBA A. DATA structures and program design in C++ [M]. New Jersey, USA: Prentice Hall, 1998.
[10] 何立民.單片機(jī)高級(jí)教程:應(yīng)用與設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2000.