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