目錄
字模介紹
什么是字模
字模的構(gòu)成
字模顯示原理
字模制作
如何制作字模
字模尋址公式
存儲字模文件
字模介紹
什么是字模
????????有了編碼,我們就能在計算機(jī)中處理、存儲字符了,但是如果計算機(jī)處理完字符后直接以編碼的形式輸出,人類將難以識別。因此計算機(jī)與人交互時,一般會把字符轉(zhuǎn)化成人類習(xí)慣的表現(xiàn)形式進(jìn)行輸出,如顯示、打印的時候。
????????但是如果僅有字符編碼,計算機(jī)還不知道該如何表達(dá)該字符,因為字符實際上是一個個獨特的圖形,計算機(jī)必須把字符編碼轉(zhuǎn)化成對應(yīng)的字符圖形人類才能正常識別,因此我們要給計算機(jī)提供字符的圖形數(shù)據(jù),這些數(shù)據(jù)就是字模,多個字模數(shù)據(jù)組成的文件也被稱為字庫。計算機(jī)顯示字符時,根據(jù)字符編碼與字模數(shù)據(jù)的映射關(guān)系找到它相應(yīng)的字模數(shù)據(jù),液晶屏根據(jù)字模數(shù)據(jù)顯示該字符。
字模的構(gòu)成
????????已知字模是圖形數(shù)據(jù),而圖形在計算機(jī)中是由一個個像素點組成的,所以字模實質(zhì)是一個個像素點數(shù)據(jù)。為方便處理,我們把字模定義成方塊形的像素點陣,且每個像素點只有0和1這兩種狀態(tài)(可以理解為單色圖像數(shù)據(jù))。
????????下圖兩個寬、高為16x16的像素點陣組成的兩個漢字圖形,其中的黑色像素點即為文字的筆跡。計算機(jī)要表示這樣的圖形,只需使用16x16個二進(jìn)制數(shù)據(jù)位,每個數(shù)據(jù)位記錄一個像素點的狀態(tài),把黑色像素點以“1”表示,無色像素點以“0”表示即可。這樣的一個漢字圖形,使用16x16/8=32個字節(jié)來就可以記錄下來。
????????16x16的“字”的字模數(shù)據(jù)以C語言數(shù)組的方式表示,見下面的代碼,在這樣的字模中,以兩個字節(jié)表示一行像素點,16行構(gòu)成一個字模。
字模顯示原理
????????如果使用LCD的畫點函數(shù),按位來掃描這些字模數(shù)據(jù),把為1的位以黑色來顯示(也可以使用其它顏色),為0的數(shù)據(jù)位以白色來顯示,即可把整個點陣還原出來,顯示在液晶屏上。
????????為方便講解,編寫一個使用串口printf利用字模打印字符到串口上位機(jī)的實驗,實驗效果如下:
LCD像素點顯示字模正是運用了這個原理。
字模制作
????????為方便使用,需要制作所有常用字符的字模,如程序只需要英文顯示,那就需要制作包含ASCII碼表中所有字符的字模,如程序只需要使用一些常用漢字,則可以選擇制作GB2312編碼里所有字符的字模,而且希望字模數(shù)據(jù)與字符編碼有固定的映射關(guān)系,以便我們在程序中使用字符編碼作為索引,查找字模。
????????在網(wǎng)上搜索可找到一些制作字模的軟件工具,可滿足這些需求。下面以一取模軟件“PCtoLCD”為例講解如何制作字模,其它字模軟件也是類似的。
如何制作字模
(1)配置字模格式,打開取模軟件,點擊“選項”菜單,會彈出一個對話框。
- 選項“點陣格式”中的陰、陽碼是指字模點陣中有筆跡像素位的狀態(tài)是“1”還是“0”,像我們前文介紹的那種就是陰碼,反過來就是陽碼。本工程中使用陰碼。
- 選項“取模方式”是指字模圖形的掃描方向,修改這部分的設(shè)置后,選項框的右側(cè)會有相應(yīng)的說明及動畫顯示,該設(shè)置會改變生成的字模數(shù)據(jù)位數(shù)的順序,我們一般把它配置成“逐行式”
- 取模走向,分為順向(低位在前)和逆向(高位在前),此設(shè)置不影響不影響生成的字模數(shù)據(jù)位數(shù)的順序,只是字模軟件生成字體位序的不同,我們可任意設(shè)置
- 選項“每行顯示的數(shù)據(jù)”里我們把點陣和索引都配置成16,設(shè)置這個點陣的像素大小為16x16。
字模選項的格式保持不變,設(shè)置完我們點擊確定即可,字模選項的這些配置會影響到顯示代碼的編寫方式。
(2)生成ASCII字模
使用取模軟件生成ASCII字庫步驟如下
使用Sublime text 3
先打開索引文件,發(fā)現(xiàn)文件末尾默認(rèn)添加了一個結(jié)束符,我們必須要刪掉
再打開字模文件,自動以16進(jìn)制形式打開,全選之后使用ctrl+shift+L可以進(jìn)行所有行同時光標(biāo)操作,添加0x和','
我們打開野火提供的兩個ASCII文件
發(fā)現(xiàn)除了刪除了文末結(jié)束符還刪除了ASCII碼前面32個無意義的字符,從0x20的“ ”空格開始表示
(3)生成GB2312字模
????????配置完字模選項后,點擊軟件中的導(dǎo)入文本圖標(biāo),會彈出一個“生成字庫”的對話框,點擊右下角的生成國標(biāo)漢字庫按鈕即可生成包含了GB2312編碼里所有字符的字模文件。
????????在《LCD—液晶顯示漢字》的工程目錄下的《GB2312_H1616.FON》是用這個取模軟件生成的字模原文件,若不想自己制作字模,可直接使用該文件。
字模尋址公式
????????使用字模軟件制作的字模數(shù)據(jù)一般會按照編碼格式排列。如我們利用以上軟件生成的字模文件《GB2312_H1616.FON》中的數(shù)據(jù),是根據(jù)GB2312的區(qū)位碼表的順序存儲的,它存儲了區(qū)位碼為0101-9494的字符,每個字模的大小為16x16/8=36字節(jié)。其中第一個字符“空格”的區(qū)位碼為0101,它是首個字符,所以文件的前36字節(jié)存儲的是它的字模數(shù)據(jù);同理,36-72字節(jié)存儲的則是0102字符“、”的字模數(shù)據(jù)。所以我們可以導(dǎo)出任意字符的尋址公式:
????????Addr = (((CodeH-0xA0-1)*94) +(CodeL-0xA0-1))*16*16/8
????????其中CodeH和CodeL分別是GB2312編碼的第一字節(jié)和第二字節(jié);94是指一個區(qū)中有94個位(即94個字符)。公式的實質(zhì)是根據(jù)字符的GB2312編碼,求出區(qū)位碼,然后區(qū)位碼乘以每個字符占據(jù)的字節(jié)數(shù),求出地址偏移。
????????由于區(qū)位碼0000沒有存儲任何字符,第一個字符的區(qū)位碼是0101,編碼是0xA1A1,所以字符的高字節(jié)減去0xA0再減1,區(qū)碼偏移量;字符的低字節(jié)減去0xA0再減1算出位碼偏移量;最后乘字節(jié)數(shù)16*16/8就得到了該字符在字符數(shù)組中的起始下標(biāo)。
文章來源:http://www.zghlxwxcb.cn/news/detail-585585.html
存儲字模文件
????????上面生成的《GB2312_H1616.FON》文件的大小為576KB,比很多STM32芯片內(nèi)部的所有FLASH空間都大,如果我們還是在程序中直接以C語言數(shù)組的方式存儲字模數(shù)據(jù),STM32芯片的程序空間會非常緊張,一般的做法是把字模數(shù)據(jù)存儲到外部存儲器,如SD卡或SPI-FLASH芯片,當(dāng)需要顯示某個字符時,控制器根據(jù)字符的編碼算好字模的存儲地址,再從存儲器中讀取,而FLASH芯片在生產(chǎn)前就固化好字模內(nèi)容,然后直接把FLASH芯片貼到電路板上,作為整個系統(tǒng)的一部分。文章來源地址http://www.zghlxwxcb.cn/news/detail-585585.html
到了這里,關(guān)于LCD-STM32液晶顯示中英文-(7.字模及顯示原理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!