久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: Arduino OLED庫(kù)自己U8g2添加字庫(kù)教程 [打印本頁(yè)]

作者: 夜問(wèn)夜問(wèn)    時(shí)間: 2022-11-13 13:35
標(biāo)題: Arduino OLED庫(kù)自己U8g2添加字庫(kù)教程
Arduino OLED自己添加字庫(kù)教程,剛開(kāi)始接觸U8g2字庫(kù)走了不少?gòu)澛罚缓骍8g2添加字庫(kù)的過(guò)程記錄下來(lái)做成文檔供和我一樣的小白們參考,希望能申精。

一、前言

最近在研究用 Arduino 以 U8g2 庫(kù)驅(qū)動(dòng) OLED 顯示中文,過(guò)程中走了很多彎路歷經(jīng)曲折,翻閱很多資料對(duì) 于我這樣的小白來(lái)說(shuō)這些資料有點(diǎn)深?yuàn)W,理解不是怎么透徹于是請(qǐng)教群里的高手,非但問(wèn)題沒(méi)有幫助解決還受到嘲 笑和譏諷,于是我下定決心自己一定要把這個(gè)字庫(kù)弄成功,最后我翻閱資料和反復(fù)試驗(yàn)終于成功的添加了自己的字 庫(kù),所以我要將自己的心得和成功的方法獻(xiàn)給像我這樣的小白。

  二、準(zhǔn)備硬件和軟件   
1.準(zhǔn)備一塊 ssd1306 液晶顯示模塊,一塊 arduino 開(kāi)發(fā)板。


2.準(zhǔn)備 arduino IDE


3.下載 ssd 1306 的支持庫(kù) u8g2:地址自行搜索
  或者在 arduino 上安裝 u8g2:(1)打開(kāi)管理庫(kù):


(2)搜索并安裝 u8b2

用 arduino 驅(qū)動(dòng) oled 顯示屏 (1)接線。我用的是 Arduino R3,這個(gè) 1106 的屏幕是使用 i2c,我只需在 Arduino R3 上選取兩個(gè)引腳作為 i2c 即可,而 1106 需要 3.3v 供電,再接兩根線供電。 (2)打開(kāi) u8b2 的例程 PrintUTF8。


(3)配置工程的引腳和通訊方式。只需要根據(jù)屏幕的通訊方式和接的 I2C 引腳配置即可,配置方式是選擇對(duì)應(yīng)的 配置去掉注釋。我用的是 SSD1106_128X64,用了 I2C 接口,使用 SDA 和 SCL 作為 i2c 的引腳,所以我配置是:   
U8G2_SSD1106_128X64_NONAME_F_SW_I2C    u8g2(U8G2_R0,    /*    clock=*/    23,    /*    data=*/    22,    /*    reset=*/ U8X8_PIN_NONE);       // All Boards without Reset of the Display

代碼如下:

void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print();                  // enable UTF8 support for the Arduino print() function
}


void loop(void) {
u8g2.setFont(u8g2_font_unifont_t_chinese2);  // use chinese2 for all the glyphs of "你好世界" u8g2.setFontDirection(0);
u8g2.clearBuffer(); u8g2.setCursor(0, 15); u8g2.print("Hello World!"); u8g2.setCursor(0, 40);
u8g2.print("世界你好");                  // Chinese "Hello World"
u8g2.sendBuffer();


delay(1000);

}
顯示效果如下:

如果不能正常顯示漢字需要將漢字在 UTF8 編碼格式下打開(kāi),也可以在 UTF8 編碼格式格式下打開(kāi)以上代碼然后點(diǎn) 擊保存,我使用的是 Notepad++ 打開(kāi)并保存代碼便可以解決漢字亂碼的問(wèn)題

四、制作自定義的字庫(kù) u8b2 官方的庫(kù)只能顯示很少的中文,如果要顯示其他中文就要自己制作字庫(kù)了。制作字庫(kù)的工具在目錄在:
u8g2\tools\font\bdfconv

bdfconv.exe 這個(gè)工具是一個(gè) dos 命令,需要開(kāi)啟 cmd.exe 在命令行輸入命令或者用 bat 腳本來(lái)生成字庫(kù)。
bdfconv.exe 命令的使用方法如下:

