摘 要:針對并捻機測控系統中液晶顯示子系統的應用,硬件上充分利用現有單片機的I/O資源,軟件上采用層次化模塊化設計,充分利用硬件特性簡化了漢字在液晶顯示屏中的顯示,該設計完全達到了設計目的并且降低了產品成本。經過在并捻機測控系統中的聯合實際測試,證明軟硬件工作穩定可靠,并且模塊化的設計方便產品今后的升級和移植。
關鍵詞:液晶顯示器; CPU; 匯編語言; MGLS-12864
中圖分類號:TP23文獻標識碼:A
文章編號:1004-373X(2010)15-0197-03
Application of LCD Module in Measurement and Control Systems of Double Twisters
MA Lin-hai
(Xianyang Textile Machinery Plant, Xianyang 712000, China)
Abstract: A liquid crystal display(LCD) subsystem designed for the measurement and control systems of the double twisters is introduced. I/O resources are utilized in the hardware design of the subsystem and the modular design is adopted in the software design, which simplifies the display method of Chinese characters. The actual test indicates that the low-cost subsystem runs stable and the module design is convenient to upgrade.
Keywords: liquid crystal display; CPU; assemble language; MGLS-12864
收稿日期:2010-03-25
在研制并捻機測控系統中,為了方便對整個測控系統的監控,就需要系統能夠提供友好的人機界面,故顯示子系統是必不可少的。根據系統需要,顯示系統應該提供如下的顯示功能:漢字顯示測控項目;每屏顯示四組相應數據;具有每屏顯示項目不變數據隨測試數據變化和測試項目及測試數據同時變化功能。在本項目的開發過程中筆者采用了模塊化的設計思想,簡化硬件設計,利用原有的硬件資源,輔助以結構化的軟件設計最大限度節省資源的條件下進行了該項目的開發工作。
1 需求分析
1.1 液晶顯示器的選擇
液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄等許多其他顯示器無法比擬的優點,近幾年來被廣泛用于單片機控制的智能儀器、儀表和低功耗電子產品中。LCD可分為段位式LCD、字符式LCD和點陣式LCD[1-2]。其中,段位式LCD和字符式LCD只能用于字符和數字的簡單顯示,不能滿足圖形曲線和漢字顯示的要求;而點陣式LCD不僅可以顯示字符、數字,還可以顯示各種圖形、曲線及漢字,并且可以實現屏幕上下左右滾動、動畫功能、分區開窗口、反轉、閃爍等功能,用途十分廣泛。因此結合系統的顯示要求,選擇點陣式的LCD作為顯示界面,為了能夠清晰地顯示漢字,需要16×16點陣顯示一個漢字,這樣便有4×16=64個點陣行,每行最多顯示字數為7個,故每行應滿足112個以上點陣數。查MGLS-12864B液晶顯示器的數據手冊,其具有128×64全點陣數,完全滿足設計需要。
1.2 驅動接口的選擇
經過對比多種型號的12864B的液晶顯示器,以及多數液晶控制驅動的驅動規范,并且考慮到并捻機測控系統的軟硬件的需求,選擇直接訪問方式接口電路及驅動程序來實現對液晶顯示器的控制。MGLS-12864液晶顯示模塊完全符合上述需求[2-3]。
2 系統實現
2.1 硬件設計
因為內藏KS0108B及其兼容控制驅動器的液晶模塊的接口時序為68時序,所以用8031的總線方式控制管理就需要經過一些簡單的時序改造電路[4-6],原理圖如圖1所示。
2.2 軟件設計
液晶顯示子系統的軟件分為三層,上層為應用程序接口層(Application Interface Layer,AIL);中間層為硬件抽象層(Hardware Abstraction Layer,HAL);底層為硬件接口層(Device Driver Layer,DDL)。軟件模塊結構如圖2所示。其中AIL層主要完成于控制系統應用層的接口,接受顯示數據;HAL層將物理硬件抽象隔離不同硬件之間的差異,有助于代碼移植和硬件的更新和升級;DDL層直接訪問硬件完成設備的驅動,實現顯示功能。最后就是物理硬件層(PHY層)。
圖1 硬件原理圖
圖2 軟件模塊
2.2.1 DDL層的實現
根據MGLS-12864液晶顯示器使用說明書的介紹,驅動分為左中右三個顯示區域,其驅動代碼也分為左中右子程序分別實現,如下僅僅列出左顯示區域的部分代碼(中和右區域的代碼類似):
A11=CSB,A10=CSA,A9=R/W,A8=D/I
設偽指令:
DATEQU21H ;數據寄存器
CWADD1 EQU 0000H ;寫指令代碼地址(左)
CRADD1 EQU 0200H ;讀狀態字地址(左)
DWADD1 EQU 0100H ;寫顯示數據地址(左)
DRADD1 EQU 0300H ;讀顯示數據地址(左)
CWADD2 EQU 0800H ;寫指令代碼地址(中)
CRADD2 EQU 0A00H ;讀狀態字地址(中)
DWADD2 EQU0900H ;寫顯示數據地址(中)
DRADD2 EQU 0B00H ;讀顯示數據地址(中)
CWADD3 EQU 0400H ;寫指令代碼地址(右)
CRADD3 EQU 0600H ;讀狀態字地址(右)
DWADD3 EQU 0500H ;寫顯示數據地址(右)
DRADD3 EQU 0700H ;讀顯示數據地址(右)
(1) 寫指令代碼子程序(左)
PRL0:PUSHDPL;片選設置為“00”
PUSHDPH
MOVDPTR,#CRADD1 ;設置讀狀態字地址
PRL01: MOVX A,@DPTR ;讀狀態字
JBACC.7,PRL01;判“忙”標志為“0”否,否再讀
MOVDPTR,#CWADD1 ;設置寫指令代碼地址
MOVA,COM ;取指令代碼
MOVX @DPTR,A ;寫指令代碼
POPDPH
POP DPL
RET
(2) 寫顯示數據子程序(左)
PRL1: PUSH DPL ;片選設置為“00”
PUSH DPH
MOV DPTR,#CRADD1 ;設置讀狀態字地址
PRL11: MOVXA,@DPTR ;讀狀態字
JB ACC.7,PRL11;判“忙”標志為“0”否,否再讀
MOV DPTR,#DWADD1 ;設置寫顯示數據地址
MOV A,DAT;取數據
MOVX @DPTR,A ;寫數據
POPDPH
POP DPL
RET
(3) 讀顯示數據子程序(左)
PRL2: PUSH DPL;片選設置為“00”
PUSHDPH
MOV DPTR,#CRADD1 ;設置讀狀態字地址
PRL21: MOVXA,@DPTR ;讀狀態字
JB ACC.7,PRL21 ;判“忙”標志為“0”否,否再讀
MOV DPTR,#DRADD1 ;設置讀顯示數據地址
MOVXA,@DPTR ;讀數據
MOVDAT,A ;存數據
POPDPH
POP DPL
RET
2.2.2 HAL層的實現
HAL層主要包括漢字顯示、譯碼查詢、字庫三個子模塊。漢字顯示對需要顯示的內容進行邏輯判斷處理,因為顯示的內容會不斷變化,該模塊需要對顯示內容重新整理編排;譯碼查詢模塊接收來自漢字顯示模塊的規格化數據進行字模數據的譯碼;字庫模塊根據譯碼模塊的數據查詢字庫數據,調用驅動模塊實現顯示。
(1) 漢字庫的建立
由于MGLS-12864B液晶顯示器送入數據為1時表示顯示選擇,數據為0時表示顯示非選擇,故當設置好地址及功能數據后,用查表的方式選擇所需顯示的漢字表格(庫)[7-10]。如:當需顯示漢字“線長:”時,表格為:
線(0) 長(1) :(2)
XIANCHANG:
DB 40H,60H,58H,C7H,62H,00H,90H,90H,90H,FFH,90H,92H,9CH,94H,80H,00H;
DB 20H,22H,23H,12H,12H,12H,20H,20H,10H,13H,0CH,14H,22H,40H,F8H,00H; ″線″,0
DB 80H,80H,80H,80H,FFH,A0H,A0H,90H,90H,88H,84H,82H,80H,80H,80H,00H;
DB 00H,00H,00H,00H,FFH,40H,21H,12H,04H,08H,10H,30H,60H,20H,00H,00H; ″長″,1
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;
DB 00H,00H,36H,36H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H; ″:″,2
當需顯示“線(0) 速(1):”時,表格為:
線(0) 速(1) :(2)
XIANSU:
DB 40H,60H,58H,C7H,62H,00H,90H,90H,90H,FFH,90H,92H,9CH,94H,80H,00H;
DB 20H,22H,23H,12H,12H,12H,20H,20H,10H,13H,0CH,14H,22H,40H,F8H,00H;″線″,0
DB 40H,42H,CCH,00H,04H,E4H,24H,24H,FFH,24H,24H,24H,E4H,04H,00H,00H;
DB 40H,20H,1FH,20H,48H,49H,45H,43H,7FH,41H,43H,45H,4DH,40H,40H,00H;″速″,1
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;
DB 00H,00H,36H,36H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;″:″,2
當需顯示“捻(0) 度(1) :(2)” 時,表格為:
捻(0) 度(1) :(2)
NIANDU:
DB 08H,08H,88H,0FFH,48H,48H,0A0H,98H,87H,0E4H,88H,90H,0A0H,60H,20H,00H;
DB 01H,41H,80H,7FH,20H,38H,00H,38H,42H,44H,4EH,41H,70H,08H,30H,00H;″捻″,0
DB 00H,00H,0FCH,04H,24H,24H,0FCH,0A5H,0A6H,0A4H,0FCH,24H,24H,24H,04H,00H;
DB 80H,60H,1FH,80H,80H,42H,46H,2AH,12H,12H,2AH,26H,42H,0C0H,40H,00H;″度″,1
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;
DB 00H,00H,36H,36H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;″:″,2
注意:在列表中“:”為重復列出是為了漢字調用的統一性,簡化程序,方便數據的裝入,但在EPROM小,且顯示“:” 的情況下不宜采用此方法。
(2) 數據的查詢及譯碼
在漢字顯示時將待查漢字庫相應首地址(宜用偽指令)存入地址指針DPTR內。并將待顯示漢字數存儲器(程序儲器)內的數據取出,將漢字個數乘以32(每字由32個數據組成)即為所查漢字庫的循環次數。并將其裝入“查表循環計數器”并調“查表子程序”。以“查表循環計數器”的數據為查表次數。循環調入“查表子程序”。每調入一次地址指針DPTR加1,“查表循環計數器”減1。直至“查表循環計數器”減為0。并依次將表格內的數據輸出到12864B液晶顯示器的輸出暫存器內。這樣必須在“查表子程序”內設置“表輸出子程序”以完成一組漢字的顯示。寫入數據后應向12864B液晶顯示器發出“停止寫入”命令完成一個寫入過程。
在顯示測量數據顯示時首先將數據譯碼首地址(宜用偽指令)存入地址指針DPTR內。分別將整數數據個數和小數數據個數存入暫存器。將一組“數據顯示暫存器”的數據,逐一讀入數據至A。并判斷高位是否為0,如為0則不輸出,并將整數暫存器減1。直至第一個不為0的數字出現。如遇個位數依然為0則保留其輸出。小數點后的不顯示位的判斷則從低位開始依次至小數點最高位。小數點暫存器的數也相應減少直至其為1。利用MOVC A,@A+DPTR指令將譯碼后的數據輸出到12864B液晶顯示器的輸出暫存器內,并輸出。
其后操作與漢字顯示相同。
3 結 語
在介紹液晶顯示模塊與單片機接口的同時,采用了新穎的改造方案以解決應用中的問題。由于節省了單片機口線,使系統資源得到了充分利用。可顯示漢字、字符,使人機界面更為美觀、易讀。由于本設計采用了模塊化的軟件設計,使得軟件代碼可以方便移植到其他型號的液晶顯示模塊中,同時方便系統的硬件升級。最終該液晶顯示子系統在并捻機測控系統中得到成功應用,實現了設計要求。
參考文獻
[1]余華芳,劉健.單片機與液晶顯示模塊的軟硬件接口技術[J].液晶與顯示,2003,18(2):125-128.
[2]李維諟,郭強.液晶顯示應用技術[M].北京:電子工業出版社,2005.
[3]趙立生,杜安,張偉.MSP2G320240DBCW2211N大規模點陣式LCD與PIC單片機接口技術[J].液晶與顯示,2004,19(12):478-482.
[4]何立民.MCS-51系列單片機應用系統設計[M].北京:北京航空航天大學出版社,2001.
[5]皮大能,南光群.JHD161A LCD顯示器與PIC16F877單片機連接[J].微計算機信息,2004,20(10):94-95.
[6]黃竹霞.LCD模塊與單片機的串行接口技術[J].傳感器技術,2002,21(11):50-51.
[7]梅麗鳳,王艷秋.單片機原理及接口技術[M].北京:清華大學出版社,2004.
[8]朱定華,劉玉.單片機原理及應用技術學習輔導[M].北京:電子工業出版社,2001.
[9]馬鴻文.基于AT89C52單片機的自動存取柜的設計與實現[J].微計算機信息,2006,22(2):101-103.
[10]李學海.PIC單片機使用教程:提高篇[M].北京:北京航空航天大學出版社,2002.