STM32点阵字库-ASII字符集
- Fang XS.
- 1452512966@qq.com
- 如果有错误,希望被指出
前言
- STM32使用LCD显示时,使用带字库的LCD可以直接用。但是项目上,可能需要多国语言字库,让产品能销售到不同国家。
- 大部分的国家使用英语,一般采用ASII编码,常规做法是用不同的数组来存放不同字体的ASII字库。
- 但是这样有个缺点,就是占RAM内存,STM32跑裸机还好,如果需要RTOS,Fatfs等等,堆内存就受限。如果需要不同字体,不同字号的字库,存在数组里,内存肯定是不够的。
ASII字库
- ASII简介
- ASII字符表可显示的一共有95个字符,其余33个为控制字符或通信专用字符。
- 在C语言中,每个字符都有其对应的值,例如字符
'A' == 0x41
- ASII字库制作
- FontMaker
- 使用FontMaker软件生成:
- 字体一般选择宋体。
- 字符集选择标准字库ASII。
- 扫描方式和比特顺序依照LCD驱动选择。
- 点击保存字库,命名为ASII16x16.FON即可。
- ASII字库偏移计算
- 在ASII字符集中,由于控制字符占33个,可显示字符从英文空格开始,但是提取的ASII字库都是从英文空格开始。
- 所以,一个可显示的字符在提取的字库中的位置是
c - ' '
的。 - 字符的偏移根据点阵大小和当前字符决定。
- 在字库中,数据的存放都是按照字节来存放的,一个字符占据一定的空间。
- 它的偏移就是指,指定的字符在字库中的那个地址开始。
- 偏移计算:
offset = 点阵大小宽度 X 点阵大小高度 X (C - ' ' ) / 8
- 例如:
第二节ASII字库制作的图片所示的大小计算字符’A’的偏移量:
offset = 16 X 16 X (‘A’ - ’ ’ ) / 8 = 1056
- ASII字库数据获取
- 依照前面章节,获取了字库和字符的偏移量,现在只需要获取字符的占用的字节数,就可以直接显示出来了。
占用的字节数 = 点阵大小宽度 X 点阵大小高度 / 8
- 例如第二节ASII字库制作的图片所示的大小来计算:
占用的字节数 = 16 X 16 / 8 = 32 Bytes - 这里的32Bytes,直接画点就能显示在LCD上了。
- ASII字库大小计算
字库大小(Bytes) = 高度 X 宽度 X 字符集字符个数 / 8
- 例如:
第二节ASII字库制作的图片所示的大小计算:
字库大小 = 16 X 16 X 96 /8 = 3072 Bytes
-
常见使用方式
一般情况下,字库与SD卡或SPI Flash一起用,也就是把字库装SD卡,用文件系统进行管理,比如Fatfs,直接用Fatfs提供的文件操作API,把字库数据获取出来,再显示。 -
显示乱码的问题,可能原因如下:
- 字库生成工具的扫描方式或比推特顺序与实际使用的LCD驱动不一致。
- 获取字库的偏移计算出错或者获取字库数据的数组溢出等。
注
- 支持多国语言操作方式相同,区别在于偏移地址的确定和字库数据的获取。