国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

自己動(dòng)手做OLED字庫(kù)

2022-06-29 13:54 作者:會(huì)整活的劍人  | 我要投稿

完整字符集合太長(zhǎng)了,視頻只節(jié)選了一部分


為什么要做這個(gè)東西

如何用OLED屏幕顯示中文是困擾著前C豬腳,儀光廢物cbj很長(zhǎng)時(shí)間的一個(gè)問題.

比如說我們上CSDN去搜索怎么做OLED字模,找到一篇博客大概是這樣的,上來先給了這個(gè)取字模軟件的下載鏈接然后使用他,like this.

但是cbj打開這個(gè)軟件的時(shí)候是這個(gè)樣子的

且不說界面長(zhǎng)的丑,一種上古軟件的感覺撲面而來,而且還有亂碼(因?yàn)樵趨^(qū)域里面開了使用utf-8,懶得改回去了),所以我看他很不爽啊,此外,現(xiàn)在這個(gè)東西的源代碼是根本找不到的.


搞清楚原理,先把漢字轉(zhuǎn)換成圖像,然后根據(jù)OLED的驅(qū)動(dòng)造字庫(kù)

下面先簡(jiǎn)單介紹下OLED屏幕.他是個(gè)啥東西不是重點(diǎn),就略過了,上網(wǎng)能搜到.

為方便敘述,在128乘64的OLED屏幕上建立坐標(biāo)系如下圖,x的正方向?yàn)橛?y的正方向?yàn)橄?并規(guī)定坐標(biāo)從0開始,則列號(hào)的值域?yàn)閇0,127],行號(hào)的值域?yàn)閇0,63]

因?yàn)镺LED屏幕只能顯示二值圖像,所以確定屏幕上的(x,y)坐標(biāo)是亮還是暗只用1位來表示就足夠了,所以一個(gè)完整屏幕的OLED圖像可以有128*64/8=1024個(gè)字節(jié)來表示,比如說下面這個(gè)char buffer[1024]數(shù)組.

下面把數(shù)組和OLED屏幕上的點(diǎn)建立對(duì)應(yīng)關(guān)系.一共128列,64行,把64行可以合并成8排數(shù)據(jù),下標(biāo)為0到127的字節(jié)對(duì)應(yīng)第一排(也就是第0行到第7行)的亮暗情況,下標(biāo)為128到255的字節(jié)對(duì)應(yīng)第二排(也就是第8行到第15行),以此類推把全部的1024個(gè)字節(jié)排滿.

OLED的驅(qū)動(dòng)程序?qū)崿F(xiàn)的功能是在屏幕上指定位置顯示字符或者圖像.目前實(shí)現(xiàn)了以下功能

1:顯示大小不超過128列64行的矩形圖像

2:顯示大小為8行6列的ASCII字符

3:顯示大小為16行8列的ASCII字符

這個(gè)專欄重點(diǎn)討論的是顯示大小為16行16列的中文字符.

下面說如何造字模,翻譯翻譯就是把字符轉(zhuǎn)換為OLED要顯示的圖像,但是因?yàn)镺LED顯示的圖像格式和計(jì)算機(jī)里面的數(shù)字圖像不太一樣,所以要分步驟進(jìn)行轉(zhuǎn)換.

于是就有了下面的python代碼.至于為什么用的python,因?yàn)槿绻眉僀語(yǔ)言就需要掌握Windows GDI?相關(guān)的API,奈何我翻了好久微軟的文檔也沒有成功造出來,然后現(xiàn)學(xué)python的pillow圖像庫(kù)去造字模.

新建一個(gè)叫im的16行16列的圖像,在里面寫一個(gè)16px的宋體"曹"字,對(duì)應(yīng)的unicode為0x66f9

然后就有了下面這個(gè)圖像,根據(jù)im圖像和OLED圖像的對(duì)應(yīng)關(guān)系,做做位運(yùn)算,

字模就造出來了,就是下面那個(gè)長(zhǎng)度為32的列表,對(duì)應(yīng)了OLED里面的2排16行,每行有16列的一個(gè)"方塊".

有了這個(gè)代碼下面寫個(gè)for循環(huán),根據(jù)unicode編碼表的漢字區(qū)域(0x4e00到0x9fff)造常用字的OLED字庫(kù)了,生僻字(0x3400到0x4dbf)目前還沒有施工.

然后就有一個(gè)二進(jìn)制字庫(kù)文件了,算下大小,(0xa000-0x4e00)*(0x20)=(0xa4000)剛好是671744字節(jié).

對(duì)于二進(jìn)制文件,現(xiàn)在是在windows上用CH341連接IIC接口的OLED屏幕調(diào)試,直接一個(gè)fopen打開文件,然后對(duì)于指定的unicode字符,直接用fseek把文件指針挪到相應(yīng)的位置然后從那里讀32字節(jié)進(jìn)來就ok了,剩下的事情就是調(diào)用俺基于CH341的驅(qū)動(dòng)庫(kù)實(shí)現(xiàn)的OLED驅(qū)動(dòng)去顯示了.(別忘了最后fclose),大概這樣.

剩下的就是,洗洗睡了

自己動(dòng)手做OLED字庫(kù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
保康县| 崇仁县| 双鸭山市| 收藏| 鹤壁市| 黄冈市| 饶平县| 仙居县| 雷波县| 当涂县| 呈贡县| 阜阳市| 聊城市| 青阳县| 泸西县| 环江| 沁阳市| 凤城市| 宁陵县| 弥勒县| 双桥区| 夹江县| 茂名市| 通化县| 宜川县| 翁牛特旗| 西盟| 桂东县| 海丰县| 曲沃县| 长葛市| 南安市| 新野县| 阜南县| 若羌县| 涟水县| 涞源县| 东丽区| 定兴县| 鄂托克前旗| 吴桥县|