28 1 LTDC顯示中英文

2021-08-21 08:22:09 字數 2832 閱讀 4428

1.字元編碼

由於計算機只能識別 0 和 1,文字也只能以 0 和 1 的形式在計算機裡儲存,所以我們需要對文字進行編碼才能讓計算機處理,編碼的過程就是規定特定的 01 數字串表示特定的文字,最簡單的字元編碼例子是 ascii 碼。

2.中文編碼

(1).gb2312 標準

當我們設定系統使用 gb2312 標準的時候,它遇到乙個字串時,會按位元組檢測字元值的大小,若遇到連續兩個位元組的數值都大於 127 時就把這兩個連續的位元組合在一起,用 gb2312 解碼,若遇到的數值小於 127,就直接用 ascii 把它解碼。

區位碼

在 gb2312 編碼的實際使用中,有時會用到區位碼的概念,見圖 28-1。 gb2312 編碼對所收錄字元進行了「分割槽」處理,共 94 個區,每區含有 94 個位,共 8836 個碼位。 而區位碼實際是 gb2312 編碼的內部形式,它規定對收錄的每個字元採用兩個位元組表示,第乙個位元組為「高位元組」,對應 94 個區;第二個位元組為「低位元組」,對應 94 個位。所以它的區位碼範圍是: 0101-9494。為相容 ascii 碼,區號和位號分別加上 0xa0 偏移就得到gb2312 編碼。在區位碼上加上 0xa0 偏移,可求得 gb2312 編碼範圍: 0xa1a1-0xfefe,其中漢字的編碼範圍為 0xb0a1-0xf7fe,第一位元組 0xb0-0xf7(對應區號: 16-87),第二個位元組 0xa1-0xfe(對應位號: 0194)。

例如,「啊」字是 gb2312 編碼中的第乙個漢字,它位於 16 區的 01 位,所以它的區

位碼就是 1601,加上 0xa0 偏移,其 gb2312 編碼為 0xb0a1。其中區位碼為 0101 的碼位表示的是「空格」符。

(2).gbk 編碼

(3).gb18030

(4).big5 編碼

3.unicode 字符集和編碼

(1).utf-32

(2).utf-16

(3).utf-8

4.bom

5.字模

如果僅有字元編碼,計算機還不知道該如何表達該字元,因為字元實際上是乙個個獨特的圖形,計算機必須把字元編碼轉化成對應的字元圖形人類才能正常識別,因此我們要給計算機提供字元的圖形資料,這些資料就是字模,多個字模資料組成的檔案也被稱為字型檔。計算機顯示字元時,根據字元編碼與字模資料的對映關係找到它相應的字模資料,液晶屏根據字模資料顯示該字元。

(1).字模的構成

已知字模是圖形資料,而圖形在計算機中是由乙個個畫素點組成的,所以字模實質是乙個個畫素點資料。為方便處理,我們把字模定義成方塊形的畫素點陣,且每個畫素點只有 0 和 1 這兩種狀態(可以理解為單色影象資料)。

(2).字模顯示原理

如果使用 lcd 的畫點函式,按位來掃瞄這些字模資料,把為 1 的位以黑色來顯示(也可以使用其它顏色),為 0 的資料位以白色來顯示,即可把整個點陣還原出來,顯示在液晶屏上。

/* 當(0)字模資料

*///24*24

uint8_t charater =

;/*"當",0*/

//x和y為漢字顯示的起始座標,charater為漢字的gb2312編碼

void dis_charater(uint16_t x, uint16_t y, uint16_t charater) //讀取出flash儲存的字模代表的漢字,並顯示在液晶上;

//掃瞄一行內的第二個位元組資料

for(j=0;j<8;j++) //掃瞄各個畫素點

//掃瞄一行內的第三個位元組資料

for(j=0;j<8;j++) //掃瞄各個畫素點}}

(3).字模定址公式

addr = (((codeh-0xa0-1)*94) +(codel-0xa0-1))*24*24/8

每個字模的大小為 24x24/8=72 位元組,需要根據字型大小修改。

6.直接顯示漢字在led上

因為keil5設定為gb2312編碼,所以字串的格式在keil中是gb2312編碼的格式儲存!

uint8_t charater_data_buffer[72]=;

//getcharaterdata(charater_data_buffer,0xbaba); 'c' \0

void getcharaterdata(uint8_t *pbuffer,uint16_t charater) //讀取出flash儲存的字模代表的漢字

/* 當(0)字模資料

*///24*24

uint8_t charater =

;/*"當",0*/

//x和y為漢字顯示的起始座標,charater為漢字的gb2312編碼

void dis_charater(uint16_t x, uint16_t y, uint16_t charater) //讀取出flash儲存的字模代表的漢字,並顯示在液晶上;

//掃瞄一行內的第二個位元組資料

for(j=0;j<8;j++) //掃瞄各個畫素點

//掃瞄一行內的第三個位元組資料

for(j=0;j<8;j++) //掃瞄各個畫素點

p += (lcd_width-24); //指向下一行字模矩陣所在的視訊記憶體空間

//printf("\n");

}}//dis_string("漢字演示") // 0xbaba 0***xx 0***xx 0***xx\0

void dis_string(uint16_t x, uint16_t y,char *pstring) //獲取到gb2312的編碼

}

powderdesinger顯示中英文表名

選單 tool model options name convention 右側display中選擇顯示name還是code。不支援同時顯示,但可以選擇顯示code,然後將name填入stereotype中,變相同時顯示。設定stereotype顯示與否 選單 tool display prefer...

python 中英文 分離 中英文分離

由於沒有安裝 numpy 根據部落格提示,成功安裝了numpy 執行之後沒有錯誤,可是嘛,我看不到結果。也就隨它去了。主要有兩個問題,乙個是執行的時候出現的 valueerror need more than 0 values to unpack 對於空行就會報錯。不機智。於是加了個判斷。讓它一直走...

識別中英文

問 c語言的char的陣列中有中文和英文 怎麼取出來 文字是從文字檔案讀取出來的,放進去,怎麼取出來不出現亂碼?中文是兩個位元組,英文是乙個位元組,如果取到英文再去取中文,中文就會亂碼。怎麼解決這個問題?問題補充 一次全部列印沒問題,但是我現在的問題是需要把它截斷顯示,功能是電子書的分頁,所以分頁的...