问一个问题,单片机液晶上的字是怎么显示出来的,电脑上的字是怎么显示出来的,您真的知道真真实实的原理了吗??php
关于字库,您真的知道实质是如何调用的吗????编码
先看一下spa
相信你们都据说过 GB2312,实际上就是用16进制来表示咱中国人的符号和字,咱主要说一下字.net
能够看一下3d
https://blog.csdn.net/halchan/article/details/78353947 GB2312blog
https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php GBK 国标扩展 GBK包含GB2312 是在GB2312之上进行了补充get
实际上就是把每个汉字用两个16进制表示, 0xB0,0xA1 就表示 啊原理
好了这里就说完了,如今看如何把0xB0,0xA1和字库联系上扩展
首先说一下液晶是如何显示字的,im
实质上就是一个一个的小灯,假设咱用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 +偏移的地址 = 汉字在字库的位置