T6963C是一款在儀表中使用得比較多的一種液晶顯示控制器。提供文本和點陣兩種輸出方式,但點陣輸出的速度比文本顯示的速度要慢很多。在文本方式下,其CGROM控制128個英文ASCII碼字符,CGRAM則可由用戶自定義32個漢字或128個自定義圖形。
由于儀表中使用的漢字經(jīng)常超過32個,因此,需要對漢字的顯示作特別的處理。但由于漢字的處理有些特殊,因此,很多開發(fā)人員即偷懶,直接使用點陣需出。
昨天,我到一家比較有名的電力企業(yè)參觀,見其儀表的顯示速度非常之慢,可以斷定它的顯示是采用點陣而不是采用文本方式,于是寫了此文章。
原理:利用液晶故有的CGRAM,將一個漢字作為四個字符,以文本方式顯示漢字。
方法:CGRAM中能顯示的字符從80H到FFH,共128個。其中,每連續(xù)四個字符作為顯示一個漢字。故能顯示的漢字量為32個。但在系統(tǒng)中使用的漢字數(shù)可能會超過32個。所以,采用數(shù)據(jù)緩沖技術(shù),在需要顯示漢字時,臨時構(gòu)成字符顯示碼。
漢字點陣是以表格形式ChineseTable保存在數(shù)據(jù)區(qū)中。
建立一個長度為16的字符數(shù)組CharFlagTable,用來保存當前系統(tǒng)CGRAM中可顯示的漢字編號。為了加快系統(tǒng)顯示漢字的速度,將漢字分成兩組:一級漢字;二級漢字,一級漢字永遠保存在CGRAM中,不需要記錄編號;而二級漢字在需要顯示時,才調(diào)于到CGRAM中,需要CharFlagTable來記錄編號。其中一級漢字為16個,規(guī)定在ChineseTable中前16個漢字為一級漢字,其余的漢字為二級漢字。
程序初始化時,將一級漢字調(diào)入和前16個二級漢字同時調(diào)入CGRAM;并將CharFlagTable的內(nèi)容清為0。
WriteOneChin函數(shù)實現(xiàn)方法:
根據(jù)需要顯示的漢字的編號,計算此漢字對應(yīng)的CharFlagTable編號Num和序列編號Offset,計算方法為:
if (漢字的編號>=16)
{
Num=(漢字的編號-16)%16;
Offset=(漢字的編號-16)/16;
}
再判斷對應(yīng)Num編號的CharFlagTable中的序列編號,如果兩者相等,則直接顯示該漢字字符,否則,將對應(yīng)漢字字模調(diào)入CGRAM中后,再顯示該漢字。
為了提高顯示速度,可以將整個顯示模式改為非圖形模式。
定義全局靜態(tài)數(shù)組:
statICsigned char CharFlagTable[16];
定義如下函數(shù):
void InitCGRAM(void);
//功能:完成初始化CGRAM字符顯示區(qū),初始化CharFlagTable表格,程序邏輯如下:
{
for (I=0;I<16;I++) CharFlagTable[I]=0;
for (I=0;I<32;I++)WriteCGRAM(I);
}
void WriteCGRAM(unsigned int ChinNo);
//功能:完成將對應(yīng)編號的漢字的字模點陣信息寫入到對應(yīng)的CGRAM內(nèi)存區(qū),程序邏輯如下:
{
if (ChinNo<16) Num=ChinNo;
else Num=(ChinNo-16)%16+16;
Num*=4;
Num+=0x80; ////得到對應(yīng)編號漢字的四個字符中第一個字符編號;
{將編號為ChinNo的漢字數(shù)組送入到Num到Num+3四個字符中}
}