前言:

 汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接受后就由汉字操作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法无关。机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理。

汉字在计算机内部其内码是唯一的,GB码的机内码为二字节长的代码。   GB码的机内码为二字节长的代码,它是在相应GB码的每个字节最高位上加“1”,即   汉字机内码=汉字国标码+8080H   例如,上述“啊”字的国标码是3021H,其汉字机内码则是B0A1H。   汉字机内码的基础是汉字国际码。   机内码:为了避免ASCII码和国标码同时使用时产生二义性问题,大部分汉字系统都采用将国标码每个字节高位置1作为汉字机内码。这样既解决了汉字机内码与西文机内码之间的二义性,又使汉字机内码与国标码具有极简单的对应关系。   汉字机内码、国标码和区位码三者之间的关系为:区位码(十进制)的两个字节分别转换为十六进制后加20H得到对应的国标码;机内码是汉字交换码(国标码)两个字节的最高位分别加1,即汉字交换码(国标码)的两个字节分别加80H得到对应的机内码;区位码(十进制)的两个字节分别转换为十六进制后加A0H得到对应的机内码。   举例:机内码位BEDF,求区位码?   有两种解法:1.BEDFH-A0A0H=1E3FH=3063D;

  2.BEDFH-8080H=3E5FH(国标码),3E5FH-2020H=1E3FH=3063D.

正文:

在使用字库芯片时,用户只要知道字符的内码,就可以计算出该字符点阵在芯片中的地址,然后就可从该地址连续读出
点阵信息用于显示。

也就是说给字库芯片输入的是汉字的内码,从芯片里面输出的是字符点阵,比如 8*8点阵,8*16 点阵  15*16 点阵, 这些点阵也就是汉字显示在屏幕上的模,可以直接显示在液晶屏上。这些点阵也是一系列的二进制或者16进制组成,在没有办法显示在液晶上的时候,可以比对 在其他地方读出的点阵 二进制测试字库芯片是否正确读出数据。

字符点阵实例8*8写“王”:

11111111

00011000

00011000

11111111

00011000

00011000

00011000

11111111

那么写入芯片的字库内码怎么得到?上面已经说了,“不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理”,也就是会说,在程序中写入的汉字就是用汉字内码的形式存储的,只要将存储汉字的地址里的内容取出就行了,里面就是内码!!OK!现在对于字库芯片的理解已经说完。接下来就是连接设置芯片引脚什么的了,在此就不多赘述。

lcd 输入实例:

print_24 ( 0,36,"刘艳磊",0x00 );

程序范例(在字库芯片 .c 文件中):

现在使用的字库芯片是用SPI通信的,其读写代码如下:

void GT23_Write( uint32_t f )
{
 uint8_t x;
 uint32_t smj;
 smj= ( ( READ<<24 ) | f );
 for ( x=0; x<32; x++ )
 {
  GT_sclk0;
  if ( ( smj&0x80000000 ) )
   {GT_si1;}
  else
   {GT_si0;}
  smj=smj<<1;
  GT_sclk1;
 }
}

uint8_t GT23_Read()
{
 uint8_t x,GY23_addr=0x00,ss;
 for ( x=0; x<8; x++ )
 {
  GT_sclk0;//下降沿
  GY23_addr=GY23_addr<<1;
  for(ss=0;ss<1;ss++){;};
  if ( 0x04==P1_26 ) //判断数据值
   {GY23_addr= (GY23_addr|0x01);}
  else        //写出数据值
   {GY23_addr= (GY23_addr|0x00);}
  GT_sclk1;
 }
 return GY23_addr;
}

字库芯片中字符地址计算函数:

uint32_t GT23_write_15( const char *a )  //*a为写入芯片的字,将汉字写入函数,函数会自动算出字符矩阵(模)在字库芯片里面的地址,可以用来直接显示在LCD上。
{
 uint32_t Address15=0;
 uint8_t MSB15,LSB15;
 MSB15=*a;
 a++;
 LSB15=*a;
 if ( MSB15 >=0xA1 && MSB15 <= 0Xa9 && LSB15 >=0xA1 )
  Address15 = ( ( MSB15 - 0xA1 ) * 94 + ( LSB15 - 0xA1 ) ) *32+ BaseAdd15; //计算字符在芯片里面地址的算法
 else if ( MSB15 >=0xB0 && MSB15 <= 0xF7 && LSB15 >=0xA1 )
  Address15 = ( ( MSB15 - 0xB0 ) * 94 + ( LSB15 - 0xA1 ) + 846 ) *32+ BaseAdd15;//计算字符在芯片里面地址的算法
 return Address15;
}

