【摘要】 使用單片機開發程序時,經常需要使用LCD顯示屏顯示一些文字、數字。單片機因為配置不高,很多場合也不需要顯示很多文字或者說只是顯示一種大小、或者固定幾種大小的文字,或者顯示一些固定的文字或者一些英文字母、數字。如果只是顯示固定文字,這時可以直接將要顯示的文字提前取模存放到程序中,在通過LCD屏畫點函數將數據畫在LCD屏幕上去。如果顯示固定大小的文字,可以制作點陣字庫。
一、 GB2312編碼
GB2312 碼是中華人民共和國國家漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集–基本集》, 由國家標準總局發布, 1981 年 5 月 1 日 實施,通行于大陸。新加坡等地也使用此編碼。GB2312 收錄簡化漢字及符號、字母、 日文假名等共 7445 個圖形字符,其中漢字占 6763 個。GB2312 規定<對任意一個圖形字符都采用兩個字節表示,每個字節均采用七位編碼表示>,習慣上稱第一個字節為<高字節>, 第二個字節為<低字節>。GB2312-80 包含了大部分常用的一、二級漢字, 和 9 區的符號。該字符集是幾乎所有的中文系統和國際化的軟件都支持的中文字符集,這也是最基本的中文字符集。其編碼范圍是高位 0xa1- 0xfe, 低位也是 0xa1-0xfe;漢字從 0xb0a1 開始,結束于 0xf7fe。GB2312 將代碼表分為 94 個區,對應第一字節( 0xa1 -0xfe);每個區 94 個位(0xa1-0xfe),對應第二字節,兩個字節的值分別為區號值和位號值加 32(20H), 因此也稱為區位碼。01-09 區為符號、數字區, 16-87 區為漢字區(0xb0-0xf7),10-15 區、88-94 區是有待進一步標準化的空白區。 GB2312 將收錄的漢字分成兩級: 第一級是常用漢字計 3755 個,置于 1 6-55 區, 按漢語拼音字母/筆形順序排列;第二級漢字是次常用漢字計 3008 個,置于 56-87 區,按部首/筆畫順序排列。
故而 GB2312 最多能表示 6763 個漢字。
二、GBK編碼
全國信息技術化技術委員會于 1995 年 12 月 1 日《漢字內碼擴展規范》。GBK 向下與 GB2312 完全兼容,向上支持 ISO 10646 國際標準,在前者向后者過渡過程中起到的承上啟下的作用。GBK 亦采用雙字節表示,總體編碼范圍為 8140-FEFE 之間,首字節在 81-FE 之間,尾字節在 40-FE 之間,剔除 XX7F 一條線。
GBK 共收入 21886 個漢字和圖形符號,包括:
GB2312 中的全部漢字、非漢字符號。
BIG5 中的全部漢字。
與 ISO 10646 相應的國家標準 GB13000 中的其它 CJK 漢字,以上合計 20902 個漢字。
其它漢字、部首、符號,共計 984 個。
GBK 編碼區分三部分:
- 漢字區,包括:
GBK/2:OXBOA1-F7FE, 收錄 GB2312 漢字 6763 個,按原序排列;
GBK/3:OX8140-AOFE,收錄 CJK 漢字 6080 個;
GBK/4:OXAA40-FEAO,收錄 CJK 漢字和增補的漢字 8160 個。
- 圖形符號區,包括:
GBK/1:OXA1A1-A9FE,除 GB2312 的符號外,還增補了其它符號
GBK/5:OXA840-A9AO,擴除非漢字區。
- 用戶自定義區:
即 GBK 區域中的空白區,用戶可以自己定義字符
每個 GBK 碼由 2 個字節組成:
第一個字節為 0X81~0XFE
第二個字節分為兩部分:
- 0X40~0X7E
2.0X80~0XFE。
其中與 GB2312 相同的區域,字完全相同。
我們把第一個字節代表的意義稱為區,那么 GBK 里面總共有 126 個區( 0XFE-0X81+1),
每個區內有 190 個漢字( 0XFE-0X80+0X7E-0X40+2),總共就有 126190=23940 個漢字。我們的點陣庫只要按照這個編碼規則從 0X8140 開始,逐一建立, 每個區的點陣大小為每個漢字所用的字節數190。這樣,我們就可以得到在這個字庫里面定位漢字的方法:
當 GBKL<0X7F 時: Hp=((GBKH-0x81)190+GBKL-0X40)(size*2);
當 GBKL>0X80 時: Hp=((GBKH-0x81)190+GBKL-0X41)(size*2);
其中 GBKH、 GBKL 分別代表 GBK 的第一個字節和第二個字節(也就是高位和低位), size
代表漢字字體的大小(比如 16 字體, 12 字體等), Hp 則為對應漢字點陣數據在字庫里面的起始地址(假設是從 0 開始存放)。
這樣我們只要得到了漢字的 GBK 碼,就可以顯示這個漢字了。從而實現漢字在液晶上的顯示。
簡化公式:
if(L<0x7f)L=L-0x40;
else L=L-0x41;
H=H-0x81;
Addr=(190*H+L)*size;
L 是漢字的低字節,H是漢字的高字節。
Addr 是該漢字在字庫里的偏移量。
Size 是該漢字的應點陣集所占的字節數量。
漢字的高字節大于0x80 ,才是漢字。高字節小于0X80就是英文字符。
字庫在FLASH尋址過程:
首先得到該漢字點陣碼在FLASH里的存儲偏移量,然后在加上該漢字庫在FLASH里的存放起始地址,就得到了該漢字的點陣數據位置。
得到絕對位置之后,就可以讀出點陣碼,進行打點顯示。
BIG5 編碼
BIG5 是通行于臺灣、香港地區的一個繁體字編碼方案。雖然存在一些瑕疵,但廣泛應用于電腦行業,尤其是互聯網中,從而成為一種事實上的行業標準。
1983 年 10 月,***科學委員會、教育部國語推行委員會、中央標準局、行政院共同制定了《通用漢字標準交換碼》,后經修訂于 1992 年 5 月公布,更名為《中文標準交換碼》,BIG5 是臺灣資訊工業策進會根據以上標準制定的編碼方案。
BIG5 碼是雙字節編碼方案,其中第一個字節的值在 OXAO-OXFE 之間,第二個字節在 OX40-OX7E 和
OXA1-OXFE 之間。
BIG5 收錄 13461 個漢字和符號,包括:
- 符號 408 個,編碼位置 A140-A3BE
- 常用字 5401 個,編碼位置 A440-C67E,包括臺灣教育部頒布的《常用國字標準字體表》的全部漢字 4808 個,臺灣教科書常用字 587 個,異體字 6 個。
- 次常用字 7652 個,編碼位置 C940-F9D5,包括臺灣教育部頒布的《次常用國字標準字體表》的全部漢字 6341 個,《罕用國字標準字體表》中使用頻率較高的字 1311 個。
GB13000 編碼
GB13000 等同于國際標準的《通用多八位編碼字符集 (UCS)》 ISO10646.1,就是等同于 Unicode 的標準,代碼頁等等的都使用 UTF 的一套標準。
從 ASCII、GB2312、GBK 到 GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方
法是高字節的最高位不為 0。按照程序員的稱呼,GB2312、GBK 到 GB18030 都屬于雙字節字符集 (DBCS)。
三、偏移量計算
GB2312收錄簡化漢字及符號、字母、日文假名等共7445 個圖形字符,其中漢字占6763 個。GB2312 規定“對任意一個圖形字符都采用兩個字節表示,每個字節均采用七位編碼表示”,習慣上稱第一個字節為“高字節”,即所謂的區碼。第二個字節為“低字節”,即所謂的位碼。GB2312―80包含了大部分常用的一、二級漢字,和9區的符號。該字符集是幾乎所有的中文系統和國際化的軟件都支持的中文字符集,這也是最基本的中文字符集。其編碼范圍是高位0xa1~0xfe,低位也是0xa1~0xfe;漢字從0xb0a1開始,結束于0xf7fe。GB2312將代碼表分為94個區,對應第一字節(0xa1~0xfe);每個區94 個位(0xa1~0xfe),對應第二字節。兩個字節的值分別為區號值和位號值加32(20H),因此也稱為區位碼。01~09區為符號、數字區,16~87區為漢字區(0xb0~0xf7),10~15區、88~94區是有待進一步標準化的空白區。GB2312將收錄的漢字分成兩級:第一級是常用漢字計3755個,置于16~55區,按漢語拼音字母/筆形順序排列:第二級漢字是次常用漢字計3008 個,置于56~87 區,按部首/筆畫順序排列。故而GB2312 最多能表示6763 個漢字。
而GBK內碼完全兼容GB2312,同時支持繁體字,總漢字數有2萬多個,編碼格式如下,每個GBK 碼由2 個字節組成,第一個字節為0X81~0XFE,第二個字節分為兩部分,一是0X40~0X7E,二是0X80~0XFE。其中與GB2312相同的區域,字完全相同。把第一個字節代表的意義稱為區,那么GBK里面總共有126個區(0XFE~0X81+1),每個區內有190 個漢字(0XFE~0X80+0X7E~0X40+2),總共就有126x190=23940 個漢字。點陣庫只要按照這個編碼規則從0X8140開始,逐一建立,每個區的點陣大小為每個漢字所用的字節數乘以190。這樣,就可以得到在這個字庫里面定位漢字的方法:
當GBKL<0X7F 時:Hp=((GBKH-0x81)×190+GBKL-0X40)×(sizex2);
當GBKL>0X80 時:Hp=((GBKH-0x81)×190+GBKL-0X41)×(sizex2);
其中GBKH、GBKLL 分別代表GBK 的第一個字節和第二個字節(也就是高位和低位),size 代表漢字字體的大小(比如16 字體,12 字體等),Hp 則為對應漢字點陣數據在字庫里面的起始地址。
對于GBK 字庫和GB2312 字庫,他們的解碼部分部分略有不同,這個區別主要是由于他們的編碼方式不同引起的,對于GBK 字庫,解碼的方式如下:
qh=*code;
ql=*(++code);
if(ql<0x7f)
ql -= 0x40;
else
ql -= 0x41;
qh -= 0x81;
foffset = ((unsigned long)190*qh + ql)*(size * 2);
對于GB2312 字庫,解碼的方式如下:
qh=*code;
ql=*(++code);
ql -= 0xa1;
qh -= 0xa1;
foffset = ((unsigned long)94*qh + ql)*(size * 2);
其中qh、ql 分別代表GBK 的第一個字節和第二個字節(也就是高位和低位),size代表漢字字體的大小(比如16字體,12字體等),foffset 則為對應漢字點陣數據在字庫里面的起始地址。
四、ASCII字符集取模方式
-
需要使用的工具軟件:
PCtoLCD2002.exe
- ASCII字符集:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
注意:前面第一個字符是空格。
每個字符點陣碼所占用的字節數為:(size/8+((size%8)?1:0))*(size/2),其中size:是字庫生成時的點陣大小(12/16/24…)
- PC2LCD2002取模方式設置:陰碼+逐列式+順向+C51格式
- 以下是16*16的字模示例
將取出的ASCII字模使用二維數組保存,方便訪問。
//16*16 ASCII字符集點陣
const unsigned char asc2_1608[95][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/
{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
{0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/
{0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/
{0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/
{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/
{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/
{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/
{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/
{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/
{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/
{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/
{0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/
{0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/
{0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/
{0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/
{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00},/*"C",35*/
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/
{0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/
{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/
{0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/
{0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/
{0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/
{0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/
{0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/
{0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/
{0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/
{0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/
{0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/
{0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/
{0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/
{0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"",60*/
{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/
{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/
{0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/
{0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/
{0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/
{0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/
{0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/
{0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/
{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/
{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/
{0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/
{0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/
{0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/
{0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00},/*"o",79*/
{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/
{0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/
{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/
{0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/
{0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/
{0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/
{0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/
{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/
{0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
{0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/
};
- 顯示一個字符:
void LcdShowChar(u16 x,u16 y,u8 num,u8 size)
{
u8 temp,t1,t;
u16 y0=y;
u8 csize=size/8+((size%8)?1:0))*(size/2); //得到字體一個字符對應點陣集所占的字節數
num=num-' '; //得到偏移后的值(ASCII字庫是從空格開始取模,所以-' '就是對應字符的字庫)
for(t=0;t;t++)>
五、封裝文字描點函數
void DisplayData(u32 x,u32 y,u32 w,u32 h,u8 *p,u16 c1,u16 c2)
{
u16 i,j,x0=x;
u8 data;
u16 colortemp=POINT_COLOR;
for(i=0;i0x80) //判斷是否是中文-編碼規則從 0X8140 開始
{
if(x+size>239)
{
x=0; //橫坐歸0
y+=size; //換行
if(y+size>319)return;
}
//LCD_ShowChar2(x,y,size,*p,c1,c2);//顯示一個中文
x+=size;
p+=2; //偏移兩個字節
}
else if(*p>=' ' && *p<='~') //常用的ASCII碼
{
if(x+size/2>239)
{
x=0; //橫坐歸0
y+=size; //換行
if(y+size>319)return;
}
if(size==16)
{
//顯示英文字母
DisplayData(x,y,size/2,size,(u8*)ASCII_8_16[*p-' '],c1,c2);
}
else if(size==24)
{
DisplayData(x,y,size/2,size,(u8*)ASCII_8_16[*p-' '],c1,c2);
}
p+=1;
x+=size/2;
}
else if(*p=='\n')
{
x=0;
y+=size;
p+=1; //偏移指針
}
else
{
p+=1; //偏移指針
}
}
}
-
單片機
+關注
關注
6039文章
44574瀏覽量
636322 -
lcd
+關注
關注
34文章
4427瀏覽量
167763 -
GBK
+關注
關注
0文章
2瀏覽量
7185 -
GB2312
+關注
關注
0文章
6瀏覽量
1783
發布評論請先 登錄
相關推薦
評論