一、什麼是字模
微控制器應用經常會用到液晶顯示模組,是用點陣的方式顯示的,要顯示漢字或字元的時候會用到字模,字模就是字在點陣上顯示時對應的編碼,如圖
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的原理和一些現象
就好比白雲和黑土兩人在一起,規定以後兩人溝通統一用兩人約定好的語言去交流,白雲伸出左手,那麼黑土看到這個動作就會做出判斷,哦,原來是要捶腿,於是立馬撲上去捶腿。白雲伸右手,黑土一看,媽呀,這是要喝水的節奏,於是立馬遞水過去,此時白雲伸出左腳,黑土立馬親一口。兩人的溝通正是因為遵循了彼此之間的約定,所...