c语言gb2312字体,NETC程序:GB2312汉字编码和C程序LCD显示实现

四.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;

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值