补(下面这些算法字库芯片手册里面会有的):

15X16点GB2312标准点阵字库

参数说明:
GBCode表示汉字内码。
MSB 表示汉字内码GBCode 的高8bits。
LSB 表示汉字内码GBCode 的低8bits。
Address 表示汉字或ASCII字符点阵在芯片中的字节地址。
BaseAdd:说明点阵数据在字库芯片中的起始地址。
计算方法:
BaseAdd=0x5F4C0; 
if(MSB >=0xA1 && MSB <= 0Xa3 && LSB >=0xA1)//全角字符1区1部分
  Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*32+ BaseAdd;
else if(MSB ==0xA6 && LSB >=0xA1)//全角字符1区2部分
  Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1)-94*2 )*32+ BaseAdd;
else if(MSB ==0xA9 && LSB >=0xA1)//全角字符1区3部分
  Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1)-94*4 )*32+ BaseAdd; 
else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1)//16点阵汉字区
  Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 662)*32+ BaseAdd;

结尾:

关于对于字库芯片哪有有误的,欢迎留言!!

转载请附连接:http://blog.csdn.net/lyl494223339/article/details/7912554#reply

字库芯片学习之汉字内码相关推荐

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

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

  2. 字库芯片GT20L16S1Y使用记录

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

  3. c语言对字库的查找程序,把已经调好的GT20L16S1Y字库芯片C语言驱动代码分享给大家。...

    #include  "stm8s.h" #include "GT20L16S1Y.h" #include "delay.h" /****** ...

  4. SPI方式读取汉字字库芯片

    需求: 在液晶屏上显示指定的汉字 方案1:以带有汉字的图片形式显示 否定原因: 1)在画面展示时,会覆盖显示背景,不美观协调 2)需要先由图片格式转换成位图格式,不连贯,不方便 方案2:通过直接读取汉 ...

  5. stm32【GT30L32S4W字库芯片】

    GT30L32S4W字库芯片调试 测试平台:STM32F103RFT6 库版本:官方标准库3.5.0版本 字库芯片:GT30L32S4W 字库标准:GB2312国标汉字,ASCII字符 点阵排列方式: ...

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

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

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

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

  8. “高通”字库芯片的使用方法

    STM32+字库 "高通"字库芯片的使用方法 "高通"字库芯片的使用方法 STM32+字库 前言 一.电路设计 二.程序设计 代码如下: 整体代码部分 1.字库 ...

  9. 驱动字库芯片GT23L24M0140

     驱动字库芯片GT23L24M0140 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: ...

最新文章

  1. docker用gpu的参数_从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
  2. 共享卫士2.0版设置说明
  3. Mac安装MySQL数据库
  4. 互联网1分钟 |1120
  5. mysql连接数紧张_Mysql 查看连接数,状态,最大并发数
  6. 量子计算机理论基础,所谓量子计算机,是指建立在量子力学理论基础上的计算机...
  7. iOS中安全结束 子线程 的方法
  8. xtrabackup备份mysql“ib_logfile0 is of different”错误分析
  9. ubuntu安装nginx及其默认目录结构
  10. 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
  11. base64原理与实现
  12. 计算机科学导论考试A卷试题,计算机科学导论试题A答案
  13. 下载新版火狐后无法同步书签_firefox无法同步书签,恢复备份文件失败的解决办法...
  14. PyTorch注意力机制【动手学深度学习v2】
  15. 最简单的让IjkPlayer自动旋转带有rotation视频的方法
  16. deepinV20 显卡驱动 cuda10.2+cudnn配置
  17. 前端vue方法导出为xsml
  18. 服装店如何根据自身情况使用进销存软件?
  19. 新旧两种方法给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
  20. 无法正常启动0xc0000142的错误

热门文章

  1. 每学期都以NB的姿态出场
  2. 【文集】Unity的热更新
  3. 【历史上的今天】8 月 22 日:改变世界的程序员们
  4. 这首王维的古诗该如何解析?
  5. 计算机玩游戏 突然黑屏 又亮了,显示器黑一下又亮了怎么回事?解决显示器黑屏一会又亮一会又黑...
  6. 服务器类型,服务器名称,数据库,数据库服务实例之间的关系
  7. 办公数字化选钉钉还是企业微信?
  8. 黄万里诗九首[引用]
  9. realy-made and tailor-made
  10. 阿里格灵深瞳计算机视觉岗实习面经