bdfconv [options] filename
-h                       Display this help
-v                       Print log messages
-b <n>             Font build mode, 0: proportional, 1: common height, 2: monospace, 3: multiple of 8
-f <n>              Font format, 0: ucglib font, 1: u8g2 font, 2: u8g2 uncompressed 8x8 font (enforces -b 3)
-m 'map'         Unicode ASCII mapping
-M 'mapfile'          Read Unicode ASCII mapping from file 'mapname'
-o <file>       C output file
-n <name>       C indentifier (font name)
-d <file>       Overview picture: Enable generation of bdf.tga and assign BDF font <file> for description
-l <margin> Overview picture: Set left margin
-a                       Overview picture: Additional font information (background, orange&blue dot)
-t                       Overview picture: Test string (Woven silk pyjamas exchanged for blue quartz.)

-r                      Runtime test
map := <mapcmd> { "," <mapcmd> }
mapcmd := <default> | <maprange> | <exclude>
default := "*"
maprange := <range> [    ">" <addexpr> ]                 Move specified glyph <range> to target code <num>
exclude := "~" <range>
range := <addexpr> [ "-" <addexpr> ]                      Select glyphs within specified range addexpr := <mulexpr> [ "+" <mulexpr> ]
mulexpr := <num> [ "*" <num> ]
num := <hexnum> | <decnum>
hexnum := "$" <hexdigit> { <hexdigit> }
decnum := <decdigit> { <decdigit> }
decdigit := "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
hexdigit := "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F" | <decdigit>
{ } zero, one ore more, [ ] zero or once, | alternative example:
-m '32-255'            select gylphs from encoding 32 to 255
-m '32-255,~64' select gylphs from encoding 32 to 255, exclude '@'
-m '32,48-57'       select space, '1', '2', ... '9' build modes:
-b 0: Most compact, glyph bitmap is minimal
-b 1: Like -b 0, but glyph bitmap is extended to the height of the largest glyph within the selected glyph list.
Also the width of the gylphs is extended to cover the delta x advance.
-b 2: Like -b 1, but glyph width is set to the width of the largest glyph within the selected gylph list.
-b 3: Like -b 2, but width and height are forced to be a multiple of 8.

在“bdfconv”目錄下有一個(gè)腳本 “test_helvb18.bat” ,
bdfconv.exe -v -f 1 -m "32-127" ../bdf/helvB18.bdf -o helvb18_tf.c    -n u8g2_font_helvB18_tf -d ../bdf/helvB18.bdf type helvb18_tf.c
我們可以利用這個(gè)腳本來(lái)生成字庫(kù),這個(gè)是直接通過(guò)“helvB18.bdf”字庫(kù)文件生成 ".C"的字庫(kù)數(shù)據(jù),而中文字庫(kù) 很大,一般都有幾 M 大小,顯然這種直接生成的方法不好用。還有另外一種字庫(kù)生成方法是按需提取字庫(kù),利用一 個(gè) map 表來(lái)提取要生成字庫(kù)的內(nèi)容,map 表里面放置的是 unicode 編碼(需要哪些中文就填這些中文的 unicode 碼)。unicode 編碼工具很多我用的是 ”文本與 unicode 轉(zhuǎn)換小工具 V5.02.05”



Unicode 碼分隔符用$ 在文本區(qū)輸入想要顯示的漢字 Unicode 碼進(jìn)制選十六進(jìn)制,接著 Unicode 碼區(qū)會(huì)顯示十

六進(jìn)制碼,復(fù)制生成的字碼將它填在自己要顯示的 map 表里面。 我的字碼放置在“chinese2.map”(當(dāng)然這和字碼表也可以另建)如下圖:


  
這種生產(chǎn)方式的命令是:

bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese2.map -d ../bdf/7x13.bdf -n u8g2_font_unifont_zgzt -o u8g2_font_unifont_zgzt.c

  

