论坛元老
 
- 积分
- 3340
- 金钱
- 3340
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-3-2 22:36:39
|
显示全部楼层
本帖最后由 likunxue 于 2016-3-3 00:37 编辑
在32里面是怎么存储的这个我还真没仔细研究过, 位保存与读取都一般用8位的就行了
至于汉字与字符的区别如下处理:
汉字用双字节表示, 首字节一定大于 0X7F
字母用单字节表示,都小于 0X7F
/*********************************************************************************************
函数名:LCD_word 任意位置汉字及字符显示函数
调 用:LCD_word(x,y,*s);
参 数:x轴座标,y轴座标,s 数据指针
返回值:无
结 果:显示数组指针处的汉字const char *BiaoTi
*********************************************************************************************/
void LCD_word(u8 x,u8 y,const char *str) //任意行写入一个汉字
{
u16 cnt,tem,j,i,k;
while(*str>0)
{
tem = *str++; //取高8位字形码
if(tem <0x7f)
{
tem -= 32;
tem *= 16; //计算字模偏移地址
for(i = 0; i< 8; i++) Write_Dot_LCD(x+i,y,ASII_16[tem++]);//上行
for(i = 0; i< 8; i++) Write_Dot_LCD(x+i,y+8,ASII_16[tem++]); //下行
x += 8; //计算x坐标, ASCII 字符只主半个汉字宽
}//如果是字符,计算字模地址,置字符标志位8
else{
k = 0; //如果没有这个汉字则用0代替
tem <<= 8;
tem += *str++;
for(j = 0;j < 420;j ++ )
{
cnt =GB_16[j].Index[0]<<8;
cnt += GB_16[j].Index[1]; //取字形码参数
if(tem == cnt)//从结构数组中检索汉字
{
k = j; //得到需要的汉字码
break;
}
}
tem = 0;
for(i = 0; i< 16; i++) Write_Dot_LCD(x+i,y,GB_16[k].Msk[tem++]);//上行
for(i = 0; i< 16; i++) Write_Dot_LCD(x+i,y+8,GB_16[k].Msk[tem++]); //下行
x += 16; //计算x坐标,
}
}
}
|
|