字库芯片学习之汉字内码
前言:
漢字機(jī)內(nèi)碼,又稱“漢字ASCII碼”,簡稱“內(nèi)碼”,指計(jì)算機(jī)內(nèi)部存儲(chǔ),處理加工和傳輸漢字時(shí)所用的由0和1符號(hào)組成的代碼。輸入碼被接受后就由漢字操作系統(tǒng)的“輸入碼轉(zhuǎn)換模塊”轉(zhuǎn)換為機(jī)內(nèi)碼,與所采用的鍵盤輸入法無關(guān)。機(jī)內(nèi)碼是漢字最基本的編碼,不管是什么漢字系統(tǒng)和漢字輸入方法,輸入的漢字外碼到機(jī)器內(nèi)部都要轉(zhuǎn)換成機(jī)內(nèi)碼,才能被存儲(chǔ)和進(jìn)行各種處理。?
漢字在計(jì)算機(jī)內(nèi)部其內(nèi)碼是唯一的,GB碼的機(jī)內(nèi)碼為二字節(jié)長的代碼。 GB碼的機(jī)內(nèi)碼為二字節(jié)長的代碼,它是在相應(yīng)GB碼的每個(gè)字節(jié)最高位上加“1”,即 漢字機(jī)內(nèi)碼=漢字國標(biāo)碼+8080H 例如,上述“啊”字的國標(biāo)碼是3021H,其漢字機(jī)內(nèi)碼則是B0A1H。 漢字機(jī)內(nèi)碼的基礎(chǔ)是漢字國際碼。 機(jī)內(nèi)碼:為了避免ASCII碼和國標(biāo)碼同時(shí)使用時(shí)產(chǎn)生二義性問題,大部分漢字系統(tǒng)都采用將國標(biāo)碼每個(gè)字節(jié)高位置1作為漢字機(jī)內(nèi)碼。這樣既解決了漢字機(jī)內(nèi)碼與西文機(jī)內(nèi)碼之間的二義性,又使?jié)h字機(jī)內(nèi)碼與國標(biāo)碼具有極簡單的對(duì)應(yīng)關(guān)系。 漢字機(jī)內(nèi)碼、國標(biāo)碼和區(qū)位碼三者之間的關(guān)系為:區(qū)位碼(十進(jìn)制)的兩個(gè)字節(jié)分別轉(zhuǎn)換為十六進(jìn)制后加20H得到對(duì)應(yīng)的國標(biāo)碼;機(jī)內(nèi)碼是漢字交換碼(國標(biāo)碼)兩個(gè)字節(jié)的最高位分別加1,即漢字交換碼(國標(biāo)碼)的兩個(gè)字節(jié)分別加80H得到對(duì)應(yīng)的機(jī)內(nèi)碼;區(qū)位碼(十進(jìn)制)的兩個(gè)字節(jié)分別轉(zhuǎn)換為十六進(jìn)制后加A0H得到對(duì)應(yīng)的機(jī)內(nèi)碼。 舉例:機(jī)內(nèi)碼位BEDF,求區(qū)位碼? 有兩種解法:1.BEDFH-A0A0H=1E3FH=3063D;2.BEDFH-8080H=3E5FH(國標(biāo)碼),3E5FH-2020H=1E3FH=3063D.
?
?正文:
?????? 在使用字庫芯片時(shí),用戶只要知道字符的內(nèi)碼,就可以計(jì)算出該字符點(diǎn)陣在芯片中的地址,然后就可從該地址連續(xù)讀出
點(diǎn)陣信息用于顯示。
?????????? 也就是說給字庫芯片輸入的是漢字的內(nèi)碼,從芯片里面輸出的是字符點(diǎn)陣,比如 8*8點(diǎn)陣,8*16 點(diǎn)陣? 15*16 點(diǎn)陣, 這些點(diǎn)陣也就是漢字顯示在屏幕上的模,可以直接顯示在液晶屏上。這些點(diǎn)陣也是一系列的二進(jìn)制或者16進(jìn)制組成,在沒有辦法顯示在液晶上的時(shí)候,可以比對(duì) 在其他地方讀出的點(diǎn)陣 二進(jìn)制測試字庫芯片是否正確讀出數(shù)據(jù)。
字符點(diǎn)陣實(shí)例8*8寫“王”:
11111111
00011000
00011000
11111111
00011000
00011000
00011000
11111111
?
?? 那么寫入芯片的字庫內(nèi)碼怎么得到?上面已經(jīng)說了,“不管是什么漢字系統(tǒng)和漢字輸入方法,輸入的漢字外碼到機(jī)器內(nèi)部都要轉(zhuǎn)換成機(jī)內(nèi)碼,才能被存儲(chǔ)和進(jìn)行各種處理”,也就是會(huì)說,在程序中寫入的漢字就是用漢字內(nèi)碼的形式存儲(chǔ)的,只要將存儲(chǔ)漢字的地址里的內(nèi)容取出就行了,里面就是內(nèi)碼!!OK!現(xiàn)在對(duì)于字庫芯片的理解已經(jīng)說完。接下來就是連接設(shè)置芯片引腳什么的了,在此就不多贅述。
lcd 輸入實(shí)例:
??print_24 ( 0,36,"劉艷磊",0x00 );
程序范例(在字庫芯片 .c 文件中):
現(xiàn)在使用的字庫芯片是用SPI通信的,其讀寫代碼如下:
void GT23_Write( uint32_t f )
{
?uint8_t x;
?uint32_t smj;
?smj= ( ( READ<<24 ) | f );
?for ( x=0; x<32; x++ )
?{
??GT_sclk0;
??if ( ( smj&0x80000000 ) )
???{GT_si1;}
??else
???{GT_si0;}
??smj=smj<<1;
??GT_sclk1;
?}
}
uint8_t GT23_Read()
{
?uint8_t x,GY23_addr=0x00,ss;
?for ( x=0; x<8; x++ )
?{
??GT_sclk0;//下降沿
??GY23_addr=GY23_addr<<1;
??for(ss=0;ss<1;ss++){;};
??if ( 0x04==P1_26 ) //判斷數(shù)據(jù)值
???{GY23_addr= (GY23_addr|0x01);}
??else??????? //寫出數(shù)據(jù)值
???{GY23_addr= (GY23_addr|0x00);}
??GT_sclk1;
?}
?return GY23_addr;
}
字庫芯片中字符地址計(jì)算函數(shù):
uint32_t GT23_write_15( const char *a )??//*a為寫入芯片的字,將漢字寫入函數(shù),函數(shù)會(huì)自動(dòng)算出字符矩陣(模)在字庫芯片里面的地址,可以用來直接顯示在LCD上。
{
?uint32_t Address15=0;
?uint8_t MSB15,LSB15;
?MSB15=*a;
?a++;
?LSB15=*a;
?if ( MSB15 >=0xA1 && MSB15 <= 0Xa9 && LSB15 >=0xA1 )
??Address15 = ( ( MSB15 - 0xA1 ) * 94 + ( LSB15 - 0xA1 ) ) *32+ BaseAdd15; //計(jì)算字符在芯片里面地址的算法
?else if ( MSB15 >=0xB0 && MSB15 <= 0xF7 && LSB15 >=0xA1 )
??Address15 = ( ( MSB15 - 0xB0 ) * 94 + ( LSB15 - 0xA1 ) + 846 ) *32+ BaseAdd15;//計(jì)算字符在芯片里面地址的算法
?return Address15;
}
補(bǔ)(下面這些算法字庫芯片手冊(cè)里面會(huì)有的):
?15X16點(diǎn)GB2312標(biāo)準(zhǔn)點(diǎn)陣字庫
參數(shù)說明:
GBCode表示漢字內(nèi)碼。
MSB 表示漢字內(nèi)碼GBCode 的高8bits。
LSB 表示漢字內(nèi)碼GBCode 的低8bits。
Address 表示漢字或ASCII字符點(diǎn)陣在芯片中的字節(jié)地址。
BaseAdd:說明點(diǎn)陣數(shù)據(jù)在字庫芯片中的起始地址。
計(jì)算方法:
BaseAdd=0x5F4C0;?
if(MSB >=0xA1 && MSB <= 0Xa3 && LSB >=0xA1)//全角字符1區(qū)1部分
? Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*32+ BaseAdd;
else if(MSB ==0xA6 && LSB >=0xA1)//全角字符1區(qū)2部分
? Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1)-94*2 )*32+ BaseAdd;
else if(MSB ==0xA9 && LSB >=0xA1)//全角字符1區(qū)3部分
? Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1)-94*4 )*32+ BaseAdd;?
else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1)//16點(diǎn)陣漢字區(qū)
? Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 662)*32+ BaseAdd;
?
?
結(jié)尾:
關(guān)于對(duì)于字庫芯片哪有有誤的,歡迎留言!!
轉(zhuǎn)載請(qǐng)附連接:http://blog.csdn.net/lyl494223339/article/details/7912554#reply
總結(jié)
以上是生活随笔為你收集整理的字库芯片学习之汉字内码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个磁力API接口,可自动将磁力链接转换
- 下一篇: cocos2d 解密ccbi_Cocos