前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于编码和字库

关于编码和字库

作者头像
杨奉武
发布2019-02-13 16:10:18
8410
发布2019-02-13 16:10:18
举报
文章被收录于专栏:知识分享知识分享

问一个问题,单片机液晶上的字是怎么显示出来的,电脑上的字是怎么显示出来的,您真的知道真真实实的原理了吗??

关于字库,您真的知道实质是如何调用的吗????

先看一下

相信大家都听说过 GB2312,实际上就是用16进制来表示咱中国人的符号和字,咱主要说一下字

可以看一下

https://blog.csdn.net/halchan/article/details/78353947  GB2312

https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php  GBK  国标扩展      GBK包含GB2312  是在GB2312之上进行了补充

实际上就是把每一个汉字用两个16进制表示,  0xB0,0xA1 就表示   啊

好了这里就说完了,现在看如何把0xB0,0xA1和字库联系上

首先说一下液晶是如何显示字的,

实质上就是一个一个的小灯,假设咱用16*16的灯来显示字,0控制灯灭,1控制灯亮

 然后写完所有控制的数据,字就显示出来了.

然后说一下,实质上字库就是上面的0x08,0x80......0x10,0x40,.....后面的其它字,这样的数据

假设我要显示 "你" 就是把提取0x08,0x80.....0x10,0x40 就可以了

但是大家有没有发现像那种带字库的芯片我们只需要 写给它 "啊"  或者 0xB0,0xA1 这个 "啊" 就显示出来了,实际上你写的 "啊" 单片机也是换做 0xB0,0xA1

然后丢给处理芯片就可以了.

现在说处理芯片是如何做的

假设用的GBK编码

 假设数据是从存储芯片的0地址开始存的

我要显示 "丂"  是不是只需要从0地址开始取,取32个字节然后用这32个字节控制小灯就可以了

可是咱们让含有字库的芯片显示 丂  是给芯片的 0x81,0x40

 实质上吧!芯片是这样做的

0x81-0x81 + 0x40-0x40   就是0啦,就是从存储芯片的0地址开始取,取32个字节

假设

 (0x81-0x81 + 0xEF-0x40)*32(因为每一个字都会产生32个字节的数据哈)   就是5600,就是从存储芯片的5600地址开始取,取32个字节

假设

 (192*(0xD0-0x81)+(0xDE-0x40))*32     自己去算哈

实质上这就是最终的

(192*(汉字前面的字节-0x81)+(汉字后面的字节-0x40))*32  = 汉字在字库的位置

说一下,注意看,间隔了192个,空的地方在字库里面就是..我也不确定,但是占位置,不是32个0,就是32个ff

 假设存储芯片存储的地址有偏移

 (192*(汉字前面的字节-0x81)+(汉字后面的字节-0x40))*32 +偏移的地址 = 汉字在字库的位置

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档