一、 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 一条线。

php汉字点阵取模GB2312GBK汉字取模与字库偏移地址的盘算与汉字描点 jQuery

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)(size2);

当 GBKL>0X80 时: Hp=((GBKH-0x81)190+GBKL-0X41)(size2);

个中 GBKH、 GBKL 分别代表 GBK 的第一个字节和第二个字节(也便是高位和低位), size

代表汉字字体的大小(比如 16 字体, 12 字体等), Hp 则为对应汉字点阵数据在字库里面的起始地址(假设是从 0 开始存放)。

这样我们只要得到了汉字的 GBK 码,就可以显示这个汉字了。
从而实现汉字在液晶上的显示。

简化公式:

if(L<0x7f)L=L-0x40;else L=L-0x41;H=H-0x81; Addr=(190H+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)190qh + ql)(size 2);

对付GB2312 字库,解码的办法如下:

qh=code;ql=(++code);ql -= 0xa1;qh -= 0xa1;foffset = ((unsigned long)94qh + ql)(size 2);

个中qh、ql 分别代表GBK 的第一个字节和第二个字节(也便是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),foffset 则为对应汉字点阵数据在字库里面的起始地址。

四、ASCII字符集取模办法须要利用的工具软件:PCtoLCD2002.exeASCII字符集:

!"#$%&'()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

把稳:前面第一个字符是空格。

每个字符点阵码所占用的字节数为:(size/8+((size%8)?1:0))(size/2),个中size:是字库天生时的点阵大小(12/16/24...)

PC2LCD2002取模办法设置:阴码+逐列式+顺向+C51格式

以下是1616的字模示例

将取出的ASCII字模利用二维数组保存,方便访问。

//1616 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<csize;t++) { if(size==12)temp=asc_1206[num][t]; //调用1206字体 else return; for(t1=0;t1<8;t1++) { if(temp&0x80)LcdDrawPoint(x,y,0x0); else LcdDrawPoint(x,y,0xFFFF); temp<<=1; y++; if((y-y0)==size) { y=y0; x++; break; } } } }五、封装笔墨描点函数

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;i<w/8h;i++) //取出的模型总字节数 { data=p[i]; //取出数组里一个字节的数据 for(j=0;j<8;j++) { if(data&0x80)Draw_Point(x0,y,c1); //字体颜色 else { Draw_Point(x0,y,c2); //背景颜色 } data<<=1; //连续判断下一位 x0++; //连续画下一个点 } if(x0-x==w) //判断是否须要换行 { x0=x;//横坐标归位 y++; //纵坐标自增 } } POINT_COLOR=colortemp; }void DisplayString(u32 x,u32 y,u32 size,u8 p,u16 c1,u16 c2){ while(p!='\0') { if(p>0x80) //判断是否是中文-编码规则从 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; //偏移指针 } }}