從這個(gè)命令我們可以知道 map 文件是 “chinese2.map”,全路徑是:“u8g2\tools\font\build”,我們可以在 “chinese2.map”文件里面添加我們要顯示的中文。生產(chǎn)的字庫(kù)代碼在 u8g2_font_unifont_zgzt.c 文件里面,我 們可以將里面的內(nèi)容復(fù)制,然后打開(kāi)路徑" U8g2\src\clib 下的 u8g2_fonts.c "文件, 將復(fù)制的內(nèi)容粘貼在里面。 注意:我是將字碼放在例程的字庫(kù)里(也就數(shù) chinese2.map 里面)所以產(chǎn)生命令是:

bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese2.map -d ../bdf/7x13.bdf -n u8g2_fonts -o u8g2_fonts.c

如下圖: 點(diǎn)擊保存。
   
打開(kāi) u8b2 的例程 PrintUTF8 程序?qū)⑸蛇^(guò)字碼的漢字填在 u8g2.print("");里就可以顯示要顯示的漢字了。

以上圖文的pdf格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便大家保存):如果你不想保存就不必下載了:
U8g2自己添加字庫(kù).pdf (1.09 MB, 下載次數(shù): 42)

作者: mengsiu    時(shí)間: 2022-11-15 09:20
那么,如何用現(xiàn)成的字庫(kù)反推出字庫(kù)里包含的文字?
作者: mengsiu    時(shí)間: 2022-11-15 09:22
這些生成的代碼表面上像是一堆亂碼,這是一種怎么樣的編碼規(guī)律?
作者: glinfei    時(shí)間: 2022-11-15 15:46
mengsiu 發(fā)表于 2022-11-15 09:22
這些生成的代碼表面上像是一堆亂碼,這是一種怎么樣的編碼規(guī)律?

應(yīng)該有反推的程序,不過(guò)要是字少,可以用excel弄,很方便的。
作者: mengsiu    時(shí)間: 2022-11-15 22:50
glinfei 發(fā)表于 2022-11-15 15:46
應(yīng)該有反推的程序,不過(guò)要是字少,可以用excel弄,很方便的。

如何反推?
作者: glinfei    時(shí)間: 2022-11-16 15:17
mengsiu 發(fā)表于 2022-11-15 22:50
如何反推?

查一下編碼規(guī)則唄。也是點(diǎn)陣字,只不過(guò)先描述了每個(gè)字的有效范圍和坐標(biāo)等信息,所以每個(gè)字模大小、起始位置是不一樣的,而且本來(lái)是十六進(jìn)制的,折騰到十進(jìn)制了,自然產(chǎn)生亂碼,找到每個(gè)字模點(diǎn)陣的起點(diǎn),然后按普通點(diǎn)陣字處理,自然就翻譯了。
作者: gaoyimingming    時(shí)間: 2023-10-8 14:21
感謝你提供的資料,正好遇到項(xiàng)目需要使用
作者: qinxuebing    時(shí)間: 2023-10-11 08:56
研究下字庫(kù)芯片,自己生成字庫(kù)文件太占處理器存儲(chǔ)空間,得不償失




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91福利在线观看 | 精品成人在线视频 | 99热最新网址 | 一级少妇女片 | 天天操夜夜拍 | 日韩视频一区在线观看 | 国产高清在线精品一区二区三区 | 99精品欧美一区二区三区综合在线 | 久久精品99 | av资源中文在线天堂 | 精品欧美一区二区三区精品久久 | 韩国毛片一区二区三区 | 美日韩一区二区 | 日韩视频在线观看 | 成人依人| av一级在线观看 | 国产99免费 | 亚洲一区二区三区四区五区午夜 | 风间由美一区二区三区在线观看 | 中文字幕国产精品 | 波多野结衣在线观看一区二区三区 | 99re6在线视频精品免费 | 中文字幕第一页在线 | 亚洲精品乱码 | 免费黄色大片 | 欧美日韩在线播放 | 日韩二三区| 青草青草久热精品视频在线观看 | 99久久久无码国产精品 | 免费黄色片在线观看 | 最新国产在线 | 99视频在线免费观看 | 欧美视频免费在线 | 久草影视在线 | 婷婷开心激情综合五月天 | 国产亚洲精品精品国产亚洲综合 | 久久国产精品99久久久久久丝袜 | 欧美精品一区在线 | 国产一区二区三区四区区 | 精品欧美乱码久久久久久 | 九九热免费看 |