液晶顯示器漢字字模存儲方法
液晶顯示器件(lcd)獨具的低壓、微功耗特性使他在單片機系統中特得到了廣泛的應用,常用的液晶顯示模塊分為數顯液晶模塊、點(diǎn)陣字符液晶模塊和點(diǎn)陣圖形液晶模塊,其中圖形液晶模塊在我國應用較為廣泛,因為漢字不能象西文字符那樣用字符模塊即可顯示,要想顯示漢字必須用圖形模塊。
1 液晶模塊顯示漢字方法
使用圖形液晶模塊以點(diǎn)陣形式來(lái)顯示漢字和圖形,每8個(gè)點(diǎn)組成1個(gè)字節,每個(gè)點(diǎn)用一個(gè)二進(jìn)制位表示,存1的點(diǎn)顯示時(shí)在屏上顯示一個(gè)亮點(diǎn),存0的點(diǎn)則在屏上不顯示,最常用的16×16的漢字點(diǎn)陣由32個(gè)字節組成。
以在我國應用較為普及的液晶顯示驅動(dòng)控制器t6963c為例,在液晶屏上橫向8個(gè)點(diǎn)為1個(gè)字節數據,則“國”字的16×16點(diǎn)陣字模如圖1所示,通過(guò)字模提取軟件按照先左后右,先上后下的方式對“國”字進(jìn)行字模提取,則可獲得圖1右邊的字模對應的32個(gè)字節值。
將這些字節按一定順序寫(xiě)入液晶控制器的顯示緩沖區,就可在液晶屏上顯示16×16的“國”字。同理一個(gè)24×24的漢字則需72個(gè)字節,存放方式如下:

其他規格的漢字存放方式以此類(lèi)推。

2 液晶控制器典型接口電路
通過(guò)單片機將已提取的漢字的字模輸入液晶控制器,即可按設定的液晶模塊顯示屏上現實(shí)需要的漢字。
圖2是典型的液晶模塊與單片機的接口電路,在圖中選用我國應非常廣泛的8051單片機作為mcu,采用dg12864(128×64)液晶模塊,其內置的液晶顯示驅動(dòng)控制器為日本東芝公司的t6963c。

在電路中,地址線(xiàn)a12-a15和wr,rd信號通過(guò)gal16v8譯碼出外擴芯片的片選信號,其中液晶的譯碼地址為0xe000,將地址線(xiàn)a0與液晶控制口的c/d相連。當a0為低時(shí)液晶控制器接收數據,a0為高時(shí)液晶控制器接收命令碼,因此液晶數據端口地址為0xe000,液晶命令端口為0xe001,采用keil
c51進(jìn)行程序設計,在程序中可進(jìn)行如下定義。
#define xbyte((unsigned char volatile xdata* )0)
#define lcd_data xbyte[0xe000] //液晶數據端口
#define lcd_code xbyte[0xe001] //液晶命令端口
單片機的數據線(xiàn)通過(guò)74hc245雙向緩沖器與液晶控制器的數據口相連,用液晶控制器的片選信號/lcd_cs作為74hc245的使能信號,單片機的寫(xiě)信號/wr控制數據傳送方向。/wr為低時(shí),單片機數據寫(xiě)入液晶控制器;/wr為高時(shí),cpu讀取液晶控制器的數據和狀態(tài);
3 漢字字模存儲及提取方法
在單片機系統中對字模的存儲,根據單片機的程序存儲容量和其尋址空間情況,可采取3種方式。
(1)將提取的漢字字模數據作為常量數組存放在程序存儲區內,這種方法較為常用,針對程序不大或單片機無(wú)外部擴展數據存儲區功能的情況。
如下面程序所示,將提取的要顯示漢字的字模數據定義成常量數組,如要顯示合肥”兩字。

再編制漢字顯示子函數write_hz。其中要調用另外兩個(gè)子函數lcd_wait和disp_address。lcd_wait為讀取液晶控制器是否忙函數,而disp_address為液晶控制器顯示緩沖區地址設置函數,可根據液晶控制器資料編制[1]。


