国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
hzk16的介紹以及簡單的使用方法
默認(rèn)分類 2011-01-01 13:06:13 閱讀9 評論0   字號:大中小
 hzk16的介紹以及簡單的使用方法
技術(shù)交流 2008-11-14 15:41:51 閱讀1658 評論1   字號:大中小
HZK16字庫是符合GB2312標(biāo)準(zhǔn)的16×16點(diǎn)陣字庫,HZK16的GB2312-80支持的漢字有6763個(gè),符號682個(gè)。其中一級漢字有3755個(gè),按聲序排列,二級漢字有3008個(gè),按偏旁部首排列。我們在一些應(yīng)用場合根本用不到這么多漢字字模,所以在應(yīng)用時(shí)就可以只提取部分字體作為己用。
HZK16字庫里的16×16漢字一共需要256個(gè)點(diǎn)來顯示,也就是說需要32個(gè)字節(jié)才能達(dá)到顯示一個(gè)普通漢字的目的。
我們知道一個(gè)GB2312漢字是由兩個(gè)字節(jié)編碼的,范圍為A1A1~FEFE。A1-A9為符號區(qū),B0到F7為漢字區(qū)。每一個(gè)區(qū)有94個(gè)字符(注意:這只是編碼的許可范圍,不一定都有字型對應(yīng),比如符號區(qū)就有很多編碼空白區(qū)域)。下面以漢字“我”為例,介紹如何在HZK16文件中找到它對應(yīng)的32個(gè)字節(jié)的字模數(shù)據(jù)。
前面說到一個(gè)漢字占兩個(gè)字節(jié),這兩個(gè)中前一個(gè)字節(jié)為該漢字的區(qū)號,后一個(gè)字節(jié)為該字的位號。其中,每個(gè)區(qū)記錄94個(gè)漢字,位號為該字在該區(qū)中的位置。所以要找到“我”在hzk16庫中的位置就必須得到它的區(qū)碼和位碼。(為了區(qū)別使用了區(qū)碼和區(qū)號,其實(shí)是一個(gè)東西,別被我誤導(dǎo)了)
區(qū)碼:區(qū)號(漢字的第一個(gè)字節(jié))-0xa0    (因?yàn)闈h字編碼是從0xa0區(qū)開始的,所以文件最前面就是從0xa0區(qū)開始,要算出相對區(qū)碼)
位碼:位號(漢字的第二個(gè)字節(jié))-0xa0
這樣我們就可以得到漢字在HZK16中的絕對偏移位置:
offset=(94*(區(qū)碼-1)+(位碼-1))*32
注解:1、區(qū)碼減1是因?yàn)閿?shù)組是以0為開始而區(qū)號位號是以1為開始的
2、(94*(區(qū)號-1)+位號-1)是一個(gè)漢字字模占用的字節(jié)數(shù)
3、最后乘以32是因?yàn)闈h字庫文應(yīng)從該位置起的32字節(jié)信息記錄該字的字模信息(前面提到一個(gè)漢字要有32個(gè)字節(jié)顯示)
有了偏移地址就可以從HZK16中讀取漢字編碼了,剩下的就是文件操作了,就不說了,要看代碼(漢字)就是下面的:“hzk16漢字庫的簡單讀寫程序 ”,是一個(gè)最簡單的c語言程序。
hzk16漢字庫的簡單讀寫程序
hzk漢字點(diǎn)陣
int    i,j,k;
unsigned    char    incode[3]="我";    //    要讀出的漢字
unsigned    char    qh,wh;
unsigned    long    offset;
//    占兩個(gè)字節(jié),    取其區(qū)位號
qh    =    incode[0]    -    0xa0;/ /獲得區(qū)碼
wh    =    incode[1]    -    0xa0;   / /獲得位碼
offset    =    (94*(qh-1)+(wh-1))*32;          /    *得到偏移位置*    /
FILE    *HZK;
char    mat[32];
if((HZK=fopen("hzk16",    "rb"))    ==    NULL)
{
printf("Can't    Open    hzk16\n");
exit(0);
}
fseek(HZK,    offset,    SEEK_SET);
fread(mat,    32,    1,    HZK);
//顯示
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /*測試為1的位則顯示*/
{
printf("%s",'#');
}else{   printf("%s",'-');
}
fclose(HZK);
fclose(fp);
圖形LCD模塊ACM19264ASB的漢字顯示
1引言
在基于單片機(jī)的智能系統(tǒng)中,漢字顯示模塊是很重要的一個(gè)組成部分,它應(yīng)用廣泛、操作容易、調(diào)試簡便。
然而,在單片機(jī)上顯示漢字也存在幾個(gè)問題。首先,單片機(jī)資源有限,我們不能為了顯示漢字占用太多的資源;其次,漢字存儲讀取比較繁瑣,使用不方便;第三,漢字是通過點(diǎn)陣顯示出來的,往往與LCD寫入方式不一樣,這就得進(jìn)行轉(zhuǎn)換和調(diào)整。
值得注意的是,基于單片機(jī)的漢字顯示不能在字符LCD上實(shí)現(xiàn)。使用圖形LCD有很多優(yōu)點(diǎn),不僅能顯示漢字,而且可以實(shí)現(xiàn)漢字動態(tài)移動和上下滾屏,實(shí)現(xiàn)漢字與圖形的混合顯示,同時(shí)功耗低。
2基于單片機(jī)的漢字顯示原理
2.1漢字字模
漢字一般是以點(diǎn)陣式存儲的,如16×16,24×24點(diǎn)陣(即漢字的字模),每個(gè)漢字由32字節(jié)(16點(diǎn)陣)或72字節(jié)(24點(diǎn)陣)描述。根據(jù)漢字的不同字體,也可分為宋體字模、楷體字模、黑體字模等等。
漢字的字模其實(shí)是漢字字形的圖形化。對于16點(diǎn)陣字模,就是把漢字寫在一個(gè)16×16的網(wǎng)格內(nèi),漢字的筆畫能過某網(wǎng)格時(shí)該網(wǎng)格就對應(yīng)1,否則該網(wǎng)格對應(yīng)0,這樣每一網(wǎng)格均對應(yīng)1或0,把對應(yīng)1的網(wǎng)格連起來看,就是這個(gè)漢字。漢字就是這樣通過字節(jié)表示點(diǎn)陣存儲在字庫中的。
為了方便查找所需漢字的點(diǎn)陣,每個(gè)漢字都與一個(gè)雙字節(jié)的內(nèi)碼一一對應(yīng)。通過漢字的內(nèi)碼可以計(jì)算出它的點(diǎn)陣起始字節(jié)?,F(xiàn)以16點(diǎn)陣為例說明。
先由內(nèi)碼計(jì)算出它在漢字庫中的區(qū)位碼,計(jì)算公式為:
區(qū)碼=內(nèi)碼第一字節(jié)-160
位碼=內(nèi)碼第二字節(jié)-160
再由區(qū)位碼可以得到它在漢字庫中字模第一個(gè)字節(jié)的位置:
(區(qū)碼×94+位碼)×32 于是,可以向后連續(xù)讀出由32個(gè)字節(jié)組成的該字的點(diǎn)陣數(shù)據(jù)。
2.2漢字顯示
漢字占用資源太多(如16點(diǎn)陣,每個(gè)漢字就需32字節(jié)),因而通常把漢字庫放在EEPROM里,需要顯示某個(gè)漢字時(shí),先算出它的區(qū)位碼,再求出點(diǎn)陣起始位置,從EEPROM中順序調(diào)出該字的點(diǎn)陣數(shù)據(jù),存在緩沖區(qū)里,最后依次送往LCD顯示,描出該字。需要說明的是漢字存儲方式與LCD顯示方式有一定差別。
本文使用另一種顯示方法,即事先將程序用到的漢字、符號和數(shù)碼(為了節(jié)省顯示空間,可以將數(shù)碼壓成8×16點(diǎn)陣),編成一個(gè)文本文件,用一段小程序做出相應(yīng)小的漢字庫,這個(gè)小字庫的漢字點(diǎn)陣數(shù)據(jù)取自于一般漢字庫。再經(jīng)過轉(zhuǎn)換和調(diào)整,得到新的漢字庫,最后把新字庫固化在EEPROM中。單片機(jī)只需按序號讀出點(diǎn)陣字節(jié),送往LCD即可顯示所需漢字。減輕了單片機(jī)的負(fù)擔(dān),去除了繁瑣的查找內(nèi)碼、求起始位置、轉(zhuǎn)換、調(diào)整等工作,提高了系統(tǒng)可靠性。
表116點(diǎn)陣漢字字庫存儲方式
 
