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