函數write_hz的參數x和y對應液晶屏幕的顯示位置,其與液晶控制器顯示緩沖區中的地址通過(guò)行**可計算出,該行中的wide為事先定義的液晶屏每行字節數,對于dg12864液晶而言,wide為16。
函數write_hz根據16×16點(diǎn)陣漢字液晶控制器顯示緩沖區的存放形式,依次改變顯示地址,先將左半部1-16個(gè)字節寫(xiě)入顯示緩沖區,再寫(xiě)入右半部17-32個(gè)字節。若要液晶顯示“合肥”兩字,只要在程序中帶顯示地區參數調用該函數即可。如:
write_hz(0,4,0);//合
write_hz(0,10,0x20);//肥
(2)將提取的漢字字模數據存放在eprom或e2prom內,作為擴展的數據存儲器供單片機調用[2]。
采用哈佛結構的單片機,如8051單片機及其派生產(chǎn)品,程序存儲器(rom)和數據存儲器(ram)可分別尋址,51單片機rom和ram最大的尋址空間均為64k,通常來(lái)說(shuō),對于中型的嵌入式系統,尤其是帶液晶的單片機系統,64k的程序空間并不富裕,而將漢字字模作為常量數組會(huì )大大占用rom的空間,而相對來(lái)說(shuō),數據存儲器只需幾k就夠用了,剩下很多空間可用于功能芯片的擴展。
將提取的漢字字模數據存放在eprom或e2prom內,并設定該芯片的片選地址,則只要知道某個(gè)漢字字模數據在該芯片的存儲位置,通過(guò)程序計算出偏移地址,即可實(shí)現顯示功能,例如:設存放漢字字模數據的e2prom的片選地址為0x9000,則通過(guò)程序定義:
#define hz_dot 0x9000
#define vbyte (unsigned char volatile xdata*)
若要編制漢字顯示子函數write_hz,只要將上面write_hz函數中
***行換成lcd_data=*(vbyte(hz_dot+p+i));
****行換成lcd_data=*(vbyte(hz_dot+p+16+i);
(3)將整個(gè)漢字字庫存放在eprom或e2prom內,程序根據要顯示漢字的機內碼來(lái)調用漢字字模[3]。
某些高端單片機,如motorola的m68300系列32位單片機,尋址范圍可達8m,液晶顯示常用的16×16漢字庫二進(jìn)制數據文件為兩百多k,將漢字字庫存入大容量的e2prom,通過(guò)地址線(xiàn)可尋址到漢字庫中的每一個(gè)漢字。
在計算機中對漢字的識別是通過(guò)機內碼來(lái)實(shí)現的,漢字標準機內碼為兩字節代碼。漢字在漢字庫中是按照區位來(lái)排列的,每一區中有94個(gè)漢字,每個(gè)漢字都對應唯一的區號和在本區的位號,漢字輸入法中就有區位碼方法,實(shí)際上,漢字機內碼和區位碼有標準的對應關(guān)系,某個(gè)漢字在字庫中的區號加上0xa0等于其機內碼的高字節,位號加上0xa0等于其機內碼的低字節,因此很容易通過(guò)程序計算出要顯示的漢字在漢字庫中的區位號,即得到了其在漢字庫中的偏移地址。
由于e2prom中存儲了整個(gè)漢字庫,只須在硬件上設定存放漢字庫的存儲器片選地址,直接將漢字作為字符數組付給漢字顯示函數,通過(guò)機內碼計算出區號和位號,即可方便地對漢字字模進(jìn)行調用了。與前兩種方法相比,無(wú)須事先提取字模和設定其地址用于程序調用,因此在進(jìn)行程序升級,涉及到漢字顯示時(shí),不用更改漢字字模數據。
4 結語(yǔ)
本文介紹了圖形液晶的漢字顯示方法,并以8051單片機為基礎,結合液晶模塊與單片機的典型接口電路,介紹了3種存放漢字字模的方法,并給出c51程序例子,具有很強的使用指導性。
led顯示器相關(guān)文章:led顯示器原理
p2p機相關(guān)文章:p2p原理
存儲器相關(guān)文章:存儲器原理
評論