3自定義小字庫的制作
典型的漢字庫可選用UCDOS下的字庫,如16點(diǎn)陣字庫HZK16。需要256K空間,用了較大的EEPROM,又不方便讀取,而實(shí)際應(yīng)用中需要的漢字又非常少,因而我們可以自己制作小的漢字庫,在這個(gè)小字庫里只包含系統(tǒng)需要的漢字。這樣,一方面節(jié)省讀取時(shí)間,另一方面大大地節(jié)省了資源。
限于篇幅,這里僅僅給出流程圖(假定事先將所需漢字寫到了一個(gè)文本文件),如圖1所示。
 
將整個(gè)漢字字庫存放在EPROM或E2PROM內(nèi),程序根據(jù)要顯示漢字的機(jī)內(nèi)碼來調(diào)用漢字字模。
某些高端單片機(jī),如Motorola的M68300系列32位單片機(jī),尋址范圍可達(dá)8M,液晶顯示常用的16×16漢字庫二進(jìn)制數(shù)據(jù)文件為兩百多k,將漢字字庫存入大容量的E2PROM,通過地址線可尋址到漢字庫中的每一個(gè)漢字。
在計(jì)算機(jī)中對漢字的識別是通過機(jī)內(nèi)碼來實(shí)現(xiàn)的,漢字標(biāo)準(zhǔn)機(jī)內(nèi)碼為兩字節(jié)代碼。漢字在漢字庫中是按照區(qū)位來排列的,每一區(qū)中有94個(gè)漢字,每個(gè)漢字都對應(yīng)唯一的區(qū)號和在本區(qū)的位號,漢字輸入法中就有區(qū)位碼方法,實(shí)際上,漢字機(jī)內(nèi)碼和區(qū)位碼有標(biāo)準(zhǔn)的對應(yīng)關(guān)系,某個(gè)漢字在字庫中的區(qū)號加上0xa0等于其機(jī)內(nèi)碼的高字節(jié),位號加上0xa0等于其機(jī)內(nèi)碼的低字節(jié),因此很容易通過程序計(jì)算出要顯示的漢字在漢字庫中的區(qū)位號,即得到了其在漢字庫中的偏移地址。
由于E2PROM中存儲了整個(gè)漢字庫,只須在硬件上設(shè)定存放漢字庫的存儲器片選地址,直接將漢字作為字符數(shù)組付給漢字顯示函數(shù),通過機(jī)內(nèi)碼計(jì)算出區(qū)號和位號,即可方便地對漢字字模進(jìn)行調(diào)用了。與前兩種方法相比,無須事先提取字模和設(shè)定其地址用于程序調(diào)用,因此在進(jìn)行程序升級,涉及到漢字顯示時(shí),不用更改漢字字模數(shù)據(jù)。
漢字的字模與顯示--漢字的代碼體系
目 錄
1.1 漢字機(jī)內(nèi)碼
1.2 漢字地址碼
1.3 漢字交換碼
1.4 漢字字型碼
----------------------------------------------------------------------
在漢字信息處理系統(tǒng)中存在著多種漢字編碼。一般來說,在系統(tǒng)的不同部位,可根據(jù)其環(huán)境給漢字定以相應(yīng)的編碼,因?yàn)樵跐h字信息處理系統(tǒng)中存在著數(shù)種漢字編碼。這些編碼構(gòu)成了一個(gè)漢字的代碼體系。
1.1、漢字機(jī)內(nèi)碼
漢字機(jī)內(nèi)碼(亦稱漢字內(nèi)碼)是系統(tǒng)內(nèi)部處理和存儲漢字而使用的代碼。眾所周知,西文字符的機(jī)內(nèi)碼多采用一個(gè)字節(jié)來表示的ASCII碼,有的系統(tǒng)則采用EBCDIC碼。一般只使用7位來表示128個(gè)字符,而把高位用作奇偶校驗(yàn)(或者不用)。我國的國標(biāo)GB2312-80規(guī)定,一個(gè)漢字用兩個(gè)字節(jié)表示,目前規(guī)定每個(gè)字節(jié)也只用七位,其高位未作定義。
為了保證系統(tǒng)的中西文兼容,意味著系統(tǒng)的機(jī)內(nèi)碼中必須保持ASCII(IBM-PC采用該碼作為西文字符的機(jī)內(nèi)碼)的使用,同時(shí)又要允許漢字機(jī)內(nèi)碼的使用,并且使兩者之間沒有沖突。如果用GB2312-80中的國標(biāo)碼作為機(jī)內(nèi)碼,則在系統(tǒng)中同時(shí)存在ASCII碼和國標(biāo)碼時(shí),將會產(chǎn)生二義性。例如,機(jī)內(nèi)有兩個(gè)字節(jié)的內(nèi)容分別為30H和21H,它們既可以表示漢字“啊”的國標(biāo)碼,又可以表示字符“0”和“!”的ASCII碼。所以,原原本本地采用國標(biāo)碼作為漢字機(jī)內(nèi)碼是不行的,必須要加以適當(dāng)?shù)淖儞Q。
一般情況下是將國標(biāo)碼的每個(gè)字節(jié)的高位置成1,作為漢字機(jī)內(nèi)碼,這種編碼稱作為變形國標(biāo)碼。這樣作既解決了西文機(jī)內(nèi)碼與漢字機(jī)內(nèi)碼的二義性,又保證漢字機(jī)內(nèi)碼與國標(biāo)碼之間有極簡單的對應(yīng)關(guān)系。其組織如下:
內(nèi)碼 ch1 ch2
不 不
1字節(jié) 1字節(jié)
根據(jù)CGB2312-80中的漢字、圖形符號,根據(jù)其位置分為94個(gè)“區(qū)”,每個(gè)區(qū)包含94個(gè)漢字,每個(gè)漢字字符又稱作“位”。其中“區(qū)”的序號,由01到94,“位”的序號,也是從01到94。若以橫向表示“位”號,縱向表示“區(qū)”號,則“區(qū)”和“位”構(gòu)成一個(gè)二維坐標(biāo)。給定一個(gè)“區(qū)”值和“位”值就可以確定一個(gè)唯一的漢字或圖形符號。所以4位數(shù)字就可以唯一確定一個(gè)漢字或符號,下面給出漢字的區(qū)內(nèi)和內(nèi)碼對應(yīng)關(guān)系表。
區(qū)位碼(10進(jìn)制) 內(nèi)碼(16進(jìn)制)
區(qū)號 位號 高字節(jié) 低字節(jié)
1—9 1—94 A1—A9 A1—FE
10—12 1—94 AA—AC A1—FE
13—15 1—94 AD—AF A1—FE
16—87 1—94 B0—F7 A1—FE
1.2、漢字地址碼
漢字地址碼是指漢字字模庫(這里主要指整字形的點(diǎn)陣字模庫)中存儲各漢字字形信息的邏輯地址碼。中文系統(tǒng)中的漢字字模庫有兩種,它們分別存放在RAM(或EPROM)中和磁盤上。故中文系統(tǒng)中的漢字地址碼有兩種,一種采用內(nèi)存地址數(shù)來表示(對應(yīng)RAM和EPROM中的字庫),另外一種采用盤地址來表示(對應(yīng)于磁盤中的字庫)。由于中文系統(tǒng)的漢字字模庫中漢字字形信息排列的規(guī)則,使得中文系統(tǒng)的漢字字模庫中的漢字字形信息排列序列的規(guī)則,使得中文系統(tǒng)的漢字地址碼與漢字機(jī)內(nèi)碼之間存在著一個(gè)簡單的函數(shù)關(guān)系。
1.3、漢字交換碼
漢字交換碼是一種用于漢字信息處理系統(tǒng)之間,或者與通訊系統(tǒng)之間進(jìn)行信息交換的漢字代碼。漢字交換碼位于一臺機(jī)器的出口和另一臺機(jī)器(包括輸出設(shè)備與記錄設(shè)備)的入口之間。為了要達(dá)到系統(tǒng)設(shè)備之間或記錄介質(zhì)之間信息交換的目的,漢字交換碼必須采取統(tǒng)一的形式。目前國內(nèi)計(jì)算機(jī)系統(tǒng)所采用的標(biāo)準(zhǔn)信息處理交換碼,是根據(jù)國家標(biāo)準(zhǔn)制定的,即GB1988 — 《信息處理交換使用的七位編碼字符集》;還制定了相應(yīng)的代碼擴(kuò)充標(biāo)準(zhǔn),即GB2311 — 《信息處理交換使用的七位編碼字符集的擴(kuò)充方法》。因?yàn)闈h字交換碼應(yīng)與GB1988兼容,并根據(jù)GB2311所規(guī)定的方法進(jìn)行編制。由于漢字?jǐn)?shù)量遠(yuǎn)遠(yuǎn)大于七位編碼所能表示的六千多個(gè)常用漢字制定了交換碼的國家標(biāo)準(zhǔn),即GB2312 — 《信息交換用漢字編碼字符基本集》,其中每個(gè)漢字用對應(yīng)于GB1988的兩個(gè)七位碼來表示。
1.4、漢字字型碼
由于目前漢字信息處理系統(tǒng)中產(chǎn)生漢字字形的方式大多是數(shù)字式的,即以點(diǎn)陣的方式形成漢字,過漢字字形碼是指確定一個(gè)漢字字形碼也就不同。
漢字庫的使用
UCDOS軟件中的文件HZK16為16×16的國標(biāo)漢字點(diǎn)陣文件,以二進(jìn)制格式存儲。在文件HZK16中,按漢字區(qū)位碼從小到大依次存有國標(biāo)區(qū)位碼表中的所有漢字,每個(gè)漢字占用32個(gè)字節(jié),每個(gè)區(qū)為94個(gè)漢字。
在PC機(jī)的文本文件中,漢字是以機(jī)內(nèi)碼的形式存儲的,每個(gè)漢字占用兩個(gè)字節(jié):第一個(gè)字節(jié)為區(qū)碼,為了與ASCII碼區(qū)別,范圍從十六進(jìn)制的0A1H開始(小于80H的為ASCII碼字符),對應(yīng)區(qū)位碼中區(qū)碼的第一區(qū);第二個(gè)字節(jié)為位碼,范圍也是從0A1H開始,對應(yīng)某區(qū)中的第一個(gè)位碼。這樣,將漢字機(jī)內(nèi)碼減去0A0AH就得該漢字的區(qū)位碼。
例如漢字“房”的機(jī)內(nèi)碼為十六進(jìn)制的“B7BF”,其中“B7”表示區(qū)碼,“BF”表示位碼。所以“房”的區(qū)位碼為0B7BFH-0A0A0H=171FH。將區(qū)碼和位碼分別轉(zhuǎn)換為十進(jìn)制得漢字“房”的區(qū)位碼為“2331”,即“房”的點(diǎn)陣位于第23區(qū)的第31個(gè)字的位置,相當(dāng)于在文件HZK16中的位置為第32×[(23-1) ×94+(31-1)]=67136B以后的32個(gè)字節(jié)為“房”的顯示點(diǎn)陣。
下面給出一個(gè)根據(jù)漢字機(jī)內(nèi)碼(兩字節(jié))在漢字庫中查找漢字的字模的程序。字庫文件分成四部分,分別存在四片27512(并行EPROM)中。讀出的字模存入hz_buffer[32]數(shù)組中。
int8 hz_buffer[32];//定義32字節(jié)數(shù)組,用于存儲點(diǎn)陣字模,該字模為橫排字模。
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
/*
函數(shù)void read_hz(int16 hz)的參數(shù)hz為兩字節(jié)的機(jī)內(nèi)碼,調(diào)用方法:read_hz(‘漢’);
對ASCII字符,則read_hz('A'+0xa380);讀取
*/
void   read_hz(int16 hz){
void   *void_p;//定義一個(gè)空類型指針
int8    *int8_p;//定義一個(gè)unsigned char 指針
int8    i;   //定義一個(gè)循環(huán)變量
int16  area_l,area_h;//定義兩個(gè)整型變量,用于存儲區(qū)碼和位碼
int32  pos;  //定義一個(gè)long型變量,用于存儲計(jì)算所得字模在字庫的位置,
int8   chip;  //字模所在的芯片,可用74HC138之類的芯片譯碼。
int16  addr;  //在某一芯片64K字節(jié)空間內(nèi)的地址
void_p=&hz;    //空指針指向機(jī)內(nèi)碼的低字節(jié)
int8_p=void_p;    //char類型指針指向空指針,即機(jī)內(nèi)碼的低字節(jié)
area_l=*int8_p-0xa0; //機(jī)內(nèi)碼低字節(jié)減去0xa0得到區(qū)碼
area_h=*(int8_p+1)-0xa0; //機(jī)內(nèi)碼高字節(jié)減去0xa0得到位碼
pos=32*((int32)((area_h-1)*94)+area_l-1); //計(jì)算在一個(gè)完整的字庫中的位置(256K)
//pos=116672;        //這是“請”字在HZK16文件中的位置,單位為字節(jié)。用于測試
if(pos<64*1024)   //在第一片27512芯片
{
chip=0;addr=(int16)pos;
}
else if((pos>=64*1024)&&(pos<128*1024)) //在第二片27512芯片
{
chip=1;
addr=(int16)pos;
}
else if((pos>=128*1024)&&(pos<192*1024)) //在第三片27512芯片
{
chip=2;
addr=(int16)pos;
}
else if((pos>=192*1024)&&(pos<256*1024)) //在第四片27512芯片
{
chip=3;
addr=(int16)pos;
}
select_chip(chip);   //選擇第chip片27512芯片
for(i=0;i<32;i++)
{
hz_buffer[i]=read_data(addr+i); //讀取一字節(jié)的數(shù)據(jù)
}
}
在實(shí)際中,由于現(xiàn)很少采用EPROM芯片,可以用并口、SPI,I2C接口的大容量Flash、EEPROM芯片。但I(xiàn)2C接口速度較慢,顯示漢字的速度將會很慢,可以在一些比較少字場合使用;而SPI接口的存儲芯片速度較快,接口簡單,對于一般的應(yīng)用場合還是可以滿足的;對于大量使用的場合,可以使用并行接口,它具儲存空間大,讀取速度快的特點(diǎn),如使用AT29系列的Flash存儲器,單片容量可以達(dá)到256K以上,就不需要分開存儲,但其需要較多的IO口,接口復(fù)雜。所以應(yīng)根據(jù)實(shí)際來選擇存儲器。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
漢字任意點(diǎn)陣字庫制作軟件,多國語言點(diǎn)陣字庫制作軟件,漢字點(diǎn)陣,民航電子客票打印,民航客戶管理軟件
點(diǎn)陣字模原理與讀取
字庫注意事項(xiàng)
計(jì)算機(jī)漢字顯示原理(點(diǎn)陣字)轉(zhuǎn)_家潤工作室
第四章 漢字信息處理基礎(chǔ)知識
刨根究底字符編碼之六——簡體漢字編碼中區(qū)位碼、國標(biāo)碼、內(nèi)碼、外碼、字形碼的區(qū)別及關(guān)系
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服