NETC程序:GB2312汉字编码和C程序LCD显示实现

网友投稿 753 2022-09-24 10:20:22

NETC程序:GB2312汉字编码和C程序LCD显示实现

GB2312或GB 2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

NETC发布最近编写的GB2312字库编码和C语言程序在单片机,嵌入式LCD显示中实现!

按GB2312表顺序,从第一行开始向右每取8个点作为一个字节,如果最后不足8个点就补满8位。8位逐行取模,第一点为高位.

四.C程序实现./******************************************************************************** 函数名称: Lcd_PutHZ.* 功能描述: 在LCD屏幕上指定坐标点写汉字 NETC-陈建长.* 输入参数: (unsigned int x,unsigned int y坐标),(unsigned char *pStr 单个汉字 如 “啊”),             (unsigned int c,unsigned int bk_c颜色和区域颜色),unsigned int st  区域颜色选择     st = 1 有 st = 0 无,在动态变化的情况下,如果没有区域颜色则前后信息叠加.    * 输出参数: None        * 返回参数: None*******************************************************************************/void Lcd_PutHZ(unsigned int x,unsigned int y,unsigned char *pStr,unsigned int c,unsigned int bk_c,unsigned int st){    unsigned short int i,j;       unsigned char *pZKL,*pZKR,mask,buf;    /* 缓存指针 数据 */ /*   * 在GB2312编码中对所收汉字进行了“分区”处理,94个区,每区含有94个汉字/符号 * 汉字由两个ASCII码组成,第一个减去160就是区码,第二个减去160就是位码 * 在C中处理时,如"啊"的代码是B0A0 +1,定义*pStr = "啊",则*pStr = 176(B0),*(pStr+1) = 161(A0+1) * 第一个ASC 176 - 160(0xA0) = 16 ,第二个 ASC 161 - 160(0xA0) = 1,所以区位码为:1601 * 按GB2312表顺序,从第一行开始向右每取8个点作为一个字节,如果最后不足8个点就补满8位。 * 8位逐行取模,第一点为高位.16X16汉字一行就有两个字节 X 32行  * 因字模数字式从0开始,所以 起始位为 ( ( (*pStr - 0xA0) - 1 ) * 94 + ( *(pStr+1) - 0xA0 ) - 1 ) * 32                    */  /* 左侧字模起始地址 */    pZKL = &__CHS[ ( ( (*pStr - 0xA0) - 1 ) * 94 + ( *(pStr+1) - 0xA0 ) - 1 ) * 32];   /* 右侧字模起始地址 */    pZKR = &__CHS[ ( ( ( (*pStr - 0xA0) - 1 ) * 94 + ( *(pStr+1) - 0xA0 ) - 1 ) * 32 ) + 1];       for( i = 0 ; i < 16 ; i++ )       {              /* 处理左侧显示 */              mask = 0x80;              buf = *pZKL;     *(pZKL += 2);               for( j = 0 ; j < 8 ; j++ )              {                     if( buf & mask )                     {                            PutPixel(x+j,y+i,c);                     }      else      {       if( st )                  {                      PutPixel(x+j,y+i,bk_c);                  }      }                                          mask = mask >> 1;              }                   /* 处理左侧显示 */              mask = 0x80;              buf = *pZKR;     *(pZKR += 2);              for( j = 0 ; j < 8 ; j++ )              {                     if( buf & mask )                     {                            PutPixel(x+j + 8,y+i,c);                     }      else      {      if( st )                     {                         PutPixel(x+j + 8,y+i,bk_c);                     }     }                     mask = mask >> 1;              }                        }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网络营销的几种模式,你了解吗?(网络营销模式与传统营销模式关系)
下一篇:第四章 更多bash shell命令一
相关文章