一:先上图看效果,下面截图是android上测试的结果“SD卡测试”、、“GPS测试”等字符都是24x24字库里面来的。

二:

 1)简介

     《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980

GB2312 编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。
基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行 编码,称为 区位码。
把换算成十六进制的 区位码加上2020H,就得到 国标码。 国标码加上8080H,就得到常用的计算机机内码。1995年又颁布了《汉字 编码扩展规范》(GBK)。GBK与GB 2312—1980国家标准所对应的内码标准兼容,同时在字汇一级支持ISO/IEC10646—1和GB 13000—1的全部中、日、韩(CJK)汉字,共计20902字。

    2)收录

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括 拉丁字母、 希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个 全角字符。
GB 2312的出现,基本满足了汉字的计算机处理需要,它所 收录的汉字已经覆盖中国大陆99.75%的使用频率。
对于人名、 古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来 GBK及GB 18030汉字字符集的出现。

 3)分区表示

GB 2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为 区位码。
01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有 编码。
举例来说,“啊”字是GB2312之中的第一个汉字,它的 区位码就是1601。

   4)字节结构

在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器 编码表上的“GB2312”,通常都是指“ EUC-CN”表示法。
每个汉字及符号以两个字节来表示。第一个 字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。
“高位 字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上 0xA0)。 由于一级汉字从16区起始,汉字区的“高位 字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。
例如“啊”字在大多数程序中,会以两个 字节,0xB0(第一个字节) 0xA1(第二个字节)储存。 区位码=区 字节+位字节(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。

三:代码实现

其中用到的hkk.h库文件我已经上传的CSDN(http://download.csdn.net/detail/funbox/7650167)上面,有用到的朋友可以下载使用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <linux/android_pmem.h>
#include "hkk24.h"typedef unsigned long  U32;
typedef unsigned short U16;
typedef unsigned char  U8;
U8* string_def[] = {{" SD卡测试"},{" Camera测试"},{"音频测试"},{"重力传感器"},{" LCD测试" },{" GPS测试"},{"背光测试"},{"触屏测试"},{"按键测试"},{" OTG测试"},{"蓝牙测试"},{" WIFI测试"},{" HDMI测试"},{" NFC测试"},{"指南针测试"},{"陀螺仪测试"},};
/*
===============================================================================Function : PutPixel功能     :画单个像素(一个点)入口参数 :U16 x:点的X坐标U16 y:点的y坐标U16 c:点的颜色
===============================================================================
*/
void PutPixel(U16 x, U16 y)
{set_pixel(x, y, 0, 0, 255, 0);
}
/*
===============================================================================Function : WriteHZ24功能      :画中文24点阵汉字入口参数 :U16 x:汉字X坐标U16 y:汉字Y坐标U16 c:汉字颜色U16 bk_c:汉字背景颜色U32 addr:汉字所在地址
===============================================================================
*/
void WriteHZ24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{U16 i16, j16, zg;U32 mask, buf;U8 const *pZK;pZK = &HZ24KFont[addr];for(i16=0; i16<24; i16++){buf= pZK[3*i16]<<16 | pZK[3*i16 + 1]<<8 | pZK[3*i16 + 2];mask = 0x800000;for(j16=0; j16<24; j16++){if(buf & mask){PutPixel(x+j16,y+i16);}else{//*addr_ptr = bk_c;  //??????????????}mask = mask >> 1;}}
}/*
===============================================================================Function : WriteEN24功能      :画英文24*16点阵汉字入口参数 :U16 x:汉字X坐标U16 y:汉字Y坐标U16 c:汉字颜色U16 bk_c:汉字背景颜色U32 addr:英文所在地址
===============================================================================
*/
void WriteEN24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{U16  i16, j16, zg;U32  mask, buf;U8 const *pZK;pZK = &ENG24Font[addr];for(i16=0; i16<24; i16++){buf= pZK[2*i16]<<8 | pZK[2*i16 + 1];mask = 0x8000;for(j16=0; j16<24; j16++){if(buf & mask) {PutPixel(x+j16,y+i16);} else {//*addr_ptr = bk_c;}}mask = mask >> 1;}
}/*
===============================================================================Function : Lcd_Put24功能     :画24点阵的文字入口参数 :U16 x:文字X坐标U16 y:文字Y坐标U16 c:文字颜色U16 bk_c:文字背景颜色U8* string:文字内容
===============================================================================
*/
void Lcd_Put24(U16 x, U16 y, U16 c, U16 bk_c, U8* string)
{U8  i8;U16 Block, Pos;U16  nm;U32 addr;U8 size;//printf("Lcd_Put24 string = %s\n",string);size = strlen(string);for(i8 = 0;i8 < size;i8++){printf("string[%d]:%x\n",i8,string[i8]);}for(i8=0; i8<size; i8++){if(string[i8]==0) break;if(string[i8]>128){nm = 0; Block = string[i8];Pos   = string[++i8];nm = Block<<8|Pos;//nm = 0xb0a1;printf("nm = 0x%x\n",nm);//addr = (((nm>>8) - 0x0b0 )*94 + ((nm&0x00ff) - 0xa1  )+1410)*72;addr = (((nm>>8) - 0xa1 )*94 + ((nm&0x00ff) - 0xa1))*72;WriteHZ24(x+i8*13, y, c, bk_c, addr);} else {addr = (2*94+(string[i8]-0x21))*72;WriteHZ24(x+i8*15, y,c,bk_c,addr);//addr = (string[i8]-0x20)*48;//WriteEN24(x+i8*13, y,c,bk_c,addr);}}
}
int main(int argc, char ** argv)
{U8 i8;gr_init();draw_line(0,0,300,300);Lcd_Put24(0,0,0,0,"啊薄病场础怠丁贰浮埂骸尽取摇堋妗稹鳌齄亚忆");Lcd_Put24(0,50,0,0,"Yayi");for(i8 = 0;i8 < 8;i8++) {Lcd_Put24(0,100+i8*50,0,0,string_def[i8*2]);Lcd_Put24(300,100+i8*50,0,0,string_def[i8*2+1]);}exit(EXIT_SUCCESS);
}


GB2312介绍及字库使用相关推荐

  1. GB2312 中文简体字库表

    GB2312 中文简体字库表 Character code table GB2312 (Simplified Chinese) character code table code +0 +1 +2 + ...

  2. 字库芯片介绍与使用(附STM32程序~~~)

    不知道大家是否了解字库芯片(网上这方面的资料好像挺少的),今天给大家简单介绍一下字库芯片. 先举个例子,如果我们想在点阵屏或液晶屏上面显示一个88的正方形,我们该怎么做. 很简单,假设屏上面" ...

  3. 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文

    连续两个月的加班,给ODM客户生产温控器订单,今天终于顺利发货,对于工程师出身的我,终于可以对着电脑,消停几天,研究技术,分享技术了,闲话少说,直接进入正题: 半年前有个老客户介绍个中央某院的项目,我 ...

  4. [zz]GB2312/GBK/GB18030/BIG5 的历史

    http://iask.sina.com.cn/b/7837434.html?from=related GBK中的"K"是扩展的意思,而GB2312中的"2312&quo ...

  5. GB2312/GBK/GB18030/BIG5 的历史

    GBK中的"K"是扩展的意思,而GB2312中的"2312"以及GB18030中的"18030"是国家标准的代号,BIG5是港澳台地区的编码 ...

  6. 集通字库芯片GT20L16S1Y 读取字体数据

    [本文发布地址https://blog.csdn.net/Stack_/article/details/120432945,未经许可不得转载,转载须注明出处] 这个字库芯片的厂家叫高通,但不是美国那个 ...

  7. 字库芯片GT20L16S1Y使用记录

    1.芯片基本信息 16x16点阵的汉字库芯片 支持GB2312国标简体汉字(含有国家信标委合法授权).ASCII字符 排列格式为竖置横排 SPI 串行总线接口 通过字符内码计算字库在芯片中的地址 2. ...

  8. 字库芯片学习之汉字内码

    前言: 汉字机内码,又称"汉字ASCII码",简称"内码",指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码.输入码被接受后就由汉字操作系统的 ...

  9. stm32实用篇3: 字符显示字库生成

    在使用stm32显示文本时,首先要使用字模软件生成字库,如下: 这里,使用的是Consolas字体,点阵大小为16*16(汉字),此时英文字体的大小为8*16,宽度为汉字字体的一半,然后设置选项参数( ...

最新文章

  1. 决策树算法介绍及应用
  2. Webservice开发之xsd中开发登录请求的响应接口
  3. mysql数据库入门教程(8):数据的基本类型
  4. DP专辑之最长公共子序列及其变形
  5. 学计算机申请书100字,加入学生会申请书100字范文
  6. laravel mysql视图,在 Laravel 视图文件中引入 bootstrap
  7. PyTorch 1.0 中文文档:Tensor(张量)的属性
  8. 每天开豪车跟随老板出入高档会所,吃住高档酒店,这样的职场生活,有必要坚持下去吗?
  9. php 用户中心 框架,OpenCenter —— PHP 通用用户中心框架【国人开发,代码托管在 Git@OSC】...
  10. java如何代码找错误_如何编写可怕的Java代码?
  11. php 登陆代码,php登陆代码_php实现简单用户登录功能程序代码
  12. 转:make cmake和catkin_make的区别
  13. 基于js实现的简易记账小本
  14. 蓝桥杯 输入信用卡号码
  15. 微信小程序css篇----背景(Background)与颜色(Color)
  16. 恒大威武!关于SQL的一些基础知识整理回顾
  17. STM32F767芯片在使用中的注意点(一)
  18. 六个在线生成网址二维码的API接口
  19. 私有ip地址是怎么分配的?
  20. 深度优先搜索求解八数码问题

热门文章

  1. 昌吉学院计算机工程系毕业后安排工作嘛,经济贸易分院成功举办昌吉学院与我院本科教学与学生工作对接会...
  2. 简单的微信聊天模拟(W-01)
  3. 手把手教你入门Hadoop(附代码资源)
  4. 镜像 网站 linux 程序,腾讯开源镜像网站(腾讯云软件源)地址,附使用说明
  5. web.config与mysql的连接 appsettings_Web.config配置文件中定义了如下数据库连接串
  6. 移动开发中“单位”的那些事儿
  7. 贝叶斯推断应用:垃圾邮件过滤
  8. 众多的.ts文件、.key文件、.m3u8文件,合并成一个完整的mp4格式的视频
  9. HTB_Responder 综合靶机 菜菜被虐现场实录
  10. 数学定理(1)——正态分布