摘 要: 研究了圖形液晶模塊的漢字顯示方法, 以8051 單片機為基礎(chǔ), 介紹了液晶模塊與單片機的典型接口電路, 描述了通過外擴的EEPROM 存儲漢字字模數(shù)據(jù), 將其作為外部數(shù)據(jù)存儲器進行尋址, 通過C51 程序詳細介紹了使用方法。對于程序存儲器和數(shù)據(jù)存儲器分開尋址的單片機, 該方式能起到節(jié)省程序存儲器, 擴大程序容量的作用。
1 引 言
液晶顯示器件( LCD) 獨具的低壓、微功耗特性使它可以直接與大規(guī)模集成電路結(jié)合開發(fā)出一系列具有便攜顯示功能的產(chǎn)品。這些產(chǎn)品不僅改變了人類生活甚至也改變了社會。例如, 液晶顯示的電子表、電子計算器已成為生活必需品, 而液晶顯示的移動通訊已成為人類社會活動的必備工具。
常用的液晶顯示模塊分為數(shù)顯液晶模塊、點陣字符液晶模塊和點陣圖形液晶模塊。圖形液晶模塊在我國應(yīng)用較為普及, 因為中文不能像西文字符那樣用字符模塊即可顯示, 要想顯示中文必須用圖形模塊。
2 液晶模塊顯示漢字方法
使用圖形液晶模塊可以顯示漢字和圖形。以DG12864( 128×64) 液晶模塊為例, 其內(nèi)置的液晶顯示驅(qū)動控制器為日本東芝公司的T6963C, 在液晶屏上橫向8 個點為1 個字節(jié)數(shù)據(jù), 每個字節(jié)在顯示緩沖區(qū)內(nèi)有對應(yīng)的地址, 液晶屏幕的左上角橫向8 個點對應(yīng)液晶模塊顯示緩沖區(qū)的首地址。采用圖形顯示方式, 在液晶顯示器上漢字用點陣來顯示, 最常用的是16×16 的漢字, 一個16×16 的漢字用32 個字節(jié)表示, 這32 個字節(jié)存放方式如下所示:
而一個24 ×24 的漢字則需72 個字節(jié), 存放方式如下:
其他規(guī)格的漢字存放方式依此類推。在液晶顯示器上需顯示漢字時, 只要將要顯示的漢字的點陣按其存放方式依次寫入液晶控制器的顯示緩沖區(qū)即可。
通過單片機將已提取的漢字的字模輸入液晶控制器, 即可按設(shè)定在液晶模塊顯示屏上顯示漢字。常見的做法是事先通過字模提取軟件提取要顯示的漢字的字模, 將其作為常量數(shù)組存放在單片機的程序存儲區(qū)內(nèi)。以C 語言格式建立包含"合"和"肥"兩字的漢字字模常量數(shù)組, 如下:
Code const char Hz-Dot [ ] = {0x01, 0x01, 0x02, 0x04, 0x08, 0x 10, 0x 2F,0xC0, / / 合0
0x00, 0x1F, 0x 10, 0x10, 0x10, 0x 10, 0x1F, 0x10,0x00, 0x00, 0x 80, 0x40, 0x 20, 0x10, 0xEE, 0x 04,0x10, 0xF8, 0x 10, 0x10, 0x10, 0x 10, 0xF0, 0x10,0x04, 0x 7F, 0x 45, 0x45, 0x45, 0x7D, 0x 45,0x45, / / 肥0x 20
0x45, 0x7D, 0x 45, 0x45, 0x 45, 0x45, 0x 54, 0x 88,0x04, 0xFE, 0x 24, 0x24, 0x 24, 0x24, 0x 24, 0xFC,0x04, 0x 00, 0x 00, 0x02, 0x02, 0x02, 0xFE,0x00} ;
每個漢字字模由32 個字節(jié)組成, 單片機通過接口電路, 根據(jù)規(guī)定的時序, 將要顯示的漢字字模的所有字節(jié)按液晶控制器規(guī)定的方式, 按預(yù)定位置寫入液晶控制器顯示緩沖區(qū)即可。這種方式適用于程序不大或單片機無外部擴展數(shù)據(jù)存儲區(qū)功能的情況。
采用哈佛結(jié)構(gòu)的單片機, 如8051 單片機及其派生產(chǎn)品, 程序存儲器( ROM) 和數(shù)據(jù)存儲器( RAM) 可分別尋址, 8051 單片機ROM 和RAM最大的尋址空間均為64 K.通常來說, 對于中型的嵌入式系統(tǒng), 尤其是帶液晶模塊的單片機系統(tǒng),64 K 的程序空間并不富裕, 而將漢字字模作為常量數(shù)組會大大占用ROM 的空間。而相對來說,數(shù)據(jù)存儲器只需幾K 就夠用了, 剩下很多空間可用于功能芯片的擴展。將提取的漢字字模數(shù)據(jù)存放在EPROM 或EEPROM 內(nèi)作為擴展的數(shù)據(jù)存儲器供CPU 調(diào)用, 則只要設(shè)定該芯片的片選地址, 并知道每個漢字字模數(shù)據(jù)在該芯片的存儲位置, 通過程序計算出偏移地址, 即可實現(xiàn)同樣的顯示功能。
3 單片機通過EEPROM 調(diào)用漢字字模的方法
圖1 是DG12864 液晶模塊與8051 單片機的接口電路。在電路中, 地址線A13??A15 通過GAL16V8 譯碼得到外擴芯片的片選信號, 其中液晶模塊的譯碼地址為0xE000, 將地址線A0 與液晶模塊控制口的C/ D 相連。當A0 為低時液晶控制器接收數(shù)據(jù), A0 為高時液晶控制器接收命令碼。因此液晶模塊數(shù)據(jù)端口地址為0xE000, 液晶模塊命令端口為0xE001.采用Keil C51 進行程序設(shè)計, 在程序中可進行如下定義:
# define XBYTE ( ( unsigned char volat ile x data* ) 0)
# def ine LCD-Data XBYT E[ 0xE000]/ / 液晶模塊數(shù)據(jù)端口
# def ine Lcd-Code XBYT E[ 0xE001]/ / 液晶模塊命令端口
存放漢字字模數(shù)據(jù)的EEPROM 芯片2864的片選地址為0x 9000, 則通過程序定義:
# def ine Hz-Dot 0x 9000
# define VBYTE ( unsigned char volatile x data* )
圖1 51 單片機與液晶模塊接口電路
編制16 ×16 漢字顯示子函數(shù)Wr ite-Hz.其中要調(diào)用另外兩個子函數(shù)Lcd-Wait 和Disp-address.Lcd-Wait 為讀取液晶控制器是否忙函數(shù), 而Disp-address 為液晶控制器顯示緩沖區(qū)地址設(shè)置函數(shù), 可根據(jù)液晶控制器資料編制。根據(jù)液晶控制器T 6963 的操作方法, 每次對液晶控制器進行讀寫時, 應(yīng)執(zhí)行Lcd-Wait 函數(shù)判斷液晶控制器是否忙, 在將漢字字模數(shù)據(jù)寫入液晶控制器顯示緩沖區(qū)前, 應(yīng)根據(jù)漢字在液晶屏上的顯示位置設(shè)定寫入數(shù)據(jù)的液晶控制器顯示緩沖區(qū)地址, 具體Write-Hz 如下:
void Write-Hz( Uchar x ,U char y, Uint p) // 寫漢字
// x , y 為漢字在液晶屏的顯示位置坐標,
// p 為要顯示的漢字在數(shù)組中的下標。
{
Uchar i, low-ad, hig h??ad;
Uint addr ess, tp;
address= ( Uint) x * Wide+ y ; / / * *
// 根據(jù)要顯示漢字在液晶屏幕的橫坐標和縱坐標
// 設(shè)定液晶控制器的顯示緩沖區(qū)的偏移地址
tp= address;
for ( i= 0; i< 16; i+ + ) / / 寫左半部
{
low-ad= ( Uchar) ( tp & 0x f f) ;
hig h-ad= ( Uchar) ( tp 8) ;
Disp-address( low-ad, high-ad) ;
/ / 設(shè)定寫入地址
Lcd-Wait ( ) ;
Lcd-Data = * ( VBYT E( Hz-Dot+ p+ i ) ) ;
/ / 從EEPROM 中提取漢字字模
Lcd-Wait ( ) ;
Lcd-Code= 0xC4; / / 寫數(shù)據(jù)命令
tp= tp+ Wide;
}
address+ + ;
tp= address;
fo r( i= 0; i< 16; i+ + ) / / 寫右半部
{
low-ad= ( U char) ( tp & 0xf f ) ;
hig h-ad= ( Uchar) ( tp 8) ;
Disp-address( low??ad, high??ad) ;
Lcd-Wait ( ) ;
Lcd-Data = * ( VBYTE ( Hz-Dot+ p+16+ i) ) ;
Lcd-Wait ( ) ;
Lcd-Code= 0xC4;
tp= tp+ Wide;
}
}
函數(shù)Wr ite??Hz 的參數(shù)x 和y 對應(yīng)液晶屏幕的顯示位置, 以屏幕左上角為原點, x 為縱坐標, y為橫坐標, 其在液晶控制器顯示緩沖區(qū)中的地址通過行* * 計算出, 該行中Wide 為事先定義的液晶屏每行字節(jié)數(shù), 對于DG12864 液晶模塊而言,Wide 為16。
函數(shù)Write-Hz 根據(jù)16×16 點陣漢字在液晶控制器顯示緩沖區(qū)的存放形式, 依次改變顯示地址, 先將左半部1~ 16 個字節(jié)寫入顯示緩沖區(qū), 再寫入右半部17~ 32 個字節(jié)。設(shè)"合肥"兩字存放在2864 中最前列, 則"合"字模首字節(jié)在2864 中的偏移地址為0, 共32 個字節(jié), 緊跟在后面的肥!字模的首地址為0x20, 若要液晶模塊顯示合肥!兩字, 只要在程序中帶顯示地址參數(shù)調(diào)用該函數(shù)即可。如:
Write-Hz( 0, 4, 0) ; / / 合
Write-Hz( 0, 10, 0x20) ; / / 肥
4 結(jié) 語。
本文介紹了圖形液晶的漢字顯示方法, 并以8051 單片機為基礎(chǔ), 結(jié)合液晶模塊與單片機的典型接口電路, 敘述了使用EEPROM 或EPROM存放漢字字模的方法, 并給出C51 程序例子, 具有很強的使用指導性。