問一個問題,單片機液晶上的字是怎麼顯示出來的,電腦上的字是怎麼顯示出來的,您真的知道真真實實的原理了嗎??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 +偏移的地址 = 漢字在字庫的位置