7651|20

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

LCDj显示不同宽度ASC字符 [复制链接]

我们在LCD上显示字符,当然是希望每个字符的 长 X 高 是相同点阵的方框字,取相应字模时,偏移量也好计算,但是像office word里,它有些字体单个字符的宽度不一样的,例如M 和I ,它是基于何种思想来处理不现宽度的字符送到LCD显示的? 难到一个字节的ASC 码变成多个字节的,里面有每个字符的宽度属性?

最新回复

补充一下,那个字库的分类可以参考一定的标准 如 字库一:X、R、A。。。 (字库范围内的大字体) 字库二:1、2、3、I。。。。 (字库范围内的瘦字体) 字库三:o、a、c。。。。(字库范围内的矮字体)  详情 回复 发表于 2009-9-11 13:49
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在嵌入式里,用来显示的字模我们一般是做成 长X宽 固定的字模,为我们显示和计算偏移量带来方便,但为了达到美观,像word 一样,同样大小的字体,多数字符宽度是不一样的,这样在MCU下处理起来相当麻烦,如果在无OS里的板子里达成这个效果,你有什么好方法?
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
sss
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
比较麻烦,但也不是不可能

简单的办法还是用点阵,增加一个字节指定宽度
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
但字符的存储/查找/绘画都不同了....
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
除了建一个索引表,表里面有字模的起始地址和长度,还有什么更好的方法吗?
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

7
 
字库文件里面对每一个字模设立一个尺寸的数据段,任意宽度都一样.
另外,在同一个字符集的同一种字体里面,I和M的宽度是一样的.
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼上的什么意思,不懂!字模宽度一样,显示出来也就一样宽,不就没我所说的这个效果了吗?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
矢量字库呀,生成多大的字是实时生成的。没有操作系统的话还是不要做的好。
非要做的话就搞几种字库,建立索引,慢慢查吧。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 shagua0916 的回复:
楼上的什么意思,不懂!字模宽度一样,显示出来也就一样宽,不就没我所说的这个效果了吗?


字符编码->字符集字体字库文件->单个字符的bitmap
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
gelu1040 是不是说每个字符字模做成大小一样,只不过里面有一部分是关于这个字模属性的表述,真正的点阵数据要从根据属性分离出来?如果是这样,字模相当不好取呀,从工具取好之后还要手功计算添加.
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
我用点阵的做过.不过有点麻烦
就是字模里的第一个字节作为字模长度,显示的时候读取第一个字节根据这个字节确定送显的数据长度
编程的时候有点麻烦
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
在office word等用的变宽字体不是点阵字库(post-script)是用公式计算出来再画的。
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

14
 
不清楚,学习中
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 10 楼 shagua0916 的回复:
gelu1040 是不是说每个字符字模做成大小一样,只不过里面有一部分是关于这个字模属性的表述,真正的点阵数据要从根据属性分离出来?如果是这样,字模相当不好取呀,从工具取好之后还要手功计算添加.


建立一个字库文件,文件头可以包含高度信息(所有字符的高度都是一样的,在一个字体里面);
文件的数据区以字符为单位存储,字符数据可以包含一个字符宽度字节,其他的需要也可以加上.输出到显示器的数据长度跟文件头的字符高度和字符数据中的字符宽度有关,按此便宜,建立文件结构.

那么字库文件中所有字符都有一个自己的宽度信息,你要多宽就多宽.当然不用每个字符都一样了.如果没有宽度信息,那么必然做出来的是每个字符的宽度都一样的,不过可以节约至少一个字节的存储空间
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

16
 
gelul040,光有宽度还不行吧,得还要个表存字符在字库的偏移量吧!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
想了想,如果是非字库点阵液晶的话

有宽度应该可以了,只需要在点阵中再加一个宽度属性

在显示的时候,用宽来处理字模显示器

另外相应的接口检查总的宽度防止溢出就OK

比如说字的结构可以这么组织:

struct
{
    unsigned char Chinese[3];//放汉字
    unsigned char Width;//字模宽度
    unsigned char Model[32];//16*16最大点阵,用纵向取模,字模连续存放
}CModel;

void putChar(unsigned char *Buf)
{
    unsigned char i = 0;

    //从字模库中找字

    //如果找着就显示

    for (i = 0; i < CModel; i++)
    {
        //显示上半部分
    }

    for (i = 0; i < CModel; i++)
    {
        //显示下半部分
    }
}
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 15 楼 shagua0916 的回复:
gelul040,光有宽度还不行吧,得还要个表存字符在字库的偏移量吧!


点阵字库,嵌入式的你还要什么矢量
首先高度有了,宽度有了,那么每一个字符的扫描数据的大小就有了,偏移两就可以计算了.
当然你如果不想计算,那么可以加个偏移信息的冗余数据
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

19
 
给你个例子

Block  Char  Name  Bits  Description  
Font Header    Reserve  8  Reserved for future use (must be set to 0)  
    Font ID  8  User-assigned ID number  
    First Char  16  Character code of first character in font (e.g. 32)  
    Last Char  16  Character code of last character in font (e.g. 3006)  
    Reserve  8  Reserved for future use (must be set to 0)  
    Height  8  Character height in pixels  
Character Table  1st Char  Offset MSB  8  Offset from font table start (8 MSBs)  
    Width  8  Width in pixels  
    Offset LSB  16  Offset from font table start (16 LSBs)  
  2nd Char  Offset MSB  8  Offset from font table start (8 MSBs)  
    Width  8  Width in pixels  
    Offset LSB  16  Offset from font table start (16 LSBs)  
  ...  ...  ...  ...  
  ...  ...  ...  ...  
  ...  ...  ...  ...  
  Last Char  Offset MSB  8  Offset from font table start (8 MSBs)  
    Width  8  Width in pixels  
    Offset LSB  16  Offset from font table start (16 LSBs)  
Font Bitmap  1st Char    Char width dependent  Bitmap data of character  
  2nd Char    Char width dependent  Bitmap data of character  
  ...  ...  ...  ...  
  Last Char    Char width dependent  Bitmap data of character  
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

20
 
把字库进行分类,或者可以理解使用三类不同的字库。
例如:
字库一:X、R、A。。。
字库二:1、2、3、I。。。。
字库三:o、a、c。。。。

显示的时候不是一个一个进行显示,而是先开辟存储显示一行信息的数组(显示缓存行),先一个一个的将要显示的字符写到显示缓存行中(可以一个一个写的时候就调整位置,也可以全部写好以后再调整),然后将一整行数据打到液晶上。

当然这个“显示缓存行”(一般为一个二维数组)要有一定的参数进行约定,如高度值(宽度值)一般是固定的,即以字库中最大字符的高度为准。

当然想做的完美,还可以引入一些其他的参数设定功能,如行距可调整。。。。

再扯就远了,呵呵
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表