字模的原理和獲取 一

2021-05-23 07:05:55 字數 2232 閱讀 6808

一、什麼是字模

微控制器應用經常會用到液晶顯示模組,是用點陣的方式顯示的,要顯示漢字或字元的時候會用到字模,字模就是字在點陣上顯示時對應的編碼,如圖

1顯示的「正」字,使用16×

16點陣。點陣中黃色的點是高亮的,對應於二進位制編碼中的1,綠色的低亮對應於二進位制編碼中的0。如第一行 二進位制編碼應該是 00000000 00001000 剛好用兩個位元組表示就是 0x0,0x08,這樣,16總共需要用32個位元組來表示,這32個位元組就是「正」的字模。在微控制器程式中,將字模傳送給液晶顯示模組,就能夠顯示出響應的漢字或字元。

二、字模的獲取

漢字的點陣字模是從點陣字型檔檔案中提取出來的。例如常用的16×

16點陣

hzk16

檔案,12×12

點陣hzk12

檔案等等,這些檔案包括了

gb 2312

字符集中的所有漢字。現在只要弄清漢字點陣在字型檔檔案中的格式,就可以按照自己的意願去顯示漢字了。

下面以hzk16

檔案為例,分析取得漢字點陣字模的方法。

hzk16

檔案是按照

gb 2312-80

標準,也就是通常所說的國標碼或區位碼的標準排列的。國標碼分為

94 個區

(section)

,每個區

94 個位

(position

),所以也稱為區位碼。其中01~

09 區為符號、數字區,16~

87 區為漢字區。而10~

15 區、88~

94 區是空白區域。

如何取得漢字的區位碼呢?在計算機處理漢字和

ascii

字元時,使每個

ascii

字元占用

1個位元組,而乙個漢字占用兩個位元組,其值稱為漢字的內碼。其中第乙個位元組的值為區號加上

32(20h)

,第二個位元組的值為位號加上

32(20h)

。為了與

ascii

字元區別開,表示漢字的兩個位元組的最高位都是

1,也就是兩個位元組的值都又加上了

128(80h)

。這樣,通過漢字的內碼,就可以計算出漢字的區位碼。

具體算式如下:

qh=c1-32-128=c1-160 wh=c2-32-128=c2-160 或

qh=c1-0xa0 wh=c2-0xa0

qh,wh

為漢字的區號和位號,

c1,c2

為漢字的第一位元組和第二位元組。

根據區號和位號可以得到漢字字模在檔案中的位置:

location=(94*(qh

-1)+(wh

-1))*

乙個點陣字模的位元組數。

上面計算過,

乙個16×16

點陣的漢字總共需要

16*16/8=32

個位元組表示。字模的表示順序為:先從左到右,再從上到下,也就是先畫左上方的

8個點,再是右上方的

8個點,然後是第二行左邊

8個點,右邊

8個點,依此類推,畫滿16×

16個點。

對於其它點陣字型檔檔案,則也是使用類似的方法進行顯示。例如

hzk12

,但是hzk12

檔案的格式有些特別,如果你將它的字模當作

12*12

位計算的話,根本無法正常顯示漢字。因為字型檔設計者為了使用的方便,字模每行的位數均補齊為

8的整數倍,於是實際該字型檔的位長度是

16*12

,每個字模大小為

24位元組,雖然每行都多出了

4位,但這

4位都是

0(不顯示),並不影響顯示效果。

還有ucdos

下的hzk24s

(宋體)、

hzk24k

(楷體)或

hzk24h

(黑體)這些列印字型檔檔案,每個字模占用

24*24/8=72

位元組,不過這類大字模漢字型檔為了列印的方便,將字模都放倒了,所以在顯示時要注意把橫縱方向顛倒過來就可以了。

字模獲取工具的製作

根據原理,先開啟檔案,然後根據漢字的內碼獲取區碼和位碼,然後根據區嗎和位碼索引到檔案中的位址,再讀取32個位元組資料到buffer中即大功告成。

下面是vc中的一段**,供參考:

上面獲取的漢字,預設是宋體的,假如對字型有要求,就要選用相應字型的字型檔。當然,大多數時候在液晶上顯示是不會在乎字型的,可能看習慣了,感覺宋體最適合點陣顯示了。

浮點數字模式和實體模式的轉換

1 概念 浮點數的位模式是計算機儲存浮點數的二進位制數,比如 float f 12345 12345是f的實體模式,f的位模式為0x4640e400 double d 12345 12345是d的實體模式,d的位模式為0x40c81c8000000000 機器 不包含關於字段宣告或欄位名字的資訊,即...

Ucos ii中獲取最高優先順序的原理(任務和事件)

ucos ii中獲取最高優先順序的原理 任務和事件 2009 08 02 19 12 1.任務優先順序表是按照由左至右,由上至下的順序增長的,且優先順序號越小優先順序越高。2.任務優先順序儲存在乙個位元組型陣列裡,陣列大小為8,其還有乙個行表,即乙個位元組單元,用於確定在陣列的哪行有任務。3.任務優...

cookie的原理和一些現象

就好比白雲和黑土兩人在一起,規定以後兩人溝通統一用兩人約定好的語言去交流,白雲伸出左手,那麼黑土看到這個動作就會做出判斷,哦,原來是要捶腿,於是立馬撲上去捶腿。白雲伸右手,黑土一看,媽呀,這是要喝水的節奏,於是立馬遞水過去,此時白雲伸出左腳,黑土立馬親一口。兩人的溝通正是因為遵循了彼此之間的約定,所...